Revision: 7260 Author: [email protected] Date: Fri Dec 4 14:42:26 2009 Log: Cherry picking trunk c7258, c7259 into 2009.11.20 snapshot.
- Fixes a bug in recursive unit invalidation. - Restores logging for recursive unit invalidation. http://code.google.com/p/google-web-toolkit/source/detail?r=7260 Modified: /branches/snapshot-2009.11.20-r7061/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java /branches/snapshot-2009.11.20-r7061/dev/core/src/com/google/gwt/dev/javac/CompilationUnitInvalidator.java ======================================= --- /branches/snapshot-2009.11.20-r7061/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java Thu Nov 12 06:32:35 2009 +++ /branches/snapshot-2009.11.20-r7061/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java Fri Dec 4 14:42:26 2009 @@ -185,11 +185,11 @@ return instance; } - private static void invalidateUnitsWithInvalidRefs( + private static void invalidateUnitsWithInvalidRefs(TreeLogger logger, Map<String, CompilationUnit> resultUnits, Set<ContentId> set) { Set<CompilationUnit> validResultUnits = new HashSet<CompilationUnit>( resultUnits.values()); - CompilationUnitInvalidator.retainValidUnits(validResultUnits, set); + CompilationUnitInvalidator.retainValidUnits(logger, validResultUnits, set); for (Entry<String, CompilationUnit> entry : resultUnits.entrySet()) { CompilationUnit unit = entry.getValue(); if (unit.isCompiled() && !validResultUnits.contains(unit)) { @@ -260,7 +260,8 @@ } // Winnow the reusable set of units down to those still valid. - CompilationUnitInvalidator.retainValidUnits(resultUnits.values()); + CompilationUnitInvalidator.retainValidUnits(TreeLogger.NULL, + resultUnits.values()); // Compile everything else. CompileMoreLater compileMoreLater = new CompileMoreLater(); @@ -279,7 +280,7 @@ compileMoreLater.compile(logger, builders, resultUnits); // Invalidate units with invalid refs. - invalidateUnitsWithInvalidRefs(resultUnits, + invalidateUnitsWithInvalidRefs(logger, resultUnits, Collections.<ContentId> emptySet()); return new CompilationState(logger, resultUnits.values(), compileMoreLater); } @@ -306,8 +307,8 @@ } // Winnow the reusable set of units down to those still valid. - CompilationUnitInvalidator.retainValidUnits(resultUnits.values(), - compileMoreLater.getValidDependencies()); + CompilationUnitInvalidator.retainValidUnits(TreeLogger.NULL, + resultUnits.values(), compileMoreLater.getValidDependencies()); for (CompilationUnit validUnit : resultUnits.values()) { compileMoreLater.addValidUnit(validUnit); // Report any existing errors as if the unit were recompiled. @@ -323,7 +324,7 @@ } compileMoreLater.compile(logger, builders, resultUnits); - invalidateUnitsWithInvalidRefs(resultUnits, + invalidateUnitsWithInvalidRefs(logger, resultUnits, compileMoreLater.getValidDependencies()); return resultUnits.values(); } ======================================= --- /branches/snapshot-2009.11.20-r7061/dev/core/src/com/google/gwt/dev/javac/CompilationUnitInvalidator.java Tue Nov 10 20:42:30 2009 +++ /branches/snapshot-2009.11.20-r7061/dev/core/src/com/google/gwt/dev/javac/CompilationUnitInvalidator.java Fri Dec 4 14:42:26 2009 @@ -55,12 +55,15 @@ } } - public static void retainValidUnits(Collection<CompilationUnit> units) { - retainValidUnits(units, Collections.<ContentId> emptySet()); + public static void retainValidUnits(TreeLogger logger, + Collection<CompilationUnit> units) { + retainValidUnits(logger, units, Collections.<ContentId> emptySet()); } - public static void retainValidUnits(Collection<CompilationUnit> units, - Set<ContentId> knownValidRefs) { + public static void retainValidUnits(TreeLogger logger, + Collection<CompilationUnit> units, Set<ContentId> knownValidRefs) { + logger = logger.branch(TreeLogger.TRACE, "Removing invalidated units"); + // Assume all units are valid at first. Set<CompilationUnit> currentlyValidUnits = new HashSet<CompilationUnit>(); Set<ContentId> currentlyValidRefs = new HashSet<ContentId>(knownValidRefs); @@ -74,14 +77,19 @@ boolean changed; do { changed = false; - iterating : for (Iterator<CompilationUnit> it = currentlyValidUnits.iterator(); it.hasNext();) { + for (Iterator<CompilationUnit> it = currentlyValidUnits.iterator(); it.hasNext();) { CompilationUnit unitToCheck = it.next(); + TreeLogger branch = null; for (ContentId ref : unitToCheck.getDependencies()) { if (!currentlyValidRefs.contains(ref)) { - it.remove(); - currentlyValidRefs.remove(unitToCheck.getDisplayLocation()); - changed = true; - continue iterating; + if (branch == null) { + branch = logger.branch(TreeLogger.DEBUG, "Compilation unit '" + + unitToCheck + "' is removed due to invalid reference(s):"); + it.remove(); + currentlyValidRefs.remove(unitToCheck.getContentId()); + changed = true; + } + branch.log(TreeLogger.DEBUG, ref.get()); } } } -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
