Index: compiler/org/eclipse/jdt/internal/compiler/ast/IteratorForStatement.java =================================================================== retrieving revision 1.1 diff -u -r1.1 IteratorForStatement.java --- compiler/org/eclipse/jdt/internal/compiler/ast/IteratorForStatement.java 30 Oct 2003 19:34:58 -0000 1.1 +++ compiler/org/eclipse/jdt/internal/compiler/ast/IteratorForStatement.java 31 Oct 2003 12:38:51 -0000 @@ -79,7 +79,8 @@ public void resetStateForCodeGeneration() { // TODO to be completed } - +private void dummy() { +} public void resolve(BlockScope upperScope) { // TODO to be completed } Index: model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java =================================================================== retrieving revision 1.58 diff -u -r1.58 IncrementalImageBuilder.java --- model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java 22 Sep 2003 10:59:23 -0000 1.58 +++ model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java 31 Oct 2003 12:38:51 -0000 @@ -40,6 +40,12 @@ public static int MaxCompileLoop = 5; // perform a full build if it takes more than ? incremental compile loops +// Global table containing list of binary changes which are non structural. Used to optimize inter-project scenario (refine binary deltas) +// Flushed at the end of a build iteration, thus only optimizing the incremental workspace build. +public static HashMap BinaryChangeNatures = new HashMap(50); +public static String STRUCTURAL = "STRUCTURAL"; //$NON-NLS-1$ +public static String NON_STRUCTURAL = "NON STRUCTURAL"; //$NON-NLS-1 + protected IncrementalImageBuilder(JavaBuilder javaBuilder) { super(javaBuilder); this.nameEnvironment.isIncrementalBuild = true; @@ -291,6 +297,12 @@ case IResourceDelta.CHANGED : if ((binaryDelta.getFlags() & IResourceDelta.CONTENT) == 0) return; // skip it since it really isn't changed + // if listed amongst binary changes to ignore, then no need to react to this delta (14103) + if (BinaryChangeNatures.get(resource) == NON_STRUCTURAL) { + if (JavaBuilder.DEBUG) + System.out.println("Skipped over unchanged class file " + typePath); //$NON-NLS-1$ + return; // skip it since it really isn't changed + } if (JavaBuilder.DEBUG) System.out.println("Found changed class file " + typePath); //$NON-NLS-1$ addDependentsOf(typePath, false); @@ -602,7 +614,7 @@ protected boolean writeClassFileCheck(IFile file, String fileName, byte[] newBytes) throws CoreException { try { byte[] oldBytes = Util.getResourceContentsAsByteArray(file); - if (this.compileLoop > 1) { // only optimize files which were recompiled during the dependent pass, see 33990 + if (this.compileLoop > 1) { // only optimize files which were recompiled during the dependent pass, see 33990 (update timestamp) notEqual : if (newBytes.length == oldBytes.length) { for (int i = newBytes.length; --i >= 0;) if (newBytes[i] != oldBytes[i]) break notEqual; @@ -616,7 +628,13 @@ if (!(reader.isLocal() || reader.isAnonymous()) && reader.hasStructuralChanges(newBytes)) { if (JavaBuilder.DEBUG) System.out.println("Type has structural changes " + fileName); //$NON-NLS-1$ + BinaryChangeNatures.put(file, STRUCTURAL); addDependentsOf(new Path(fileName), true); + } else { + // dependent projects may ignore a change to this file since wasn't structural (14103) + if (BinaryChangeNatures.get(file) != STRUCTURAL) { + BinaryChangeNatures.put(file, NON_STRUCTURAL); + } } } catch (ClassFormatException e) { addDependentsOf(new Path(fileName), true); Index: model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java =================================================================== retrieving revision 1.87 diff -u -r1.87 JavaBuilder.java --- model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java 16 Oct 2003 11:15:24 -0000 1.87 +++ model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java 31 Oct 2003 12:38:51 -0000 @@ -68,7 +68,6 @@ */ public static void buildStarting() { // do nothing - // TODO (philippe) is it still needed? } /** @@ -77,6 +76,8 @@ */ public static void buildFinished() { BuildNotifier.resetProblemCounters(); + // discard information about binary changes at the end of a build iteration + IncrementalImageBuilder.BinaryChangeNatures.clear(); } public static void removeProblemsFor(IResource resource) {