diff --git a/.idea/modules.xml b/.idea/modules.xml
index fa840d1d2f42..abadb76c492f 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -122,6 +122,7 @@
+
diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant
index 4110c931269f..5ed678e152f3 100644
--- a/build/scripts/layouts.gant
+++ b/build/scripts/layouts.gant
@@ -214,7 +214,13 @@ public def layoutCommunityPlugins(String home) {
layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin")
layoutPlugin("IntentionPowerPack", "IntentionPowerPackPlugin")
layoutPlugin("ToString", "generate-tostring", "toString")
- layoutPlugin("uiDesigner", "ui-designer", "uiDesigner")
+ layoutPlugin("uiDesigner", "ui-designer", "uiDesigner") {
+ dir("jps") {
+ jar("ui-designer-jps-plugin.jar") {
+ module("ui-designer-jps-plugin")
+ }
+ }
+ }
layoutPlugin("maven") {
jar("maven-server-api.jar") {
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log
new file mode 100644
index 000000000000..7f83624edded
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log
@@ -0,0 +1,6 @@
+Compiling files:
+src/xxx/MyForm.java
+End of files
+Compiling forms:
+src/xxx/MyForm.form
+End of files
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form
new file mode 100644
index 000000000000..c04d9462d43e
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form
@@ -0,0 +1,12 @@
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new
new file mode 100644
index 000000000000..1286aa755694
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new
@@ -0,0 +1,14 @@
+
+
diff --git a/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java
new file mode 100644
index 000000000000..9b730141a004
--- /dev/null
+++ b/java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2000-2012 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 xxx;
+
+import javax.swing.*;
+
+public class MyForm {
+ private JPanel myRootPanel;
+
+ public JPanel getMyRootPanel() {
+ return myRootPanel;
+ }
+}
diff --git a/jps/jps-builders/jps-builders.iml b/jps/jps-builders/jps-builders.iml
index c1353060f3e5..663db3cccfe0 100644
--- a/jps/jps-builders/jps-builders.iml
+++ b/jps/jps-builders/jps-builders.iml
@@ -36,6 +36,7 @@
+
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 9370c451b20b..0bafdad4cbb9 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
@@ -45,6 +45,8 @@ import org.jetbrains.jps.model.java.JpsJavaSdkType;
import org.jetbrains.jps.model.java.LanguageLevel;
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.*;
@@ -204,19 +206,12 @@ public class JavaBuilder extends ModuleLevelBuilder {
}
final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger();
- if (logger.isEnabled()) {
- if (filesToCompile.size() > 0 && context.isMake()) {
- logger.log("Compiling files:");
- final String[] buffer = new String[filesToCompile.size()];
- int i = 0;
- for (final File f : filesToCompile) {
- buffer[i++] = FileUtil.toSystemIndependentName(f.getCanonicalPath());
- }
- Arrays.sort(buffer);
- for (final String s : buffer) {
- logger.log(s);
- }
- logger.log("End of files");
+ if (logger.isEnabled() && context.isMake()) {
+ if (filesToCompile.size() > 0) {
+ logFiles(filesToCompile, logger, "Compiling files:");
+ }
+ if (!formsToCompile.isEmpty()) {
+ logFiles(formsToCompile, logger, "Compiling forms:");
}
}
@@ -237,6 +232,20 @@ public class JavaBuilder extends ModuleLevelBuilder {
}
}
+ private static void logFiles(Set files, JavaBuilderLogger logger, final String description) throws IOException {
+ logger.log(description);
+ final String[] buffer = new String[files.size()];
+ int i = 0;
+ for (final File f : files) {
+ buffer[i++] = FileUtil.toSystemIndependentName(f.getCanonicalPath());
+ }
+ Arrays.sort(buffer);
+ for (final String s : buffer) {
+ logger.log(s);
+ }
+ logger.log("End of files");
+ }
+
@Override
public boolean shouldHonorFileEncodingForCompilation(File file) {
return JAVA_SOURCES_FILTER.accept(file) || FORM_SOURCES_FILTER.accept(file);
@@ -330,7 +339,8 @@ public class JavaBuilder extends ModuleLevelBuilder {
try {
context.processMessage(new ProgressMessage("Instrumenting forms [" + chunkName + "]"));
instrumentForms(context, chunk, chunkSourcePath, finder, forms, outputSink);
- if (pd.project.getUiDesignerConfiguration().isCopyFormsRuntimeToOutput() && !chunk.isTests()) {
+ JpsUiDesignerConfiguration configuration = JpsUiDesignerExtensionService.getInstance().getUiDesignerConfiguration(pd.jpsProject);
+ if (configuration != null && configuration.isCopyFormsRuntimeToOutput() && !chunk.isTests()) {
for (JpsModule module : chunk.getModules()) {
final File outputDir = paths.getModuleOutputDir(module, false);
if (outputDir != null) {
diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java
index 502be1e81fd2..aefca6349636 100644
--- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java
+++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java
@@ -18,6 +18,7 @@ package org.jetbrains.ether;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.Processor;
import org.jetbrains.jps.JpsPathUtil;
import org.jetbrains.jps.builders.BuildResult;
import org.jetbrains.jps.builders.JpsBuildTestCase;
@@ -33,10 +34,7 @@ import org.jetbrains.jps.model.java.JpsJavaExtensionService;
import org.jetbrains.jps.model.library.sdk.JpsSdk;
import org.jetbrains.jps.model.module.JpsModule;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.PrintStream;
+import java.io.*;
import java.util.Collections;
/**
@@ -50,7 +48,7 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase {
private JpsSdk myJdk;
@SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
- protected IncrementalTestCase(final String name) throws Exception {
+ protected IncrementalTestCase(final String name) {
setName(name);
groupName = name;
}
@@ -90,15 +88,29 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase {
final File[] files = baseDir.listFiles(new FileFilter() {
public boolean accept(final File pathname) {
final String name = pathname.getName();
-
return name.endsWith(".java.new") || name.endsWith(".java.remove");
}
});
+ FileUtil.processFilesRecursively(baseDir, new Processor() {
+ @Override
+ public boolean process(File file) {
+ try {
+ if (file.getName().endsWith(".form.new")) {
+ String relativePath = StringUtil.trimEnd(FileUtil.getRelativePath(baseDir, file), ".new");
+ FileUtil.copyContent(file, new File(workDir, relativePath));
+ }
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+ });
for (File input : files) {
final String name = input.getName();
- final boolean copy = name.endsWith(".java.new");
+ final boolean copy = name.endsWith(".new");
final String postfix = name.substring(0, name.length() - (copy ? ".new" : ".remove").length());
final int pathSep = postfix.indexOf("$");
final String baseName = pathSep == -1 ? postfix : postfix.substring(pathSep + 1);
@@ -114,7 +126,7 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase {
}
}
- public void doTest() throws Exception {
+ public BuildResult doTest() throws Exception {
if (new File(workDir, ".idea").exists()) {
getOrCreateJdk();
loadProject(workDir.getAbsolutePath());
@@ -123,7 +135,7 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase {
addModule();
}
- doTestBuild();
+ return doTestBuild();
}
protected JpsModule addModule() {
@@ -157,7 +169,11 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase {
makeDump.close();
- final String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(baseDir.getAbsolutePath() + ".log")));
+ File logFile = new File(baseDir.getAbsolutePath() + ".log");
+ if (!logFile.exists()) {
+ logFile = new File(baseDir, "build.log");
+ }
+ final String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(logFile));
final String actual = javaBuilderLogger.myLog.toString();
assertEquals(expected, actual);
diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/UiDesignerTest.java b/jps/jps-builders/testSrc/org/jetbrains/ether/UiDesignerTest.java
new file mode 100644
index 000000000000..ec6501c32a4b
--- /dev/null
+++ b/jps/jps-builders/testSrc/org/jetbrains/ether/UiDesignerTest.java
@@ -0,0 +1,14 @@
+package org.jetbrains.ether;
+
+/**
+ * @author nik
+ */
+public class UiDesignerTest extends IncrementalTestCase {
+ public UiDesignerTest() throws Exception {
+ super("uiDesigner");
+ }
+
+ public void testSimple() throws Exception {
+ doTest().assertSuccessful();
+ }
+}
diff --git a/jps/model/src/org/jetbrains/jps/Project.groovy b/jps/model/src/org/jetbrains/jps/Project.groovy
index 32603ca81ca8..573110be22ea 100644
--- a/jps/model/src/org/jetbrains/jps/Project.groovy
+++ b/jps/model/src/org/jetbrains/jps/Project.groovy
@@ -4,7 +4,6 @@ package org.jetbrains.jps
*/
class Project {
final CompilerConfiguration compilerConfiguration = new CompilerConfiguration()
- final UiDesignerConfiguration uiDesignerConfiguration = new UiDesignerConfiguration()
final IgnoredFilePatterns ignoredFilePatterns = new IgnoredFilePatterns()
String projectCharset; // contains project charset, if not specified default charset will be used (used by compilers)
diff --git a/jps/model/src/org/jetbrains/jps/UiDesignerConfiguration.java b/jps/model/src/org/jetbrains/jps/UiDesignerConfiguration.java
deleted file mode 100644
index f1dabaeb26bf..000000000000
--- a/jps/model/src/org/jetbrains/jps/UiDesignerConfiguration.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.jetbrains.jps;
-
-/**
- * @author nik
- */
-public class UiDesignerConfiguration {
- private boolean myCopyFormsRuntimeToOutput = true;
-
- public boolean isCopyFormsRuntimeToOutput() {
- return myCopyFormsRuntimeToOutput;
- }
-
- public void setCopyFormsRuntimeToOutput(boolean copyFormsRuntimeToOutput) {
- myCopyFormsRuntimeToOutput = copyFormsRuntimeToOutput;
- }
-}
diff --git a/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy b/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy
index 6c86328b9bf3..2121fb2b0adc 100644
--- a/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy
+++ b/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy
@@ -94,7 +94,6 @@ public class IdeaProjectLoader {
loadCompilerConfiguration(root)
loadProjectFileEncodings(root)
loadWorkspaceConfiguration(new File(iprFile.parentFile, iprFile.name[0..-4]+"iws"))
- loadUiDesignerConfiguration(root)
}
def loadFromDirectoryBased(File dir) {
@@ -110,16 +109,6 @@ public class IdeaProjectLoader {
loadCompilerConfiguration(xmlParser.parse(compilerXml))
}
loadWorkspaceConfiguration(new File(dir, "workspace.xml"))
-
- def uiDesignerXml = new File(dir, "uiDesigner.xml")
- if (uiDesignerXml.exists()) {
- loadUiDesignerConfiguration(xmlParser.parse(uiDesignerXml))
- }
- }
-
-
- boolean isXmlFile(File file) {
- return file.isFile() && StringUtil.endsWithIgnoreCase(file.name, ".xml")
}
private def loadWorkspaceConfiguration(File workspaceFile) {
@@ -222,11 +211,6 @@ public class IdeaProjectLoader {
}
}
- private def loadUiDesignerConfiguration(Node root) {
- def options = loadOptions(getComponent(root, "uidesigner-configuration"))
- project.uiDesignerConfiguration.copyFormsRuntimeToOutput = parseBoolean(options["COPY_FORMS_RUNTIME_TO_OUTPUT"], true)
- }
-
private File getFileByUrl(final String url) {
return new File(FileUtil.toCanonicalPath(projectMacroExpander.expandMacros(JpsPathUtil.urlToPath(url))))
}
diff --git a/plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension b/plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension
new file mode 100644
index 000000000000..e8593c6b4dc1
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension
@@ -0,0 +1 @@
+org.jetbrains.jps.uiDesigner.model.impl.JpsUiDesignerSerializerExtension
\ No newline at end of file
diff --git a/plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService b/plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService
new file mode 100644
index 000000000000..00a545b8b58a
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService
@@ -0,0 +1 @@
+org.jetbrains.jps.uiDesigner.model.impl.JpsUiDesignerExtensionServiceImpl
\ No newline at end of file
diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfiguration.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfiguration.java
new file mode 100644
index 000000000000..e13bc7a8f974
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfiguration.java
@@ -0,0 +1,16 @@
+package org.jetbrains.jps.uiDesigner.model;
+
+import org.jetbrains.jps.model.JpsElement;
+
+/**
+ * @author nik
+ */
+public interface JpsUiDesignerConfiguration extends JpsElement {
+ boolean isCopyFormsRuntimeToOutput();
+
+ void setCopyFormsRuntimeToOutput(boolean value);
+
+ boolean isInstrumentClasses();
+
+ void setInstrumentClasses(boolean value);
+}
diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerExtensionService.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerExtensionService.java
new file mode 100644
index 000000000000..df5f0ac82bc4
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerExtensionService.java
@@ -0,0 +1,20 @@
+package org.jetbrains.jps.uiDesigner.model;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jps.model.JpsProject;
+import org.jetbrains.jps.service.JpsServiceManager;
+
+/**
+ * @author nik
+ */
+public abstract class JpsUiDesignerExtensionService {
+ public static JpsUiDesignerExtensionService getInstance() {
+ return JpsServiceManager.getInstance().getService(JpsUiDesignerExtensionService.class);
+ }
+
+ @Nullable
+ public abstract JpsUiDesignerConfiguration getUiDesignerConfiguration(@NotNull JpsProject project);
+
+ public abstract void setUiDesignerConfiguration(@NotNull JpsProject project, @Nullable JpsUiDesignerConfiguration configuration);
+}
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
new file mode 100644
index 000000000000..b26c322b03d0
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationImpl.java
@@ -0,0 +1,70 @@
+package org.jetbrains.jps.uiDesigner.model.impl;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.model.JpsElementChildRole;
+import org.jetbrains.jps.model.impl.JpsElementBase;
+import org.jetbrains.jps.model.impl.JpsElementChildRoleBase;
+import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerConfiguration;
+
+/**
+ * @author nik
+ */
+public class JpsUiDesignerConfigurationImpl extends JpsElementBase implements JpsUiDesignerConfiguration {
+ public static final JpsElementChildRole ROLE = JpsElementChildRoleBase.create("ui designer configuration");
+ private final UiDesignerConfigurationState myState = new UiDesignerConfigurationState();
+
+ public JpsUiDesignerConfigurationImpl() {
+ }
+
+ public JpsUiDesignerConfigurationImpl(final UiDesignerConfigurationState state) {
+ myState.INSTRUMENT_CLASSES = state.INSTRUMENT_CLASSES;
+ myState.COPY_FORMS_RUNTIME_TO_OUTPUT = state.COPY_FORMS_RUNTIME_TO_OUTPUT;
+ }
+
+ public UiDesignerConfigurationState getState() {
+ return myState;
+ }
+
+ @NotNull
+ @Override
+ public JpsUiDesignerConfigurationImpl createCopy() {
+ return new JpsUiDesignerConfigurationImpl(myState);
+ }
+
+ @Override
+ public boolean isCopyFormsRuntimeToOutput() {
+ return myState.COPY_FORMS_RUNTIME_TO_OUTPUT;
+ }
+
+ @Override
+ public void setCopyFormsRuntimeToOutput(boolean value) {
+ if (myState.COPY_FORMS_RUNTIME_TO_OUTPUT != value) {
+ myState.COPY_FORMS_RUNTIME_TO_OUTPUT = value;
+ fireElementChanged();
+ }
+ }
+
+ @Override
+ public boolean isInstrumentClasses() {
+ return myState.INSTRUMENT_CLASSES;
+ }
+
+ @Override
+ public void setInstrumentClasses(boolean value) {
+ if (myState.INSTRUMENT_CLASSES != value) {
+ myState.INSTRUMENT_CLASSES = value;
+ fireElementChanged();
+ }
+ }
+
+ @Override
+ public void applyChanges(@NotNull JpsUiDesignerConfigurationImpl modified) {
+ setCopyFormsRuntimeToOutput(modified.isCopyFormsRuntimeToOutput());
+ setInstrumentClasses(modified.isInstrumentClasses());
+ }
+
+ public static class UiDesignerConfigurationState {
+ public boolean INSTRUMENT_CLASSES = true;
+ public boolean COPY_FORMS_RUNTIME_TO_OUTPUT = true;
+ }
+}
diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationSerializer.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationSerializer.java
new file mode 100644
index 000000000000..dcf8f9fbc7f1
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationSerializer.java
@@ -0,0 +1,35 @@
+package org.jetbrains.jps.uiDesigner.model.impl;
+
+import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
+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.JpsProjectExtensionSerializer;
+import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerConfiguration;
+import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService;
+
+/**
+ * @author nik
+ */
+public class JpsUiDesignerConfigurationSerializer extends JpsProjectExtensionSerializer {
+ private static final SkipDefaultValuesSerializationFilters FILTERS = new SkipDefaultValuesSerializationFilters();
+
+ public JpsUiDesignerConfigurationSerializer() {
+ super("uiDesigner.xml", "uidesigner-configuration");
+ }
+
+ @Override
+ public void loadExtension(@NotNull JpsProject element, @NotNull Element componentTag) {
+ JpsUiDesignerConfigurationImpl.UiDesignerConfigurationState state = XmlSerializer.deserialize(componentTag, JpsUiDesignerConfigurationImpl.UiDesignerConfigurationState.class);
+ JpsUiDesignerExtensionService.getInstance().setUiDesignerConfiguration(element, new JpsUiDesignerConfigurationImpl(state));
+ }
+
+ @Override
+ public void saveExtension(@NotNull JpsProject element, @NotNull Element componentTag) {
+ JpsUiDesignerConfiguration configuration = JpsUiDesignerExtensionService.getInstance().getUiDesignerConfiguration(element);
+ if (configuration != null) {
+ XmlSerializer.serializeInto(((JpsUiDesignerConfigurationImpl)configuration).getState(), componentTag, FILTERS);
+ }
+ }
+}
diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerExtensionServiceImpl.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerExtensionServiceImpl.java
new file mode 100644
index 000000000000..c39dc9044fdb
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerExtensionServiceImpl.java
@@ -0,0 +1,23 @@
+package org.jetbrains.jps.uiDesigner.model.impl;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jps.model.JpsProject;
+import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerConfiguration;
+import org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService;
+
+/**
+ * @author nik
+ */
+public class JpsUiDesignerExtensionServiceImpl extends JpsUiDesignerExtensionService {
+ @Nullable
+ @Override
+ public JpsUiDesignerConfiguration getUiDesignerConfiguration(@NotNull JpsProject project) {
+ return project.getContainer().getChild(JpsUiDesignerConfigurationImpl.ROLE);
+ }
+
+ @Override
+ public void setUiDesignerConfiguration(@NotNull JpsProject project, @Nullable JpsUiDesignerConfiguration configuration) {
+ project.getContainer().setChild(JpsUiDesignerConfigurationImpl.ROLE, configuration);
+ }
+}
diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerSerializerExtension.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerSerializerExtension.java
new file mode 100644
index 000000000000..715b50556e92
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerSerializerExtension.java
@@ -0,0 +1,19 @@
+package org.jetbrains.jps.uiDesigner.model.impl;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension;
+import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author nik
+ */
+public class JpsUiDesignerSerializerExtension extends JpsModelSerializerExtension {
+ @NotNull
+ @Override
+ public List extends JpsProjectExtensionSerializer> getProjectExtensionSerializers() {
+ return Arrays.asList(new JpsUiDesignerConfigurationSerializer());
+ }
+}
diff --git a/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/misc.xml b/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/misc.xml
new file mode 100644
index 000000000000..d9d0db5f3824
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/modules.xml b/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/modules.xml
new file mode 100644
index 000000000000..e1042fc80c7a
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/uiDesigner.xml b/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/uiDesigner.xml
new file mode 100644
index 000000000000..49d1a64ca6e7
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/uiDesigner.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/plugins/ui-designer/jps-plugin/testSrc/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfigurationSerializationTest.java b/plugins/ui-designer/jps-plugin/testSrc/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfigurationSerializationTest.java
new file mode 100644
index 000000000000..6331443568de
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/testSrc/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfigurationSerializationTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2012 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.uiDesigner.model;
+
+import org.jetbrains.jps.model.serialization.JpsSerializationTestCase;
+
+/**
+ * @author nik
+ */
+public class JpsUiDesignerConfigurationSerializationTest extends JpsSerializationTestCase {
+ public void testLoad() {
+ loadProject("plugins/ui-designer/jps-plugin/testData/uiDesigner");
+ JpsUiDesignerConfiguration configuration = JpsUiDesignerExtensionService.getInstance().getUiDesignerConfiguration(myProject);
+ assertNotNull(configuration);
+ assertTrue(configuration.isInstrumentClasses());
+ assertFalse(configuration.isCopyFormsRuntimeToOutput());
+ }
+}
diff --git a/plugins/ui-designer/jps-plugin/ui-designer-jps-plugin.iml b/plugins/ui-designer/jps-plugin/ui-designer-jps-plugin.iml
new file mode 100644
index 000000000000..b57bb4322372
--- /dev/null
+++ b/plugins/ui-designer/jps-plugin/ui-designer-jps-plugin.iml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+