diff options
author | Tor Norbye <tnorbye@google.com> | 2013-04-03 16:27:26 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-04-03 16:27:26 -0700 |
commit | d1a59a0799588a226d255d9b45c4825b19651554 (patch) | |
tree | c9759b94ddad742db08b6662f52a62e0401491c1 /jps | |
parent | 2bd2b7c2623d4266384e890271869efc044aabff (diff) | |
download | idea-d1a59a0799588a226d255d9b45c4825b19651554.tar.gz |
Snapshot dc7fe9a777db5bc87a5b1ad4bfe40a547fc7d49a from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: Iae1c655b8958fc7603a78c675e4a4b942a1fccd4
Diffstat (limited to 'jps')
5 files changed, 57 insertions, 31 deletions
diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java b/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java index 63773402e79b..1229aa565b4b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/java/JavaBuilderUtil.java @@ -23,6 +23,7 @@ import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ProjectPaths; +import org.jetbrains.jps.builders.BuildRootIndex; import org.jetbrains.jps.builders.DirtyFilesHolder; import org.jetbrains.jps.builders.java.dependencyView.Callbacks; import org.jetbrains.jps.builders.java.dependencyView.Mappings; @@ -288,15 +289,17 @@ public class JavaBuilderUtil { private final CompileContext myContext; private final Set<JpsModule> myChunkModules; private final Map<JpsModule, Set<JpsModule>> myCache = new HashMap<JpsModule, Set<JpsModule>>(); + private final BuildRootIndex myBuildRootIndex; private ModulesBasedFileFilter(CompileContext context, ModuleChunk chunk) { myContext = context; myChunkModules = chunk.getModules(); + myBuildRootIndex = context.getProjectDescriptor().getBuildRootIndex(); } @Override public boolean accept(File file) { - final JavaSourceRootDescriptor rd = myContext.getProjectDescriptor().getBuildRootIndex().findJavaRootDescriptor(myContext, file); + final JavaSourceRootDescriptor rd = myBuildRootIndex.findJavaRootDescriptor(myContext, file); if (rd == null) { return true; } @@ -311,5 +314,11 @@ public class JavaBuilderUtil { } return Utils.intersects(moduleOfFileWithDependencies, myChunkModules); } + + @Override + public boolean belongsToCurrentChunk(File file) { + final JavaSourceRootDescriptor rd = myBuildRootIndex.findJavaRootDescriptor(myContext, file); + return rd != null && myChunkModules.contains(rd.target.getModule()); + } } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/ElemType.java b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/ElemType.java index 9d9b7c652770..3d311b18ee3a 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/ElemType.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/ElemType.java @@ -38,5 +38,19 @@ public enum ElemType { ANNOTATION_TYPE, /** Package declaration */ - PACKAGE + PACKAGE, + + /** + * Type parameter declaration + * + * @since 1.8 + */ + TYPE_PARAMETER, + + /** + * Use of a type + * + * @since 1.8 + */ + TYPE_USE } diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java index fe3f28831ea1..03014474592b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java @@ -785,9 +785,16 @@ public class Mappings { public boolean accept(File file) { return true; } + + @Override + public boolean belongsToCurrentChunk(File file) { + return true; + } }; boolean accept(File file); + + boolean belongsToCurrentChunk(File file); } private class Differential { @@ -955,7 +962,7 @@ public class Mappings { final Collection<File> filesToCompile, final Collection<File> compiledFiles, final Collection<File> affectedFiles, - final DependentFilesFilter filter, + @NotNull final DependentFilesFilter filter, @Nullable final Callbacks.ConstantAffectionResolver constantSearch) { delta.myRemovedFiles = removed; @@ -1757,21 +1764,19 @@ public class Mappings { debug("Processing added classes:"); - if (!myEasyMode) { + if (!myEasyMode && myFilter != null) { // checking if this newly added class duplicates already existing one for (ClassRepr c : addedClasses) { if (!c.isLocal() && !c.isAnonymous() && isEmpty(c.getOuterClassName())) { final File currentlyMappedTo = myClassToSourceFile.get(c.name); - if (currentlyMappedTo != null && !FileUtil.filesEqual(currentlyMappedTo, srcFile) && currentlyMappedTo.exists()) { - if (myFilter == null || myFilter.accept(currentlyMappedTo)) { - // Same classes from different source files. - // Schedule for recompilation both to make possible 'duplicate sources' error evident - debug("Scheduling for recompilation duplicated sources: ", currentlyMappedTo.getPath() + "; " + srcFile.getPath()); - myAffectedFiles.add(currentlyMappedTo); - myAffectedFiles.add(srcFile); - myCompiledFiles.remove(srcFile); // this will force sending the file to compilation again - return; // do not process this file because it should not be integrated - } + if (currentlyMappedTo != null && !FileUtil.filesEqual(currentlyMappedTo, srcFile) && currentlyMappedTo.exists() && myFilter.belongsToCurrentChunk(currentlyMappedTo)) { + // Same classes from different source files. + // Schedule for recompilation both to make possible 'duplicate sources' error evident + debug("Scheduling for recompilation duplicated sources: ", currentlyMappedTo.getPath() + "; " + srcFile.getPath()); + myAffectedFiles.add(currentlyMappedTo); + myAffectedFiles.add(srcFile); + myCompiledFiles.remove(srcFile); // this will force sending the file to compilation again + return; // do not process this file because it should not be integrated } break; } @@ -1948,7 +1953,7 @@ public class Mappings { final Collection<File> filesToCompile, final Collection<File> compiledFiles, final Collection<File> affectedFiles, - final DependentFilesFilter filter, + @NotNull final DependentFilesFilter filter, @Nullable final Callbacks.ConstantAffectionResolver constantSearch) { return new Differential(delta, removed, filesToCompile, compiledFiles, affectedFiles, filter, constantSearch).differentiate(); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java index 00dd3c747a25..fcfaca0b5729 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildMain.java @@ -277,28 +277,23 @@ public class BuildMain { }); } - private static void ensureLogConfigExists(final File logConfig) { + private static void ensureLogConfigExists(final File logConfig) throws IOException { if (!logConfig.exists()) { FileUtil.createIfDoesntExist(logConfig); - try { - final InputStream in = BuildMain.class.getResourceAsStream("/" + DEFAULT_LOGGER_CONFIG); - if (in != null) { + final InputStream in = BuildMain.class.getResourceAsStream("/" + DEFAULT_LOGGER_CONFIG); + if (in != null) { + try { + final FileOutputStream out = new FileOutputStream(logConfig); try { - final FileOutputStream out = new FileOutputStream(logConfig); - try { - FileUtil.copy(in, out); - } - finally { - out.close(); - } + FileUtil.copy(in, out); } finally { - in.close(); + out.close(); } } - } - catch (IOException e) { - LOG.error(e); + finally { + in.close(); + } } } } 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 90f0921e52c9..3595aa26927a 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 @@ -391,7 +391,7 @@ public class JavaBuilder extends ModuleLevelBuilder { return JavaCompilers.ECLIPSE_ID.equalsIgnoreCase(compilerId) || JavaCompilers.ECLIPSE_EMBEDDED_ID.equalsIgnoreCase(compilerId); } - private void submitAsyncTask(CompileContext context, final Runnable taskRunnable) { + private void submitAsyncTask(final CompileContext context, final Runnable taskRunnable) { final TasksCounter counter = COUNTER_KEY.get(context); assert counter != null; @@ -402,6 +402,9 @@ public class JavaBuilder extends ModuleLevelBuilder { try { taskRunnable.run(); } + catch (Throwable e) { + context.processMessage(new CompilerMessage(BUILDER_NAME, e)); + } finally { counter.decTaskCounter(); } |