From c3cbe77d242af58b25bcb584e21b417837895af1 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 4 Sep 2012 11:06:12 +0400 Subject: [PATCH] ui designer configuration moved to new jps model --- .idea/modules.xml | 1 + build/scripts/layouts.gant | 8 ++- .../incremental/uiDesigner/simple/build.log | 6 ++ .../uiDesigner/simple/src/xxx/MyForm.form | 12 ++++ .../uiDesigner/simple/src/xxx/MyForm.form.new | 14 ++++ .../uiDesigner/simple/src/xxx/MyForm.java | 26 +++++++ jps/jps-builders/jps-builders.iml | 1 + .../jps/incremental/java/JavaBuilder.java | 38 ++++++---- .../jetbrains/ether/IncrementalTestCase.java | 36 +++++++--- .../org/jetbrains/ether/UiDesignerTest.java | 14 ++++ .../src/org/jetbrains/jps/Project.groovy | 1 - .../jps/UiDesignerConfiguration.java | 16 ----- .../jps/idea/IdeaProjectLoader.groovy | 16 ----- ....serialization.JpsModelSerializerExtension | 1 + ...signer.model.JpsUiDesignerExtensionService | 1 + .../model/JpsUiDesignerConfiguration.java | 16 +++++ .../model/JpsUiDesignerExtensionService.java | 20 ++++++ .../impl/JpsUiDesignerConfigurationImpl.java | 70 +++++++++++++++++++ .../JpsUiDesignerConfigurationSerializer.java | 35 ++++++++++ .../JpsUiDesignerExtensionServiceImpl.java | 23 ++++++ .../JpsUiDesignerSerializerExtension.java | 19 +++++ .../testData/uiDesigner/.idea/misc.xml | 7 ++ .../testData/uiDesigner/.idea/modules.xml | 8 +++ .../testData/uiDesigner/.idea/uiDesigner.xml | 7 ++ ...esignerConfigurationSerializationTest.java | 31 ++++++++ .../jps-plugin/ui-designer-jps-plugin.iml | 17 +++++ 26 files changed, 386 insertions(+), 58 deletions(-) create mode 100644 java/java-tests/testData/compileServer/incremental/uiDesigner/simple/build.log create mode 100644 java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form create mode 100644 java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.form.new create mode 100644 java/java-tests/testData/compileServer/incremental/uiDesigner/simple/src/xxx/MyForm.java create mode 100644 jps/jps-builders/testSrc/org/jetbrains/ether/UiDesignerTest.java delete mode 100644 jps/model/src/org/jetbrains/jps/UiDesignerConfiguration.java create mode 100644 plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.model.serialization.JpsModelSerializerExtension create mode 100644 plugins/ui-designer/jps-plugin/src/META-INF/services/org.jetbrains.jps.uiDesigner.model.JpsUiDesignerExtensionService create mode 100644 plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfiguration.java create mode 100644 plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerExtensionService.java create mode 100644 plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationImpl.java create mode 100644 plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerConfigurationSerializer.java create mode 100644 plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerExtensionServiceImpl.java create mode 100644 plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/model/impl/JpsUiDesignerSerializerExtension.java create mode 100644 plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/misc.xml create mode 100644 plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/modules.xml create mode 100644 plugins/ui-designer/jps-plugin/testData/uiDesigner/.idea/uiDesigner.xml create mode 100644 plugins/ui-designer/jps-plugin/testSrc/org/jetbrains/jps/uiDesigner/model/JpsUiDesignerConfigurationSerializationTest.java create mode 100644 plugins/ui-designer/jps-plugin/ui-designer-jps-plugin.iml 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 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 @@ + + + + + + + + + + + + + + + + +