diff --git a/jps/jps-builders/jps-builders.iml b/jps/jps-builders/jps-builders.iml
index 52b7313e1d64..9be26469dcaf 100644
--- a/jps/jps-builders/jps-builders.iml
+++ b/jps/jps-builders/jps-builders.iml
@@ -35,7 +35,6 @@
-
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 fd66ea59411f..70d32f869600 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
@@ -55,8 +55,6 @@ import org.jetbrains.jps.model.java.LanguageLevel;
import org.jetbrains.jps.model.java.compiler.*;
import org.jetbrains.jps.model.library.sdk.JpsSdk;
import org.jetbrains.jps.model.module.JpsModule;
-import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerConfiguration;
-import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService;
import javax.tools.*;
import java.io.*;
@@ -116,6 +114,8 @@ public class JavaBuilder extends ModuleLevelBuilder {
private static final Key DELTA_MAPPINGS_CALLBACK_KEY = Key.create("_dependency_data_");
private final Executor myTaskRunner;
private static final List ourClassProcessors = new ArrayList();
+ private static boolean OPTION_ENABLE_FORMS_INSTRUMENTATION = false;
+ private static boolean OPTION_COPY_FORMS_RUNTIME_CLASSES = false;
static {
registerClassPostProcessor(new ClassPostProcessor() {
@@ -165,6 +165,22 @@ public class JavaBuilder extends ModuleLevelBuilder {
ourClassProcessors.add(processor);
}
+ public static boolean isFormsInstrumentationEnabled() {
+ return OPTION_ENABLE_FORMS_INSTRUMENTATION;
+ }
+
+ public static void setFormsInstrumentationEnabled(boolean enabled) {
+ OPTION_ENABLE_FORMS_INSTRUMENTATION = enabled;
+ }
+
+ public static boolean isCopyFormsRuntime() {
+ return OPTION_COPY_FORMS_RUNTIME_CLASSES;
+ }
+
+ public static void setCopyFormsRuntime(boolean copy) {
+ OPTION_COPY_FORMS_RUNTIME_CLASSES = copy;
+ }
+
public JavaBuilder(Executor tasksExecutor) {
super(BuilderCategory.TRANSLATOR);
myTaskRunner = new SequentialTaskExecutor(tasksExecutor);
@@ -263,7 +279,13 @@ public class JavaBuilder extends ModuleLevelBuilder {
String message = e.getMessage();
if (message == null) {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
- e.printStackTrace(new PrintStream(out));
+ final PrintStream stream = new PrintStream(out);
+ try {
+ e.printStackTrace(stream);
+ }
+ finally {
+ stream.close();
+ }
message = "Internal error: \n" + out.toString();
}
context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, message));
@@ -312,8 +334,7 @@ public class JavaBuilder extends ModuleLevelBuilder {
final ProjectPaths paths = context.getProjectPaths();
final ProjectDescriptor pd = context.getProjectDescriptor();
- final boolean addNotNullAssertions = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(
- pd.getProject()).isAddNotNullAssertions();
+ final boolean addNotNullAssertions = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(pd.getProject()).isAddNotNullAssertions();
JavaBuilderUtil.ensureModuleHasJdk(chunk.representativeTarget().getModule(), context, BUILDER_NAME);
final Collection classpath = paths.getCompilationClasspath(chunk, false/*context.isProjectRebuild()*/);
@@ -327,6 +348,18 @@ public class JavaBuilder extends ModuleLevelBuilder {
try {
if (hasSourcesToCompile) {
exitCode = ExitCode.OK;
+
+ if (OPTION_COPY_FORMS_RUNTIME_CLASSES && !forms.isEmpty()) {
+ for (ModuleBuildTarget target : chunk.getTargets()) {
+ if (!target.isTests()) {
+ final File outputDir = target.getOutputDir();
+ if (outputDir != null) {
+ CopyResourcesUtil.copyFormsRuntime(outputDir.getAbsolutePath(), false);
+ }
+ }
+ }
+ }
+
final Set srcPath = new HashSet();
final BuildRootIndex index = pd.getBuildRootIndex();
for (ModuleBuildTarget target : chunk.getTargets()) {
@@ -365,21 +398,10 @@ public class JavaBuilder extends ModuleLevelBuilder {
final InstrumentationClassFinder finder = createInstrumentationClassFinder(platformCp, classpath, chunkSourcePath, outputSink);
try {
- if (!forms.isEmpty()) {
+ if (OPTION_ENABLE_FORMS_INSTRUMENTATION && !forms.isEmpty()) {
try {
context.processMessage(new ProgressMessage("Instrumenting forms [" + chunkName + "]"));
instrumentForms(context, chunk, chunkSourcePath, finder, forms, outputSink);
- JpsUiDesignerConfiguration configuration = JpsUiDesignerExtensionService.getInstance().getUiDesignerConfiguration(pd.getProject());
- if (configuration != null && configuration.isCopyFormsRuntimeToOutput()) {
- for (ModuleBuildTarget target : chunk.getTargets()) {
- if (!target.isTests()) {
- final File outputDir = target.getOutputDir();
- if (outputDir != null) {
- CopyResourcesUtil.copyFormsRuntime(outputDir.getAbsolutePath(), false);
- }
- }
- }
- }
}
finally {
context.processMessage(new ProgressMessage("Finished instrumenting forms [" + chunkName + "]"));
diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsElementExtensionSerializerBase.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsElementExtensionSerializerBase.java
index 45a09ea42213..621e088fed3d 100644
--- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsElementExtensionSerializerBase.java
+++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsElementExtensionSerializerBase.java
@@ -29,5 +29,9 @@ public abstract class JpsElementExtensionSerializerBase {
public abstract void loadExtension(@NotNull E e, @NotNull Element componentTag);
+ // called when no corresponding component tag was found in xml configs
+ public void loadExtensionWithDefaultSettings(@NotNull E e) {
+ }
+
public abstract void saveExtension(@NotNull E e, @NotNull Element componentTag);
}
diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsLoaderBase.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsLoaderBase.java
index 3ab42c66b981..c753b7b8d0da 100644
--- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsLoaderBase.java
+++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsLoaderBase.java
@@ -37,6 +37,9 @@ public abstract class JpsLoaderBase {
if (componentTag != null) {
serializer.loadExtension(element, componentTag);
}
+ else {
+ serializer.loadExtensionWithDefaultSettings(element);
+ }
}
else {
LOG.debug("Cannot load component " + serializer.getComponentName() + ": " + configFile + " doesn't exist");
diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
index 698969fe1ede..988688ca55de 100644
--- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
+++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
@@ -158,6 +158,9 @@ public class JpsProjectLoader extends JpsLoaderBase {
if (component != null) {
serializer.loadExtension(myProject, component);
}
+ else {
+ serializer.loadExtensionWithDefaultSettings(myProject);
+ }
}
}
loadModules(iprRoot, projectSdkType);
diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationImpl.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationImpl.java
index d89d74463e6a..fab89da0d431 100644
--- a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationImpl.java
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationImpl.java
@@ -1,6 +1,7 @@
package org.jetbrains.jps.uiDesigner.model.impl;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.incremental.java.JavaBuilder;
import org.jetbrains.jps.model.JpsElementChildRole;
import org.jetbrains.jps.model.ex.JpsElementBase;
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
@@ -40,6 +41,7 @@ public class JpsUiDesignerConfigurationImpl extends JpsElementBase
+