diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsJavaCompilerConfigurationSerializer.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsJavaCompilerConfigurationSerializer.java
index b5cefb3b8b06..d1f6d058ad2d 100644
--- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsJavaCompilerConfigurationSerializer.java
+++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/compiler/JpsJavaCompilerConfigurationSerializer.java
@@ -22,6 +22,7 @@ import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.JpsProject;
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
+import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes;
import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration;
import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer;
@@ -55,16 +56,7 @@ public class JpsJavaCompilerConfigurationSerializer extends JpsProjectExtensionS
configuration.setAddNotNullAssertions(Boolean.parseBoolean(addNotNullTag.getAttributeValue(ENABLED, "true")));
}
- Element excludeFromCompileTag = componentTag.getChild(EXCLUDE_FROM_COMPILE);
- if (excludeFromCompileTag != null) {
- for (Element fileTag : JDOMUtil.getChildren(excludeFromCompileTag, "file")) {
- configuration.getCompilerExcludes().addExcludedFile(fileTag.getAttributeValue("url"));
- }
- for (Element directoryTag : JDOMUtil.getChildren(excludeFromCompileTag, "directory")) {
- boolean recursively = Boolean.parseBoolean(directoryTag.getAttributeValue("includeSubdirectories"));
- configuration.getCompilerExcludes().addExcludedDirectory(directoryTag.getAttributeValue("url"), recursively);
- }
- }
+ readExcludes(componentTag.getChild(EXCLUDE_FROM_COMPILE), configuration.getCompilerExcludes());
Element resourcePatternsTag = componentTag.getChild(WILDCARD_RESOURCE_PATTERNS);
for (Element entry : JDOMUtil.getChildren(resourcePatternsTag, ENTRY)) {
@@ -105,6 +97,18 @@ public class JpsJavaCompilerConfigurationSerializer extends JpsProjectExtensionS
}
}
+ public static void readExcludes(Element excludeFromCompileTag, JpsCompilerExcludes excludes) {
+ if (excludeFromCompileTag != null) {
+ for (Element fileTag : JDOMUtil.getChildren(excludeFromCompileTag, "file")) {
+ excludes.addExcludedFile(fileTag.getAttributeValue("url"));
+ }
+ for (Element directoryTag : JDOMUtil.getChildren(excludeFromCompileTag, "directory")) {
+ boolean recursively = Boolean.parseBoolean(directoryTag.getAttributeValue("includeSubdirectories"));
+ excludes.addExcludedDirectory(directoryTag.getAttributeValue("url"), recursively);
+ }
+ }
+ }
+
@Override
public void saveExtension(@NotNull JpsProject project, @NotNull Element componentTag) {
}
diff --git a/plugins/groovy/jps-plugin/groovy-jps-plugin.iml b/plugins/groovy/jps-plugin/groovy-jps-plugin.iml
index c55d620328f1..9f6a87dfede5 100644
--- a/plugins/groovy/jps-plugin/groovy-jps-plugin.iml
+++ b/plugins/groovy/jps-plugin/groovy-jps-plugin.iml
@@ -10,6 +10,8 @@
+
+
diff --git a/plugins/groovy/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension b/plugins/groovy/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension
new file mode 100644
index 000000000000..9ab572fa24cf
--- /dev/null
+++ b/plugins/groovy/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension
@@ -0,0 +1 @@
+org.jetbrains.jps.incremental.groovy.GroovyModelSerializerExtension
\ No newline at end of file
diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java
index 13402d48eeba..09ff15d306b4 100644
--- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java
+++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Consumer;
import com.intellij.util.SystemProperties;
+import com.intellij.util.containers.ContainerUtilRt;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -84,7 +85,9 @@ public class GroovyBuilder extends ModuleLevelBuilder {
DirtyFilesHolder dirtyFilesHolder,
OutputConsumer outputConsumer) throws ProjectBuildException {
try {
- final List toCompile = collectChangedFiles(context, dirtyFilesHolder);
+ JpsGroovySettings settings = JpsGroovySettings.getSettings(context.getProjectDescriptor().getProject());
+
+ final List toCompile = collectChangedFiles(context, dirtyFilesHolder, settings);
if (toCompile.isEmpty()) {
return ExitCode.NOTHING_DONE;
}
@@ -115,7 +118,7 @@ public class GroovyBuilder extends ModuleLevelBuilder {
final File tempFile = GroovycOSProcessHandler.fillFileWithGroovycParameters(
compilerOutput, toCompilePaths, finalOutput, class2Src, encoding, patchers
);
- final GroovycOSProcessHandler handler = runGroovyc(context, chunk, tempFile);
+ final GroovycOSProcessHandler handler = runGroovyc(context, chunk, tempFile, settings);
Map>
compiled = processCompiledFiles(context, chunk, generationOutputs, compilerOutput, handler);
@@ -154,20 +157,28 @@ public class GroovyBuilder extends ModuleLevelBuilder {
return toCompilePaths;
}
- private GroovycOSProcessHandler runGroovyc(final CompileContext context, ModuleChunk chunk, File tempFile) throws IOException {
- //todo xmx
+ private GroovycOSProcessHandler runGroovyc(final CompileContext context,
+ ModuleChunk chunk,
+ File tempFile,
+ final JpsGroovySettings settings) throws IOException {
ArrayList classpath = new ArrayList(generateClasspath(context, chunk));
if (LOG.isDebugEnabled()) {
LOG.debug("Groovyc classpath: " + classpath);
}
+
+ List programParams = ContainerUtilRt.newArrayList(myForStubs ? "stubs" : "groovyc", tempFile.getPath());
+ if (settings.invokeDynamic) {
+ programParams.add("--indy");
+ }
+
final List cmd = ExternalProcessUtil.buildJavaCommandLine(
getJavaExecutable(chunk),
"org.jetbrains.groovy.compiler.rt.GroovycRunner",
Collections.emptyList(), classpath,
- Arrays.asList("-Xmx384m",
+ Arrays.asList("-Xmx" + settings.heapSize + "m",
"-Dfile.encoding=" + System.getProperty("file.encoding")/*,
"-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5239"*/),
- Arrays.asList(myForStubs ? "stubs" : "groovyc", tempFile.getPath())
+ programParams
);
final Process process = Runtime.getRuntime().exec(ArrayUtil.toStringArray(cmd));
@@ -320,8 +331,8 @@ public class GroovyBuilder extends ModuleLevelBuilder {
return SystemProperties.getJavaHome() + "/bin/java";
}
- private static List collectChangedFiles(CompileContext context,
- DirtyFilesHolder dirtyFilesHolder) throws IOException {
+ private List collectChangedFiles(CompileContext context,
+ DirtyFilesHolder dirtyFilesHolder, final JpsGroovySettings settings) throws IOException {
final ResourcePatterns patterns = ResourcePatterns.KEY.get(context);
assert patterns != null;
final List toCompile = new ArrayList();
@@ -329,6 +340,10 @@ public class GroovyBuilder extends ModuleLevelBuilder {
public boolean apply(ModuleBuildTarget target, File file, JavaSourceRootDescriptor sourceRoot) throws IOException {
final String path = file.getPath();
if (isGroovyFile(path) && !patterns.isResourceFile(file, sourceRoot.root)) { //todo file type check
+ if (myForStubs && settings.isExcludedFromStubGeneration(file)) {
+ return true;
+ }
+
toCompile.add(file);
}
return true;
diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyModelSerializerExtension.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyModelSerializerExtension.java
new file mode 100644
index 000000000000..4fd9b00723a4
--- /dev/null
+++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyModelSerializerExtension.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2000-2013 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.jps.incremental.groovy;
+
+import com.intellij.util.xmlb.XmlSerializer;
+import org.jdom.Element;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.model.JpsProject;
+import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension;
+import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author peter
+ */
+public class GroovyModelSerializerExtension extends JpsModelSerializerExtension {
+
+ @NotNull
+ @Override
+ public List extends JpsProjectExtensionSerializer> getProjectExtensionSerializers() {
+ return Arrays.asList(new JpsProjectExtensionSerializer("groovyc.xml", "GroovyCompilerProjectConfiguration") {
+ @Override
+ public void loadExtension(@NotNull JpsProject project, @NotNull Element componentTag) {
+ JpsGroovySettings configuration = XmlSerializer.deserialize(componentTag, JpsGroovySettings.class);
+ if (configuration == null) {
+ configuration = new JpsGroovySettings();
+ }
+ configuration.initExcludes();
+ project.getContainer().setChild(JpsGroovySettings.ROLE, configuration);
+ }
+
+ @Override
+ public void saveExtension(@NotNull JpsProject project, @NotNull Element componentTag) {
+ }
+ });
+ }
+}
diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovySettings.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovySettings.java
new file mode 100644
index 000000000000..76e76cb7c440
--- /dev/null
+++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovySettings.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2000-2013 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.jps.incremental.groovy;
+
+import com.intellij.util.xmlb.annotations.Tag;
+import org.jdom.Element;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.model.JpsElementChildRole;
+import org.jetbrains.jps.model.JpsProject;
+import org.jetbrains.jps.model.ex.JpsElementBase;
+import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
+import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes;
+import org.jetbrains.jps.model.java.impl.compiler.JpsCompilerExcludesImpl;
+import org.jetbrains.jps.model.serialization.java.compiler.JpsJavaCompilerConfigurationSerializer;
+
+import java.io.File;
+
+/**
+ * @author peter
+ */
+public class JpsGroovySettings extends JpsElementBase {
+ static final JpsElementChildRole ROLE = JpsElementChildRoleBase.create("Groovy Compiler Configuration");
+ public static final String DEFAULT_HEAP_SIZE = "400";
+ public static final boolean DEFAULT_INVOKE_DYNAMIC = false;
+ public static final boolean DEFAULT_TRANSFORMS_OK = false;
+
+ public String heapSize = DEFAULT_HEAP_SIZE;
+ public boolean invokeDynamic = DEFAULT_INVOKE_DYNAMIC;
+
+ @Tag("excludes") public Element excludes = new Element("aaa");
+
+ public boolean transformsOk = DEFAULT_TRANSFORMS_OK;
+ private JpsCompilerExcludes myExcludeFromStubGeneration;
+
+ public JpsGroovySettings() {
+ }
+
+ public JpsGroovySettings(JpsGroovySettings original) {
+ heapSize = original.heapSize;
+ invokeDynamic = original.invokeDynamic;
+ }
+
+ void initExcludes() {
+ myExcludeFromStubGeneration = new JpsCompilerExcludesImpl();
+ JpsJavaCompilerConfigurationSerializer.readExcludes(excludes, myExcludeFromStubGeneration);
+ }
+
+ @NotNull
+ @Override
+ public JpsGroovySettings createCopy() {
+ return new JpsGroovySettings(this);
+ }
+
+ @Override
+ public void applyChanges(@NotNull JpsGroovySettings modified) {
+ }
+
+ @NotNull
+ public static JpsGroovySettings getSettings(@NotNull JpsProject project) {
+ JpsGroovySettings settings = project.getContainer().getChild(ROLE);
+ return settings == null ? new JpsGroovySettings() : settings;
+ }
+
+ public boolean isExcludedFromStubGeneration(File file) {
+ return myExcludeFromStubGeneration != null && myExcludeFromStubGeneration.isExcluded(file);
+ }
+}
diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java
index 35c2bab8cd08..dc1c4b977b82 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/compiler/GroovyCompilerConfiguration.java
@@ -21,8 +21,7 @@ import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
import com.intellij.openapi.components.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
-import com.intellij.util.xmlb.annotations.Tag;
-import org.jdom.Element;
+import org.jetbrains.jps.incremental.groovy.JpsGroovySettings;
/**
* @author peter
@@ -34,27 +33,23 @@ import org.jdom.Element;
@Storage( file = StoragePathMacros.PROJECT_CONFIG_DIR + "/groovyc.xml", scheme = StorageScheme.DIRECTORY_BASED)
}
)
-public class GroovyCompilerConfiguration implements PersistentStateComponent, Disposable {
- static final String DEFAULT_HEAP_SIZE = "400";
- static final boolean DEFAULT_INVOKE_DYNAMIC = false;
- static final boolean DEFAULT_TRANSFORMS_OK = false;
-
- private String myHeapSize = DEFAULT_HEAP_SIZE;
- private boolean myInvokeDynamic = DEFAULT_INVOKE_DYNAMIC;
- public boolean transformsOk = DEFAULT_TRANSFORMS_OK;
+public class GroovyCompilerConfiguration implements PersistentStateComponent, Disposable {
+ private String myHeapSize = JpsGroovySettings.DEFAULT_HEAP_SIZE;
+ private boolean myInvokeDynamic = JpsGroovySettings.DEFAULT_INVOKE_DYNAMIC;
+ public boolean transformsOk = JpsGroovySettings.DEFAULT_TRANSFORMS_OK;
private final ExcludedEntriesConfiguration myExcludeFromStubGeneration = new ExcludedEntriesConfiguration();
public GroovyCompilerConfiguration(Project project) {
GroovyCompilerWorkspaceConfiguration workspaceConfiguration = ServiceManager.getService(project, GroovyCompilerWorkspaceConfiguration.class);
loadState(workspaceConfiguration.getState());
- workspaceConfiguration.myHeapSize = DEFAULT_HEAP_SIZE;
- workspaceConfiguration.transformsOk = DEFAULT_TRANSFORMS_OK;
- workspaceConfiguration.myInvokeDynamic = DEFAULT_INVOKE_DYNAMIC;
+ workspaceConfiguration.myHeapSize = JpsGroovySettings.DEFAULT_HEAP_SIZE;
+ workspaceConfiguration.transformsOk = JpsGroovySettings.DEFAULT_TRANSFORMS_OK;
+ workspaceConfiguration.myInvokeDynamic = JpsGroovySettings.DEFAULT_INVOKE_DYNAMIC;
workspaceConfiguration.myExcludeFromStubGeneration.removeAllExcludeEntryDescriptions();
}
- public MyStateBean getState() {
- final MyStateBean bean = new MyStateBean();
+ public JpsGroovySettings getState() {
+ final JpsGroovySettings bean = new JpsGroovySettings();
bean.heapSize = myHeapSize;
bean.invokeDynamic = myInvokeDynamic;
bean.transformsOk = transformsOk;
@@ -70,7 +65,7 @@ public class GroovyCompilerConfiguration implements PersistentStateComponent, Disposable {
- String myHeapSize = GroovyCompilerConfiguration.DEFAULT_HEAP_SIZE;
- boolean myInvokeDynamic = GroovyCompilerConfiguration.DEFAULT_INVOKE_DYNAMIC;
- boolean transformsOk = GroovyCompilerConfiguration.DEFAULT_TRANSFORMS_OK;
+public class GroovyCompilerWorkspaceConfiguration implements PersistentStateComponent, Disposable {
+ String myHeapSize = JpsGroovySettings.DEFAULT_HEAP_SIZE;
+ boolean myInvokeDynamic = JpsGroovySettings.DEFAULT_INVOKE_DYNAMIC;
+ boolean transformsOk = JpsGroovySettings.DEFAULT_TRANSFORMS_OK;
final ExcludedEntriesConfiguration myExcludeFromStubGeneration = new ExcludedEntriesConfiguration();
- public MyStateBean getState() {
- final MyStateBean bean = new MyStateBean();
+ public JpsGroovySettings getState() {
+ final JpsGroovySettings bean = new JpsGroovySettings();
bean.heapSize = myHeapSize;
bean.invokeDynamic = myInvokeDynamic;
bean.transformsOk = transformsOk;
@@ -42,7 +44,7 @@ public class GroovyCompilerWorkspaceConfiguration implements PersistentStateComp
return bean;
}
- public void loadState(MyStateBean state) {
+ public void loadState(JpsGroovySettings state) {
myHeapSize = state.heapSize;
myInvokeDynamic = state.invokeDynamic;
transformsOk = state.transformsOk;