Index: model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java,v retrieving revision 1.92 diff -u -r1.92 IncrementalImageBuilder.java --- model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java 6 Mar 2007 02:38:50 -0000 1.92 +++ model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java 12 Mar 2007 19:20:40 -0000 @@ -201,7 +201,7 @@ ReferenceCollection refs = (ReferenceCollection) valueTable[i]; if (refs.includes(internedQualifiedNames, internedSimpleNames)) { IFile file = javaBuilder.currentProject.getFile(typeLocator); - SourceFile sourceFile = findSourceFile(file); + SourceFile sourceFile = findSourceFile(file, true); if (sourceFile == null) continue next; if (sourceFiles.contains(sourceFile)) continue next; if (compiledAllAtOnce && previousSourceFiles != null && previousSourceFiles.contains(sourceFile)) @@ -306,16 +306,19 @@ // delete generated files and recompile any affected source files try { for (int j = deletedGeneratedFiles.length; --j >= 0;) { - SourceFile sourceFile = findSourceFile(deletedGeneratedFiles[j]); - if (sourceFile == null) continue; + IFile deletedFile = deletedGeneratedFiles[j]; + if (deletedFile.exists()) continue; // only delete .class files for source files that were actually deleted + + SourceFile sourceFile = findSourceFile(deletedFile, false); String typeLocator = sourceFile.typeLocator(); int mdSegmentCount = sourceFile.sourceLocation.sourceFolder.getFullPath().segmentCount(); IPath typePath = sourceFile.resource.getFullPath().removeFirstSegments(mdSegmentCount).removeFileExtension(); + addDependentsOf(typePath, true); // add dependents of the source file since its now deleted + previousSourceFiles = null; // existing source files did not see it as deleted since they were compiled before it was char[][] definedTypeNames = newState.getDefinedTypeNamesFor(typeLocator); if (definedTypeNames == null) { // defined a single type matching typePath removeClassFile(typePath, sourceFile.sourceLocation.binaryFolder); } else { - addDependentsOf(typePath, true); // add dependents of the source file since it may be involved in a name collision if (definedTypeNames.length > 0) { // skip it if it failed to successfully define a type IPath packagePath = typePath.removeLastSegments(1); for (int d = 0, l = definedTypeNames.length; d < l; d++) @@ -692,7 +695,7 @@ IFile[] addedGeneratedFiles = result.addedFiles; if (addedGeneratedFiles != null) { for (int j = addedGeneratedFiles.length; --j >= 0;) { - SourceFile sourceFile = findSourceFile(addedGeneratedFiles[j]); + SourceFile sourceFile = findSourceFile(addedGeneratedFiles[j], true); if (sourceFile != null && !sourceFiles.contains(sourceFile)) this.sourceFiles.add(sourceFile); } Index: model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java,v retrieving revision 1.107 diff -u -r1.107 AbstractImageBuilder.java --- model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java 9 Feb 2007 01:41:15 -0000 1.107 +++ model/org/eclipse/jdt/internal/core/builder/AbstractImageBuilder.java 12 Mar 2007 19:20:40 -0000 @@ -385,8 +385,8 @@ // no op by default } -protected SourceFile findSourceFile(IFile file) { - if (!file.exists()) return null; +protected SourceFile findSourceFile(IFile file, boolean mustExist) { + if (mustExist && !file.exists()) return null; // assumes the file exists in at least one of the source folders & is not excluded ClasspathMultiDirectory md = sourceLocations[0]; @@ -443,7 +443,7 @@ * @see org.eclipse.jdt.internal.core.builder.ICompilationUnitLocator#fromIFile(org.eclipse.core.resources.IFile) */ public ICompilationUnit fromIFile(IFile file) { - return findSourceFile(file); + return findSourceFile(file, true); } protected void initializeAnnotationProcessorManager(Compiler newCompiler) { @@ -541,7 +541,7 @@ IFile[] addedGeneratedFiles = result.addedFiles; if (addedGeneratedFiles != null) { for (int j = addedGeneratedFiles.length; --j >= 0;) { - SourceFile sourceFile = findSourceFile(addedGeneratedFiles[j]); + SourceFile sourceFile = findSourceFile(addedGeneratedFiles[j], true); if (sourceFile == null) continue; if (uniqueFiles == null) { uniqueFiles = new SimpleSet(unitsAboutToCompile.length + 3);