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 +