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 4f15cf5b7152..d3b59be07ecb 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 @@ -38,8 +38,7 @@ import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.SourceToFormMapping; import org.jetbrains.jps.javac.*; -import javax.tools.Diagnostic; -import javax.tools.JavaFileObject; +import javax.tools.*; import java.io.*; import java.net.MalformedURLException; import java.net.ServerSocket; @@ -60,8 +59,14 @@ public class JavaBuilder extends ModuleLevelBuilder { private static final String FORM_EXTENSION = ".form"; public static final boolean USE_EMBEDDED_JAVAC = System.getProperty(GlobalOptions.USE_EXTERNAL_JAVAC_OPTION) == null; private static final Key JAVA_COMPILER_VERSION_KEY = Key.create("_java_compiler_version_"); + private static final Set FILTERED_OPTIONS = new HashSet(Arrays.asList( + "-target" + )); + private static final Set FILTERED_SINGLE_OPTIONS = new HashSet(Arrays.asList( + "-g", "-deprecation", "-nowarn", "-verbose" + )); - public static final FileFilter JAVA_SOURCES_FILTER = new FileFilter() { + private static final FileFilter JAVA_SOURCES_FILTER = new FileFilter() { public boolean accept(File file) { return file.getPath().endsWith(JAVA_EXTENSION); } @@ -282,8 +287,12 @@ public class JavaBuilder extends ModuleLevelBuilder { final String chunkName = getChunkPresentableName(chunk); context.processMessage(new ProgressMessage("Compiling java [" + chunkName + "]")); - final boolean compiledOk = - files.isEmpty() || compileJava(chunk, files, classpath, platformCp, sourcePath, outs, context, diagnosticSink, outputSink); + final int filesCount = files.size(); + boolean compiledOk = true; + if (filesCount > 0) { + LOG.info("Compiling " + filesCount + " java files; module: " + chunkName); + compiledOk = compileJava(chunk, files, classpath, platformCp, sourcePath, outs, context, diagnosticSink, outputSink); + } context.checkCanceled(); @@ -389,7 +398,6 @@ public class JavaBuilder extends ModuleLevelBuilder { CompileContext context, DiagnosticOutputConsumer diagnosticSink, final OutputFileConsumer outputSink) throws Exception { - LOG.info("Compiling " + files.size() + " java files"); final List options = getCompilationOptions(context, chunk); final ClassProcessingConsumer classesConsumer = new ClassProcessingConsumer(context, outputSink); try { @@ -726,17 +734,23 @@ public class JavaBuilder extends ModuleLevelBuilder { final String customArgs = javacOpts.get("ADDITIONAL_OPTIONS_STRING"); if (customArgs != null) { - final StringTokenizer tokenizer = new StringTokenizer(customArgs, " \t\r\n"); - while (tokenizer.hasMoreTokens()) { - final String token = tokenizer.nextToken(); - if ("-g".equals(token) || "-deprecation".equals(token) || "-nowarn".equals(token) || "-verbose".equals(token)) { + final StringTokenizer customOptsTokenizer = new StringTokenizer(customArgs, " \t\r\n"); + boolean skip = false; + while (customOptsTokenizer.hasMoreTokens()) { + final String userOption = customOptsTokenizer.nextToken(); + if (FILTERED_OPTIONS.contains(userOption)) { + skip = true; continue; } - if (token.startsWith("-J-")) { - vmOptions.add(token.substring("-J".length())); - } - else { - options.add(token); + if (!skip) { + if (!FILTERED_SINGLE_OPTIONS.contains(userOption)) { + if (userOption.startsWith("-J-")) { + vmOptions.add(userOption.substring("-J".length())); + } + else { + options.add(userOption); + } + } } } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java index f4dfb849943a..4cb83029243b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java @@ -12,13 +12,12 @@ import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.api.CanceledStatus; +import org.jetbrains.jps.api.SharedThreadPool; import javax.tools.*; import java.io.File; import java.net.InetSocketAddress; import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; /** * @author Eugene Zhuravlev @@ -32,11 +31,9 @@ public class JavacServer { private final ChannelGroup myAllOpenChannels = new DefaultChannelGroup("javac-server"); private final ChannelFactory myChannelFactory; private final ChannelPipelineFactory myPipelineFactory; - private ExecutorService myThreadPool; public JavacServer() { - myThreadPool = Executors.newCachedThreadPool(); - myChannelFactory = new NioServerSocketChannelFactory(myThreadPool, myThreadPool, 1); + myChannelFactory = new NioServerSocketChannelFactory(SharedThreadPool.INSTANCE, SharedThreadPool.INSTANCE, 1); final ChannelRegistrar channelRegistrar = new ChannelRegistrar(); final ChannelHandler compilationRequestsHandler = new CompilationRequestsHandler(); myPipelineFactory = new ChannelPipelineFactory() { @@ -198,10 +195,11 @@ public class JavacServer { final CancelHandler cancelHandler = new CancelHandler(); myCancelHandlers.add(cancelHandler); - myThreadPool.submit(new Runnable() { + SharedThreadPool.INSTANCE.submit(new Runnable() { public void run() { try { - final JavacRemoteProto.Message exitMsg = compile(ctx, sessionId, options, files, cp, platformCp, srcPath, outs, cancelHandler); + final JavacRemoteProto.Message exitMsg = + compile(ctx, sessionId, options, files, cp, platformCp, srcPath, outs, cancelHandler); Channels.write(ctx.getChannel(), exitMsg); } finally { @@ -218,10 +216,14 @@ public class JavacServer { cancelBuilds(); new Thread("StopThread") { public void run() { - JavacServer.this.stop(); + try { + JavacServer.this.stop(); + } + finally { + System.exit(0); + } } }.start(); - //System.exit(0); } else { reply = JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createFailure("Unsupported request type: " + requestType.name(), null)); diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java index f2dc1a82a7f0..a43338c9da3e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java @@ -93,7 +93,7 @@ public class JavacServerBootstrap { processHandler.addProcessListener(new ProcessAdapter() { public void onTextAvailable(ProcessEvent event, Key outputType) { final String text = event.getText(); - if (!StringUtil.isEmpty(text)) { + if (!StringUtil.isEmptyOrSpaces(text)) { if (outputType == ProcessOutputTypes.STDOUT) { System.out.print("JAVAC_SERVER: " + text); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager.java b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager.java index b2f68adccdee..b051dfa52948 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager.java @@ -110,7 +110,7 @@ class OptimizedFileManager extends DefaultFileManager { private boolean isFile(File root) { Boolean cachedIsFile = myIsFile.get(root); if (cachedIsFile == null) { - cachedIsFile = root.isFile(); + cachedIsFile = Boolean.valueOf(root.isFile()); myIsFile.put(root, cachedIsFile); } return cachedIsFile.booleanValue(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java index ec894f6ab35b..d0aad87b2381 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java @@ -164,7 +164,7 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager { private boolean isFile(File root) { Boolean cachedIsFile = myIsFile.get(root); if (cachedIsFile == null) { - cachedIsFile = root.isFile(); + cachedIsFile = Boolean.valueOf(root.isFile()); myIsFile.put(root, cachedIsFile); } return cachedIsFile.booleanValue(); diff --git a/jps/lib/optimizedFileManager.jar b/jps/lib/optimizedFileManager.jar index 9765565bf9b7..c3726243b6e6 100644 Binary files a/jps/lib/optimizedFileManager.jar and b/jps/lib/optimizedFileManager.jar differ diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index f90f00941c1f..0ff6160c71d4 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -846,7 +846,7 @@ public class Mappings { } private class Differential { - final int DESPERATE_MASK = Opcodes.ACC_STATIC | Opcodes.ACC_FINAL; + static final int DESPERATE_MASK = Opcodes.ACC_STATIC | Opcodes.ACC_FINAL; final Mappings myDelta; final Collection myRemoved; diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 4a852935c5fa..3b2ec5dbe19b 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -139,13 +139,13 @@ compiler.out-of-process.build.enabled.description=Enable out-of-process compilat compiler.out-of-process.as-server=false compiler.out-of-process.as-server.description=Use implementation of out-of-process build as server process -compiler.process.heap.size=600 +compiler.process.heap.size=700 compiler.process.heap.size.description=Heap size value in MB for the build process compiler.process.32bit.vm.on.mac=true compiler.process.32bit.vm.on.mac.description=Force -d32 VM option on Mac (recommended for faster startup and lower memory footprint) -compiler.process.vm.options=-ea +compiler.process.vm.options= compiler.process.vm.options.description=Additional options for compile server's VM compiler.process.use.memory.temp.cache=true