From de8c16963cc5b2b38db56fc0c9fa6c6c47fc58ee Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 20 Jan 2012 16:17:38 +0100 Subject: [PATCH] compile-server: javac to read all relevant settings from jps project; introduced "use.memory.temp.cache" and "server.heap.size" options for compile server server is now available in non-internal mode --- ...Manager.java => CompileServerManager.java} | 24 ++++----- .../intellij/compiler/impl/CompileDriver.java | 2 +- .../compiler/impl/CompilerErrorTreeView.java | 2 +- .../impl/TranslatingCompilerFilesMonitor.java | 8 +-- .../AnnotationProcessorsConfigurable.java | 6 +++ .../options/CompilerConfigurable.java | 4 +- .../options/CompilerUIConfigurable.java | 6 +-- .../compiler/options/JavaCompilersTab.java | 8 +++ .../CompilerWorkspaceConfiguration.java | 3 +- .../jps/incremental/CompileContext.java | 4 +- .../jps/incremental/IncProjectBuilder.java | 8 +-- .../jps/incremental/java/JavaBuilder.java | 49 ++++++++++++++++--- .../incremental/storage/BuildDataManager.java | 4 +- .../src/org/jetbrains/jps/server/Server.java | 4 ++ .../org/jetbrains/jps/server/ServerState.java | 11 ++++- .../src/misc/registry.properties | 8 +++ .../compiler/GroovyCompilerTestCase.java | 9 ++-- resources/src/componentSets/Compiler.xml | 2 +- 18 files changed, 116 insertions(+), 46 deletions(-) rename java/compiler/impl/src/com/intellij/compiler/{JpsServerManager.java => CompileServerManager.java} (96%) diff --git a/java/compiler/impl/src/com/intellij/compiler/JpsServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java similarity index 96% rename from java/compiler/impl/src/com/intellij/compiler/JpsServerManager.java rename to java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 90f39cb0cbf8..21b4e740432c 100644 --- a/java/compiler/impl/src/com/intellij/compiler/JpsServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -43,8 +43,8 @@ import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.ShutDownTracker; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -71,7 +71,7 @@ import java.util.concurrent.TimeUnit; * @author Eugene Zhuravlev * Date: 9/6/11 */ -public class JpsServerManager implements ApplicationComponent{ +public class CompileServerManager implements ApplicationComponent{ private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.JpsServerManager"); private static final String COMPILE_SERVER_SYSTEM_ROOT = "compile-server"; private volatile OSProcessHandler myProcessHandler; @@ -84,7 +84,7 @@ public class JpsServerManager implements ApplicationComponent{ }); private final ProjectManager myProjectManager; - public JpsServerManager(final ProjectManager projectManager) { + public CompileServerManager(final ProjectManager projectManager) { myProjectManager = projectManager; final String systemPath = PathManager.getSystemPath(); File system = new File(systemPath); @@ -106,8 +106,8 @@ public class JpsServerManager implements ApplicationComponent{ }); } - public static JpsServerManager getInstance() { - return ApplicationManager.getApplication().getComponent(JpsServerManager.class); + public static CompileServerManager getInstance() { + return ApplicationManager.getApplication().getComponent(CompileServerManager.class); } public void notifyFilesChanged(Collection paths) { @@ -404,18 +404,14 @@ public class JpsServerManager implements ApplicationComponent{ cmdLine.addParameter("-XX:ReservedCodeCacheSize=64m"); cmdLine.addParameter("-Djava.awt.headless=true"); //cmdLine.addParameter("-DuseJavaUtilZip"); - // todo: get xmx value from settings - if (SystemInfo.is64Bit) { - cmdLine.addParameter("-Xmx800m"); - } - else { - cmdLine.addParameter("-Xmx600m"); - } + cmdLine.addParameter("-Xmx" + Registry.intValue("compiler.server.heap.size") + "m"); // debugging cmdLine.addParameter("-XX:+HeapDumpOnOutOfMemoryError"); - //cmdLine.addParameter("-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5008"); - + //cmdLine.addParameter("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5008"); + if (Registry.is("compiler.server.use.memory.temp.cache")) { + cmdLine.addParameter("-D"+Server.USE_MEMORY_TEMP_CACHE_OPTION + "=true"); + } // javac's VM should use the same default locale that IDEA uses in order for javac to print messages in 'correct' language final String lang = System.getProperty("user.language"); if (lang != null) { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index 7f863e8d4070..fcbf0d529376 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -425,7 +425,7 @@ public class CompileDriver { moduleNames.add(module.getName()); } } - final JpsServerManager jpsServerManager = JpsServerManager.getInstance(); + final CompileServerManager jpsServerManager = CompileServerManager.getInstance(); final MessageBus messageBus = myProject.getMessageBus(); return jpsServerManager.submitCompilationTask(myProject.getLocation(), compileContext.isRebuild(), compileContext.isMake(), moduleNames, paths, new JpsServerResponseHandlerAdapter() { diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java index 97fd8a7f6857..3e2bc2b342de 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java @@ -109,7 +109,7 @@ public class CompilerErrorTreeView extends NewErrorTreeViewPanel { public void run() { if (!project.isDisposed()) { project.save(); - JpsServerManager.getInstance().sendReloadRequest(project); + CompileServerManager.getInstance().sendReloadRequest(project); } } }); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java index 18b26577017d..06ca4cc8f241 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java @@ -16,9 +16,9 @@ package com.intellij.compiler.impl; import com.intellij.ProjectTopics; +import com.intellij.compiler.CompileServerManager; import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerIOUtil; -import com.intellij.compiler.JpsServerManager; import com.intellij.compiler.make.MakeUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; @@ -1367,7 +1367,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { }); if (!pathsToMark.isEmpty()) { - JpsServerManager.getInstance().notifyFilesDeleted(pathsToMark); + CompileServerManager.getInstance().notifyFilesDeleted(pathsToMark); } } @@ -1394,7 +1394,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { } }); if (!pathsToMark.isEmpty()) { - JpsServerManager.getInstance().notifyFilesChanged(pathsToMark); + CompileServerManager.getInstance().notifyFilesChanged(pathsToMark); } } @@ -1442,7 +1442,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { } }); if (!pathsToMark.isEmpty()) { - JpsServerManager.getInstance().notifyFilesChanged(pathsToMark); + CompileServerManager.getInstance().notifyFilesChanged(pathsToMark); } } } diff --git a/java/compiler/impl/src/com/intellij/compiler/options/AnnotationProcessorsConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/AnnotationProcessorsConfigurable.java index 7407764a4595..e6c4f49b6748 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/AnnotationProcessorsConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/AnnotationProcessorsConfigurable.java @@ -15,6 +15,7 @@ */ package com.intellij.compiler.options; +import com.intellij.compiler.CompileServerManager; import com.intellij.compiler.CompilerConfiguration; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; @@ -248,6 +249,11 @@ public class AnnotationProcessorsConfigurable implements SearchableConfigurable, config.setAnnotationProcessorsMap(myProcessorsModel.exportToMap()); config.setAnotationProcessedModules(getMarkedModules()); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + CompileServerManager.getInstance().sendReloadRequest(myProject); + } + }); } private Map getMarkedModules() { diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/CompilerConfigurable.java index d114f3a3bc70..db6788553aa4 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerConfigurable.java @@ -15,10 +15,10 @@ */ package com.intellij.compiler.options; +import com.intellij.compiler.CompileServerManager; import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerConfigurationImpl; import com.intellij.compiler.CompilerSettingsFactory; -import com.intellij.compiler.JpsServerManager; import com.intellij.compiler.impl.rmiCompiler.RmicConfiguration; import com.intellij.openapi.compiler.CompilerBundle; import com.intellij.openapi.compiler.options.ExcludedEntriesConfigurable; @@ -180,7 +180,7 @@ public class CompilerConfigurable implements SearchableConfigurable.Parent, Conf excludes.apply(); SwingUtilities.invokeLater(new Runnable() { public void run() { - JpsServerManager.getInstance().sendReloadRequest(project); + CompileServerManager.getInstance().sendReloadRequest(project); } }); } diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java index 9f6584474a74..272086fd3903 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -17,7 +17,6 @@ package com.intellij.compiler.options; import com.intellij.compiler.*; import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.compiler.CompilerBundle; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; @@ -44,7 +43,6 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura public CompilerUIConfigurable(final Project project) { myProject = project; - myCbUseCompileServer.setVisible(ApplicationManager.getApplication().isInternal()); myPatternLegendLabel.setText("" + "Use ; to separate patterns and ! to negate a pattern. " + "Accepted wildcards: ? — exactly one symbol; * — zero or more symbols; " + @@ -96,12 +94,12 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura // this will schedule for compilation all files that might become compilable after resource patterns' changing TranslatingCompilerFilesMonitor.getInstance().scanSourcesForCompilableFiles(myProject); if (!workspaceConfiguration.USE_COMPILE_SERVER) { - JpsServerManager.getInstance().shutdownServer(); + CompileServerManager.getInstance().shutdownServer(); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { - JpsServerManager.getInstance().sendReloadRequest(myProject); + CompileServerManager.getInstance().sendReloadRequest(myProject); } }); } diff --git a/java/compiler/impl/src/com/intellij/compiler/options/JavaCompilersTab.java b/java/compiler/impl/src/com/intellij/compiler/options/JavaCompilersTab.java index c9ddd77afbd3..43dbc95882f6 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/JavaCompilersTab.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/JavaCompilersTab.java @@ -15,6 +15,7 @@ */ package com.intellij.compiler.options; +import com.intellij.compiler.CompileServerManager; import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerConfigurationImpl; import com.intellij.compiler.impl.javaCompiler.BackendCompiler; @@ -45,12 +46,14 @@ public class JavaCompilersTab implements SearchableConfigurable, Configurable.No private JComboBox myCompiler; private final CardLayout myCardLayout; + private final Project myProject; private final BackendCompiler myDefaultCompiler; private BackendCompiler mySelectedCompiler; private final CompilerConfigurationImpl myCompilerConfiguration; private final Collection myConfigurables; public JavaCompilersTab(final Project project, Collection compilers, BackendCompiler defaultCompiler) { + myProject = project; myDefaultCompiler = defaultCompiler; myCompilerConfiguration = (CompilerConfigurationImpl)CompilerConfiguration.getInstance(project); myConfigurables = new ArrayList(compilers.size()); @@ -122,6 +125,11 @@ public class JavaCompilersTab implements SearchableConfigurable, Configurable.No configurable.apply(); } myCompilerConfiguration.setDefaultCompiler(mySelectedCompiler); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + CompileServerManager.getInstance().sendReloadRequest(myProject); + } + }); } public void reset() { diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index d829bfebf356..873229311115 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -19,7 +19,6 @@ */ package com.intellij.compiler; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.State; @@ -56,6 +55,6 @@ public class CompilerWorkspaceConfiguration implements PersistentStateComponent< } public boolean useCompileServer() { - return USE_COMPILE_SERVER && (ApplicationManager.getApplication().isInternal() || ApplicationManager.getApplication().isUnitTestMode()); + return USE_COMPILE_SERVER; } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java index 21a777295dc1..47e23525ebcf 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java @@ -47,7 +47,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler boolean isProjectRebuild, ProjectChunks productionChunks, ProjectChunks testChunks, - FSState fsState, TimestampStorage tsStorage, MessageHandler delegateMessageHandler, final ModuleRootsIndex rootsIndex, BuildCanceledStatus cancelStatus) throws ProjectBuildException { + FSState fsState, TimestampStorage tsStorage, MessageHandler delegateMessageHandler, final ModuleRootsIndex rootsIndex, BuildCanceledStatus cancelStatus, boolean useMemoryTempCaches) throws ProjectBuildException { myTsStorage = tsStorage; myCancelStatus = cancelStatus; myCompilationStartStamp = System.currentTimeMillis(); @@ -58,7 +58,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler myTestChunks = testChunks; myFsState = fsState; myDelegateMessageHandler = delegateMessageHandler; - myDataManager = new BuildDataManager(projectName); + myDataManager = new BuildDataManager(projectName, useMemoryTempCaches); final Project project = scope.getProject(); myProjectPaths = new ProjectPaths(project); myRootsIndex = rootsIndex; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 2d40de8b5863..6e8ad0a97681 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -28,6 +28,7 @@ public class IncProjectBuilder { private final ProjectDescriptor myProjectDescriptor; private final BuilderRegistry myBuilderRegistry; private final BuildCanceledStatus myCancelStatus; + private final boolean myUseMemoryTempCaches; private ProjectChunks myProductionChunks; private ProjectChunks myTestChunks; private final List myMessageHandlers = new ArrayList(); @@ -43,10 +44,11 @@ public class IncProjectBuilder { private final float myTotalModulesWork; private final int myTotalBuilderCount; - public IncProjectBuilder(ProjectDescriptor pd, BuilderRegistry builderRegistry, BuildCanceledStatus cs) { + public IncProjectBuilder(ProjectDescriptor pd, BuilderRegistry builderRegistry, BuildCanceledStatus cs, boolean useMemoryTempCaches) { myProjectDescriptor = pd; myBuilderRegistry = builderRegistry; myCancelStatus = cs; + myUseMemoryTempCaches = useMemoryTempCaches; myProductionChunks = new ProjectChunks(pd.project, ClasspathKind.PRODUCTION_COMPILE); myTestChunks = new ProjectChunks(pd.project, ClasspathKind.TEST_COMPILE); myTotalModulesWork = (float) pd.rootsIndex.getTotalModuleCount() * 2; /* multiply by 2 to reflect production and test sources */ @@ -145,8 +147,8 @@ public class IncProjectBuilder { final FSState fsState = myProjectDescriptor.fsState; final ModuleRootsIndex rootsIndex = myProjectDescriptor.rootsIndex; return new CompileContext( - projectName, scope, isMake, isProjectRebuild, myProductionChunks, myTestChunks, fsState, tsStorage, myMessageDispatcher, rootsIndex, myCancelStatus - ); + projectName, scope, isMake, isProjectRebuild, myProductionChunks, myTestChunks, fsState, tsStorage, myMessageDispatcher, rootsIndex, myCancelStatus, + myUseMemoryTempCaches); } private void cleanOutputRoots(CompileContext context) throws ProjectBuildException { 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 4476700c8385..f53b11edec44 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 @@ -15,6 +15,7 @@ import org.jetbrains.ether.dependencyView.Callbacks; import org.jetbrains.ether.dependencyView.Mappings; import org.jetbrains.jps.Module; import org.jetbrains.jps.ModuleChunk; +import org.jetbrains.jps.Project; import org.jetbrains.jps.ProjectPaths; import org.jetbrains.jps.incremental.*; import org.jetbrains.jps.incremental.messages.BuildMessage; @@ -211,11 +212,10 @@ public class JavaBuilder extends Builder{ final ProjectPaths paths = context.getProjectPaths(); - // todo: consider corresponding setting in CompilerWorkspaceConfiguration - final boolean addNotNullAssertions = true; + final boolean addNotNullAssertions = context.getProject().getCompilerConfiguration().isAddNotNullAssertions(); - final Collection classpath = paths.getCompilationClasspath(chunk, context.isCompilingTests(), context.isProjectRebuild()); - final Collection platformCp = paths.getPlatformCompilationClasspath(chunk, context.isCompilingTests(), context.isProjectRebuild()); + final Collection classpath = paths.getCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/); + final Collection platformCp = paths.getPlatformCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/); final Map> outs = buildOutputDirectoriesMap(context, chunk); final List options = getCompilationOptions(context, chunk); @@ -303,8 +303,45 @@ public class JavaBuilder extends Builder{ } private static List getCompilationOptions(CompileContext context, ModuleChunk chunk) { - // todo: read full set of options from settings - return Arrays.asList("-g", "-verbose")/*Collections.emptyList()*/; + final List options = new ArrayList(); + options.add("-verbose"); + + final Project project = context.getProject(); + final Map javacOpts = project.getCompilerConfiguration().getJavacOptions(); + final boolean debugInfo = !"false".equals(javacOpts.get("DEBUGGING_INFO")); + final boolean nowarn = "true".equals(javacOpts.get("GENERATE_NO_WARNINGS")); + final boolean deprecation = !"false".equals(javacOpts.get("DEPRECATION")); + if (debugInfo) { + options.add("-g"); + } + if (deprecation) { + options.add("-deprecation"); + } + if (nowarn) { + options.add("-nowarn"); + } + + final String customArgs = javacOpts.get("ADDITIONAL_OPTIONS_STRING"); + boolean isEncodingSet = false; + 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)){ + continue; + } + options.add(token); + if ("-encoding".equals(token)) { + isEncodingSet = true; + } + } + } + + if (!isEncodingSet && project.getProjectCharset() != null) { + options.add("-encoding"); + options.add(project.getProjectCharset()); + } + return options; } private static Map> buildOutputDirectoriesMap(CompileContext context, ModuleChunk chunk) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java index 25e65c0d24f6..94adb1d34303 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java @@ -30,7 +30,7 @@ public class BuildDataManager { private final SourceToFormMapping mySrcToFormMap; private final Mappings myMappings; - public BuildDataManager(String projectName) throws ProjectBuildException { + public BuildDataManager(String projectName, final boolean useMemoryTempCaches) throws ProjectBuildException { myProjectName = projectName; try { mySrcToFormMap = createStorage(getSourceToFormsRoot(), new StorageFactory() { @@ -42,7 +42,7 @@ public class BuildDataManager { final File mappingsRoot = getMappingsRoot(); myMappings = createStorage(mappingsRoot, new StorageFactory() { public Mappings create(File dataFile) throws Exception { - return new Mappings(mappingsRoot, false); + return new Mappings(mappingsRoot, useMemoryTempCaches); } }); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/Server.java b/jps/jps-builders/src/org/jetbrains/jps/server/Server.java index 62f45a0d6c8a..cf48be4af29b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/Server.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/Server.java @@ -27,6 +27,7 @@ public class Server { private static final int MAX_SIMULTANEOUS_BUILD_SESSIONS = Math.max(2, Runtime.getRuntime().availableProcessors()); public static final String SERVER_SUCCESS_START_MESSAGE = "JPS Server started successfully. Listening on port: "; public static final String SERVER_ERROR_START_MESSAGE = "Error starting JPS Server: "; + public static final String USE_MEMORY_TEMP_CACHE_OPTION = "use.memory.temp.cache"; private final ChannelGroup myAllOpenChannels = new DefaultChannelGroup("jps-server"); private final ChannelFactory myChannelFactory; @@ -97,6 +98,9 @@ public class Server { server.stop(); } }); + + ServerState.getInstance().setKeepTempCachesInMemory(System.getProperty(USE_MEMORY_TEMP_CACHE_OPTION) != null); + System.out.println("Server classpath: " + System.getProperty("java.class.path")); System.err.println(SERVER_SUCCESS_START_MESSAGE + port); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java b/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java index 50f84671c882..8f9e89e87900 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java @@ -34,6 +34,7 @@ class ServerState { private final Object myConfigurationLock = new Object(); private final Map myPathVariables = new HashMap(); private final List myGlobalLibraries = new ArrayList(); + private volatile boolean myKeepTempCachesInMemory = false; public void setGlobals(List libs, Map pathVars) { synchronized (myConfigurationLock) { @@ -50,6 +51,14 @@ class ServerState { } } + public boolean isKeepTempCachesInMemory() { + return myKeepTempCachesInMemory; + } + + public void setKeepTempCachesInMemory(boolean keepTempCachesInMemory) { + myKeepTempCachesInMemory = keepTempCachesInMemory; + } + public void notifyFileChanged(ProjectDescriptor pd, File file) { try { final RootDescriptor rd = pd.rootsIndex.getModuleAndRoot(file); @@ -117,7 +126,7 @@ class ServerState { try { final CompileScope compileScope = createCompilationScope(buildType, pd, modules, paths); - final IncProjectBuilder builder = new IncProjectBuilder(pd, BuilderRegistry.getInstance(), cs); + final IncProjectBuilder builder = new IncProjectBuilder(pd, BuilderRegistry.getInstance(), cs, myKeepTempCachesInMemory); if (msgHandler != null) { builder.addMessageHandler(msgHandler); } diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 2139f55560d5..998e01a5aa92 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -121,8 +121,16 @@ analyze.exceptions.on.the.fly.description=Automatically analyze clipboard on fra compiler.perform.outputs.refresh.on.start=false compiler.perform.outputs.refresh.on.start.description=Whether to perform initial FS refresh before compilation starts. Need this to detect external changes to output dirs + compiler.max.static.constants.searches=10000 compiler.max.static.constants.searches.description=If the number of changed compile time constants exceeds this value, make will start full-project rebuild + +compiler.server.heap.size=600 +compiler.server.heap.size.description=Heap size value in MB for the compile server process + +compiler.server.use.memory.temp.cache=false +compiler.server.use.memory.temp.cache.description=Store temporary data in memory for faster compilation; requires larger server heap size + vcs.show.colored.annotations=true vcs.showConsole=true diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java index 38565241cb4e..6f910e67db60 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java @@ -1,8 +1,8 @@ package org.jetbrains.plugins.groovy.compiler; +import com.intellij.compiler.CompileServerManager; import com.intellij.compiler.CompilerManagerImpl; import com.intellij.compiler.CompilerWorkspaceConfiguration; -import com.intellij.compiler.JpsServerManager; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.application.ApplicationConfiguration; @@ -15,7 +15,10 @@ import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.*; +import com.intellij.openapi.application.AccessToken; +import com.intellij.openapi.application.PluginPathManager; +import com.intellij.openapi.application.Result; +import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.compiler.*; @@ -119,7 +122,7 @@ public abstract class GroovyCompilerTestCase extends JavaCodeInsightFixtureTestC jdkTable.removeJdk(jdkTable.getInternalJdk()); } }.execute(); - JpsServerManager.getInstance().shutdownServer(); + CompileServerManager.getInstance().shutdownServer(); } myMainOutput.tearDown(); diff --git a/resources/src/componentSets/Compiler.xml b/resources/src/componentSets/Compiler.xml index 52b747e3d04a..373ac0e0362d 100644 --- a/resources/src/componentSets/Compiler.xml +++ b/resources/src/componentSets/Compiler.xml @@ -4,7 +4,7 @@ com.intellij.compiler.impl.TranslatingCompilerFilesMonitor - com.intellij.compiler.JpsServerManager + com.intellij.compiler.CompileServerManager