mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
added TestModuleProperties to JPS model (IDEA-150835)
This commit is contained in:
@@ -29,6 +29,7 @@ import org.jetbrains.jps.model.library.sdk.JpsSdkReference;
|
||||
import org.jetbrains.jps.model.module.JpsDependencyElement;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.model.module.JpsModuleReference;
|
||||
import org.jetbrains.jps.model.module.JpsTestModuleProperties;
|
||||
import org.jetbrains.jps.service.JpsServiceManager;
|
||||
|
||||
import java.io.File;
|
||||
@@ -109,6 +110,11 @@ public abstract class JpsJavaExtensionService {
|
||||
@NotNull
|
||||
public abstract JpsJavaCompilerConfiguration getOrCreateCompilerConfiguration(@NotNull JpsProject project);
|
||||
|
||||
@Nullable
|
||||
public abstract JpsTestModuleProperties getTestModuleProperties(@NotNull JpsModule module);
|
||||
|
||||
public abstract void setTestModuleProperties(@NotNull JpsModule module, @NotNull JpsModuleReference productionModuleReference);
|
||||
|
||||
@NotNull
|
||||
public abstract JpsSdkReference<JpsDummyElement> createWrappedJavaSdkReference(@NotNull JpsJavaSdkTypeWrapper sdkType,
|
||||
@NotNull JpsSdkReference<?> wrapperReference);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2000-2016 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.model.module;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.JpsElement;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public interface JpsTestModuleProperties extends JpsElement {
|
||||
@NotNull JpsModuleReference getProductionModuleReference();
|
||||
@Nullable JpsModule getProductionModule();
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.java.impl.runConfiguration.JpsApplicationRunConfigurationPropertiesImpl;
|
||||
import org.jetbrains.jps.model.java.runConfiguration.JpsApplicationRunConfigurationProperties;
|
||||
import org.jetbrains.jps.model.java.runConfiguration.JpsApplicationRunConfigurationState;
|
||||
import org.jetbrains.jps.model.module.impl.JpsTestModulePropertiesImpl;
|
||||
import org.jetbrains.jps.util.JpsPathUtil;
|
||||
import org.jetbrains.jps.model.JpsDummyElement;
|
||||
import org.jetbrains.jps.model.JpsGlobal;
|
||||
@@ -163,6 +164,17 @@ public class JpsJavaExtensionServiceImpl extends JpsJavaExtensionService {
|
||||
return configuration;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public JpsTestModuleProperties getTestModuleProperties(@NotNull JpsModule module) {
|
||||
return module.getContainer().getChild(JpsTestModulePropertiesImpl.ROLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTestModuleProperties(@NotNull JpsModule module, @NotNull JpsModuleReference productionModuleReference) {
|
||||
module.getContainer().setChild(JpsTestModulePropertiesImpl.ROLE, new JpsTestModulePropertiesImpl(productionModuleReference));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JpsSdkReference<JpsDummyElement> createWrappedJavaSdkReference(@NotNull JpsJavaSdkTypeWrapper sdkType,
|
||||
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright 2000-2016 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.model.module.impl;
|
||||
|
||||
import com.intellij.openapi.util.NullableLazyValue;
|
||||
import com.intellij.openapi.util.VolatileNullableLazyValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.JpsElementChildRole;
|
||||
import org.jetbrains.jps.model.ex.JpsCompositeElementBase;
|
||||
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.model.module.JpsModuleReference;
|
||||
import org.jetbrains.jps.model.module.JpsTestModuleProperties;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class JpsTestModulePropertiesImpl extends JpsCompositeElementBase<JpsTestModulePropertiesImpl> implements JpsTestModuleProperties {
|
||||
public static final JpsElementChildRole<JpsTestModuleProperties> ROLE = JpsElementChildRoleBase.create("test module properties");
|
||||
private static final JpsElementChildRole<JpsModuleReference> MODULE_REFERENCE_CHILD_ROLE = JpsElementChildRoleBase.create("production module reference");
|
||||
private NullableLazyValue<JpsModule> myCachedProductionModule = new VolatileNullableLazyValue<JpsModule>() {
|
||||
@Nullable
|
||||
@Override
|
||||
protected JpsModule compute() {
|
||||
return getProductionModuleReference().resolve();
|
||||
}
|
||||
};
|
||||
|
||||
public JpsTestModulePropertiesImpl(@NotNull JpsModuleReference productionModuleReference) {
|
||||
myContainer.setChild(MODULE_REFERENCE_CHILD_ROLE, productionModuleReference);
|
||||
}
|
||||
|
||||
private JpsTestModulePropertiesImpl(JpsTestModulePropertiesImpl original) {
|
||||
super(original);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JpsModuleReference getProductionModuleReference() {
|
||||
return myContainer.getChild(MODULE_REFERENCE_CHILD_ROLE);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public JpsModule getProductionModule() {
|
||||
return myCachedProductionModule.getValue();
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JpsTestModulePropertiesImpl createCopy() {
|
||||
return new JpsTestModulePropertiesImpl(this);
|
||||
}
|
||||
}
|
||||
+12
@@ -28,6 +28,7 @@ import org.jetbrains.jps.model.module.JpsDependencyElement;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.model.module.JpsModuleReference;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
import org.jetbrains.jps.model.serialization.JDomSerializationUtil;
|
||||
import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension;
|
||||
import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer;
|
||||
import org.jetbrains.jps.model.serialization.artifact.JpsPackagingElementSerializer;
|
||||
@@ -74,6 +75,17 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension
|
||||
saveJavaModuleExtension(module, rootModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadModuleOptions(@NotNull JpsModule module, @NotNull Element rootElement) {
|
||||
Element testModuleProperties = JDomSerializationUtil.findComponent(rootElement, "TestModuleProperties");
|
||||
if (testModuleProperties != null) {
|
||||
String productionModuleName = testModuleProperties.getAttributeValue("production-module");
|
||||
if (productionModuleName != null) {
|
||||
getService().setTestModuleProperties(module, JpsElementFactory.getInstance().createModuleReference(productionModuleName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<? extends JpsProjectExtensionSerializer> getProjectExtensionSerializers() {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TestModuleProperties" production-module="productionModule" />
|
||||
</module>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/testModule.iml" filepath="$PROJECT_DIR$/testModule.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/productionModule.iml" filepath="$PROJECT_DIR$/productionModule.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.4" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
|
||||
+16
@@ -101,6 +101,22 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
|
||||
assertEquals(getUrl("src"), root.getUrl());
|
||||
}
|
||||
|
||||
public void testTestModuleProperties() {
|
||||
loadProject("/jps/model-serialization/testData/testModuleProperties/testModuleProperties.ipr");
|
||||
List<JpsModule> modules = myProject.getModules();
|
||||
assertEquals(2, modules.size());
|
||||
JpsModule testModule = modules.get(0);
|
||||
assertEquals("testModule", testModule.getName());
|
||||
JpsModule productionModule = modules.get(1);
|
||||
assertEquals("productionModule", productionModule.getName());
|
||||
|
||||
assertNull(JpsJavaExtensionService.getInstance().getTestModuleProperties(productionModule));
|
||||
JpsTestModuleProperties testModuleProperties = JpsJavaExtensionService.getInstance().getTestModuleProperties(testModule);
|
||||
assertNotNull(testModuleProperties);
|
||||
assertEquals("productionModule", testModuleProperties.getProductionModuleReference().getModuleName());
|
||||
assertSame(productionModule, testModuleProperties.getProductionModule());
|
||||
}
|
||||
|
||||
public void testProjectSdkWithoutType() {
|
||||
loadProject("/jps/model-serialization/testData/projectSdkWithoutType/projectSdkWithoutType.ipr");
|
||||
JpsSdkReference<JpsDummyElement> reference = myProject.getSdkReferencesTable().getSdkReference(JpsJavaSdkType.INSTANCE);
|
||||
|
||||
Reference in New Issue
Block a user