This commit is contained in:
Alexey Kudravtsev
2015-11-16 13:15:10 +03:00
parent a83d8a2496
commit 252efb5f5c
3 changed files with 38 additions and 20 deletions
@@ -82,7 +82,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
private static final Key<JavaCompilingTool> COMPILING_TOOL = Key.create("_java_compiling_tool_");
private static final Key<AtomicReference<String>> COMPILER_VERSION_INFO = Key.create("_java_compiler_version_info_");
private static final Set<String> FILTERED_OPTIONS = new HashSet<String>(Arrays.<String>asList(
private static final Set<String> FILTERED_OPTIONS = new HashSet<String>(Collections.<String>singletonList(
"-target"
));
private static final Set<String> FILTERED_SINGLE_OPTIONS = new HashSet<String>(Arrays.<String>asList(
@@ -131,6 +131,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
//add here class processors in the sequence they should be executed
}
@Override
@NotNull
public String getPresentableName() {
return BUILDER_NAME;
@@ -155,6 +156,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
return Collections.singletonList(JAVA_EXTENSION);
}
@Override
public ExitCode build(@NotNull CompileContext context,
@NotNull ModuleChunk chunk,
@NotNull DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
@@ -174,6 +176,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
final Set<File> filesToCompile = new THashSet<File>(FileUtil.FILE_HASHING_STRATEGY);
dirtyFilesHolder.processDirtyFiles(new FileProcessor<JavaSourceRootDescriptor, ModuleBuildTarget>() {
@Override
public boolean apply(ModuleBuildTarget target, File file, JavaSourceRootDescriptor descriptor) throws IOException {
if (JAVA_SOURCES_FILTER.accept(file) && ourCompilableModuleTypes.contains(target.getModule().getModuleType())) {
filesToCompile.add(file);
@@ -185,7 +188,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
if (JavaBuilderUtil.isCompileJavaIncrementally(context)) {
final ProjectBuilderLogger logger = context.getLoggingManager().getProjectBuilderLogger();
if (logger.isEnabled()) {
if (filesToCompile.size() > 0) {
if (!filesToCompile.isEmpty()) {
logger.logCompiledFiles(filesToCompile, BUILDER_NAME, "Compiling files:");
}
}
@@ -214,7 +217,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
finally {
stream.close();
}
message = "Internal error: \n" + out.toString();
message = "Internal error: \n" + out;
}
context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, message));
throw new StopBuildException();
@@ -505,6 +508,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
counter.incTaskCount();
myTaskRunner.execute(new Runnable() {
@Override
public void run() {
try {
taskRunnable.run();
@@ -526,9 +530,12 @@ public class JavaBuilder extends ModuleLevelBuilder {
}
final int listenPort = findFreePort();
server = new ExternalJavacManager(Utils.getSystemRoot()) {
@Override
protected ExternalJavacProcessHandler createProcessHandler(Process process) {
return new ExternalJavacProcessHandler(process) {
protected Future<?> executeOnPooledThread(Runnable task) {
@Override
@NotNull
protected Future<?> executeOnPooledThread(@NotNull Runnable task) {
return SharedThreadPool.getInstance().executeOnPooledThread(task);
}
};
@@ -543,9 +550,9 @@ public class JavaBuilder extends ModuleLevelBuilder {
if (ver == null) {
return 0;
}
final int quoteBegin = ver.indexOf("\"");
final int quoteBegin = ver.indexOf('\"');
if (quoteBegin >= 0) {
final int quoteEnd = ver.indexOf("\"", quoteBegin + 1);
final int quoteEnd = ver.indexOf('\"', quoteBegin + 1);
if (quoteEnd > quoteBegin) {
ver = ver.substring(quoteBegin + 1, quoteEnd);
}
@@ -557,7 +564,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
final String prefix = "1.";
final int parseBegin = ver.startsWith(prefix)? prefix.length() : 0;
final int parseEnd = ver.indexOf(".", parseBegin);
final int parseEnd = ver.indexOf('.', parseBegin);
if (parseEnd > 0) {
ver = ver.substring(parseBegin, parseEnd);
}
@@ -730,7 +737,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
if (!profile.isObtainProcessorsFromClasspath()) {
final String processorsPath = profile.getProcessorPath();
options.add("-processorpath");
options.add(processorsPath == null? "" : FileUtil.toSystemDependentName(processorsPath.trim()));
options.add(FileUtil.toSystemDependentName(processorsPath.trim()));
}
final Set<String> processors = profile.getProcessors();
@@ -888,11 +895,11 @@ public class JavaBuilder extends ModuleLevelBuilder {
private static class DiagnosticSink implements DiagnosticOutputConsumer {
private final CompileContext myContext;
private volatile int myErrorCount = 0;
private volatile int myWarningCount = 0;
private volatile int myErrorCount;
private volatile int myWarningCount;
private final Set<File> myFilesWithErrors = new HashSet<File>();
public DiagnosticSink(CompileContext context) {
private DiagnosticSink(CompileContext context) {
myContext = context;
}
@@ -900,6 +907,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
public void javaFileLoaded(File file) {
}
@Override
public void registerImports(final String className, final Collection<String> imports, final Collection<String> staticImports) {
//submitAsyncTask(myContext, new Runnable() {
// public void run() {
@@ -911,6 +919,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
//});
}
@Override
public void outputLineAvailable(String line) {
if (!StringUtil.isEmpty(line)) {
if (line.startsWith(ExternalJavacManager.STDOUT_LINE_PREFIX)) {
@@ -946,6 +955,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
return BuildMessage.Kind.INFO;
}
@Override
public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
final CompilerMessage.Kind kind;
switch (diagnostic.getKind()) {
@@ -1008,15 +1018,17 @@ public class JavaBuilder extends ModuleLevelBuilder {
private final CompileContext myContext;
private final OutputFileConsumer myDelegateOutputFileSink;
public ClassProcessingConsumer(CompileContext context, OutputFileConsumer sink) {
private ClassProcessingConsumer(CompileContext context, OutputFileConsumer sink) {
myContext = context;
myDelegateOutputFileSink = sink != null ? sink : new OutputFileConsumer() {
@Override
public void save(@NotNull OutputFileObject fileObject) {
throw new RuntimeException("Output sink for compiler was not specified");
}
};
}
@Override
public void save(@NotNull final OutputFileObject fileObject) {
// generated files must be saved synchronously, because some compilers (e.g. eclipse)
// may want to read them for further compilation
@@ -1035,6 +1047,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
}
submitAsyncTask(myContext, new Runnable() {
@Override
public void run() {
try {
for (ClassPostProcessor processor : ourClassProcessors) {
@@ -1053,13 +1066,13 @@ public class JavaBuilder extends ModuleLevelBuilder {
private static final Key<TasksCounter> COUNTER_KEY = Key.create("_async_task_counter_");
private static final class TasksCounter {
private int myCounter = 0;
private int myCounter;
public synchronized void incTaskCount() {
private synchronized void incTaskCount() {
myCounter++;
}
public synchronized void decTaskCounter() {
private synchronized void decTaskCounter() {
myCounter = Math.max(0, myCounter - 1);
if (myCounter == 0) {
notifyAll();
@@ -1071,7 +1084,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
try {
wait();
}
catch (InterruptedException e) {
catch (InterruptedException ignored) {
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2012 JetBrains s.r.o.
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
*/
package org.jetbrains.jps.service;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.Executor;
import java.util.concurrent.Future;
@@ -26,5 +28,6 @@ public abstract class SharedThreadPool implements Executor {
return JpsServiceManager.getInstance().getService(SharedThreadPool.class);
}
public abstract Future<?> executeOnPooledThread(Runnable action);
@NotNull
public abstract Future<?> executeOnPooledThread(@NotNull Runnable action);
}
@@ -16,6 +16,7 @@
package org.jetbrains.jps.service.impl;
import com.intellij.util.ConcurrencyUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.service.SharedThreadPool;
import java.util.concurrent.ExecutorService;
@@ -29,12 +30,13 @@ public class SharedThreadPoolImpl extends SharedThreadPool {
private final ExecutorService myService = Executors.newCachedThreadPool(ConcurrencyUtil.newNamedThreadFactory("JPS thread pool"));
@Override
public void execute(Runnable command) {
public void execute(@NotNull Runnable command) {
executeOnPooledThread(command);
}
@NotNull
@Override
public Future<?> executeOnPooledThread(final Runnable action) {
public Future<?> executeOnPooledThread(@NotNull final Runnable action) {
return myService.submit(new Runnable() {
@Override
public void run() {