From 2d5457e37c1bbae66faff05b842441ccaf9d423d Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 10 Sep 2012 17:31:10 +0200 Subject: [PATCH] use file hashing strategy for set of files --- .../jps/incremental/ModuleLevelBuilder.java | 18 +++++---- .../jps/incremental/ModuleRootsIndex.java | 5 ++- .../jps/incremental/java/JavaBuilder.java | 40 ++++++++++++++----- .../jps/incremental/java/OutputFilesSink.java | 6 ++- 4 files changed, 46 insertions(+), 23 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java index 818692023eac..c3a8d86884b4 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java @@ -3,10 +3,12 @@ package org.jetbrains.jps.incremental; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; -import org.jetbrains.jps.builders.java.dependencyView.Callbacks; -import org.jetbrains.jps.builders.java.dependencyView.Mappings; +import com.intellij.openapi.util.io.FileUtil; +import gnu.trove.THashSet; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ProjectPaths; +import org.jetbrains.jps.builders.java.dependencyView.Callbacks; +import org.jetbrains.jps.builders.java.dependencyView.Mappings; import org.jetbrains.jps.incremental.fs.RootDescriptor; import org.jetbrains.jps.incremental.messages.ProgressMessage; import org.jetbrains.jps.incremental.storage.SourceToOutputMapping; @@ -87,7 +89,8 @@ public abstract class ModuleLevelBuilder extends Builder { // unmark as affected all successfully compiled allAffectedFiles.removeAll(successfullyCompiled); - final HashSet affectedBeforeDif = new HashSet(allAffectedFiles); + final Set affectedBeforeDif = new THashSet(FileUtil.FILE_HASHING_STRATEGY); + affectedBeforeDif.addAll(allAffectedFiles); final ModulesBasedFileFilter moduleBasedFilter = new ModulesBasedFileFilter(context, chunk); final boolean incremental = globalMappings.differentiateOnIncrementalMake( @@ -110,8 +113,7 @@ public abstract class ModuleLevelBuilder extends Builder { if (incremental) { final Set newlyAffectedFiles = new HashSet(allAffectedFiles); newlyAffectedFiles.removeAll(affectedBeforeDif); - newlyAffectedFiles - .removeAll(allCompiledFiles); // the diff operation may have affected the class already compiled in thic compilation round + newlyAffectedFiles.removeAll(allCompiledFiles); // the diff operation may have affected the class already compiled in thic compilation round final String infoMessage = "Dependency analysis found " + newlyAffectedFiles.size() + " affected files"; LOG.info(infoMessage); @@ -211,7 +213,7 @@ public abstract class ModuleLevelBuilder extends Builder { private static Set getAllAffectedFilesContainer(CompileContext context) { Set allAffectedFiles = ALL_AFFECTED_FILES_KEY.get(context); if (allAffectedFiles == null) { - allAffectedFiles = new HashSet(); + allAffectedFiles = new THashSet(FileUtil.FILE_HASHING_STRATEGY); ALL_AFFECTED_FILES_KEY.set(context, allAffectedFiles); } return allAffectedFiles; @@ -220,7 +222,7 @@ public abstract class ModuleLevelBuilder extends Builder { private static Set getAllCompiledFilesContainer(CompileContext context) { Set allCompiledFiles = ALL_COMPILED_FILES_KEY.get(context); if (allCompiledFiles == null) { - allCompiledFiles = new HashSet(); + allCompiledFiles = new THashSet(FileUtil.FILE_HASHING_STRATEGY); ALL_COMPILED_FILES_KEY.set(context, allCompiledFiles); } return allCompiledFiles; @@ -231,7 +233,7 @@ public abstract class ModuleLevelBuilder extends Builder { if (map == null) { return Collections.emptySet(); } - final Set removed = new HashSet(); + final Set removed = new THashSet(FileUtil.PATH_HASHING_STRATEGY); for (ModuleBuildTarget target : chunk.getTargets()) { final Collection modulePaths = map.get(target); if (modulePaths != null) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleRootsIndex.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleRootsIndex.java index 22d43940e607..703b78befd91 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleRootsIndex.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleRootsIndex.java @@ -2,6 +2,7 @@ package org.jetbrains.jps.incremental; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; +import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.JpsPathUtil; @@ -23,7 +24,7 @@ import java.util.*; * Date: 1/11/12 */ public class ModuleRootsIndex { - private final Map myRootToDescriptorMap = new HashMap(); + private final THashMap myRootToDescriptorMap = new THashMap(FileUtil.FILE_HASHING_STRATEGY); private final Map> myModuleToRootsMap = new HashMap>(); private final Map myNameToModuleMap = new HashMap(); private final int myTotalModuleCount; @@ -167,7 +168,7 @@ public class ModuleRootsIndex { public RootDescriptor associateRoot(@NotNull CompileContext context, File root, JpsModule module, boolean isTestRoot) { Map rootToDescriptorMap = ROOT_DESCRIPTOR_MAP.get(context); if (rootToDescriptorMap == null) { - rootToDescriptorMap = new HashMap(); + rootToDescriptorMap = new THashMap(FileUtil.FILE_HASHING_STRATEGY); ROOT_DESCRIPTOR_MAP.set(context, rootToDescriptorMap); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index bac5d4762266..43acf52556d3 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -8,6 +8,7 @@ import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.uiDesigner.compiler.AlienFormFileException; @@ -19,6 +20,7 @@ import com.intellij.uiDesigner.lw.CompiledClassPropertiesProvider; import com.intellij.uiDesigner.lw.LwRootContainer; import com.intellij.util.SystemProperties; import com.intellij.util.concurrency.SequentialTaskExecutor; +import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.asm4.ClassReader; @@ -82,16 +84,32 @@ public class JavaBuilder extends ModuleLevelBuilder { "-g", "-deprecation", "-nowarn", "-verbose" )); - private static final FileFilter JAVA_SOURCES_FILTER = new FileFilter() { - public boolean accept(File file) { - return file.getPath().endsWith(JAVA_EXTENSION); + private static final FileFilter JAVA_SOURCES_FILTER = + SystemInfo.isFileSystemCaseSensitive? + new FileFilter() { + public boolean accept(File file) { + return file.getPath().endsWith(JAVA_EXTENSION); + } + } : + new FileFilter() { + public boolean accept(File file) { + return StringUtil.endsWithIgnoreCase(file.getPath(), JAVA_EXTENSION); + } + }; + + private static final FileFilter FORM_SOURCES_FILTER = + SystemInfo.isFileSystemCaseSensitive? + new FileFilter() { + public boolean accept(File file) { + return file.getPath().endsWith(FORM_EXTENSION); + } + } : + new FileFilter() { + public boolean accept(File file) { + return StringUtil.endsWithIgnoreCase(file.getPath(), FORM_EXTENSION); + } } - }; - private static final FileFilter FORM_SOURCES_FILTER = new FileFilter() { - public boolean accept(File file) { - return file.getPath().endsWith(FORM_EXTENSION); - } - }; + ; private static final Key DELTA_MAPPINGS_CALLBACK_KEY = Key.create("_dependency_data_"); private final Executor myTaskRunner; @@ -153,8 +171,8 @@ public class JavaBuilder extends ModuleLevelBuilder { public ExitCode build(final CompileContext context, final ModuleChunk chunk) throws ProjectBuildException { try { - final Set filesToCompile = new HashSet(); - final Set formsToCompile = new HashSet(); + final Set filesToCompile = new THashSet(FileUtil.FILE_HASHING_STRATEGY); + final Set formsToCompile = new THashSet(FileUtil.FILE_HASHING_STRATEGY); FSOperations.processFilesToRecompile(context, chunk, new FileProcessor() { public boolean apply(ModuleBuildTarget target, File file, String sourceRoot) throws IOException { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/OutputFilesSink.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/OutputFilesSink.java index b0b0eec07afb..d99454548c92 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/OutputFilesSink.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/OutputFilesSink.java @@ -1,5 +1,7 @@ package org.jetbrains.jps.incremental.java; +import com.intellij.openapi.util.io.FileUtil; +import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.incremental.CompileContext; @@ -19,8 +21,8 @@ import java.util.*; */ class OutputFilesSink implements OutputFileConsumer { private final CompileContext myContextI; - private final Set mySuccessfullyCompiled = new LinkedHashSet(); - private final Set myProblematic = new HashSet(); + private final Set mySuccessfullyCompiled = new THashSet(FileUtil.FILE_HASHING_STRATEGY); + private final Set myProblematic = new THashSet(FileUtil.FILE_HASHING_STRATEGY); private final List myFileObjects = new ArrayList(); private final Map myCompiledClasses = new HashMap();