768834dd29f716b60188ab60a4df517b12b81808
[idea/community.git] / platform / projectModel-impl / src / com / intellij / openapi / roots / impl / TestModulePropertiesImpl.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.roots.impl;
3
4 import com.intellij.openapi.components.PersistentStateComponent;
5 import com.intellij.openapi.components.State;
6 import com.intellij.openapi.module.Module;
7 import com.intellij.openapi.module.ModulePointer;
8 import com.intellij.openapi.module.ModulePointerManager;
9 import com.intellij.openapi.roots.ExternalProjectSystemRegistry;
10 import com.intellij.openapi.roots.ProjectModelElement;
11 import com.intellij.openapi.roots.ProjectModelExternalSource;
12 import com.intellij.openapi.roots.TestModuleProperties;
13 import com.intellij.util.xmlb.annotations.Attribute;
14 import org.jetbrains.annotations.NotNull;
15 import org.jetbrains.annotations.Nullable;
16
17 /**
18  * @author nik
19  */
20 @State(name = "TestModuleProperties")
21 class TestModulePropertiesImpl extends TestModuleProperties implements PersistentStateComponent<TestModulePropertiesImpl.TestModulePropertiesState>,
22                                                                        ProjectModelElement {
23   private ModulePointer myProductionModulePointer;
24   private final Module myModule;
25
26   TestModulePropertiesImpl(@NotNull Module module) {
27     myModule = module;
28   }
29
30   @Nullable
31   @Override
32   public String getProductionModuleName() {
33     return myProductionModulePointer != null ? myProductionModulePointer.getModuleName() : null;
34   }
35
36   @Nullable
37   @Override
38   public Module getProductionModule() {
39     return myProductionModulePointer != null ? myProductionModulePointer.getModule() : null;
40   }
41
42   @Override
43   public void setProductionModuleName(@Nullable String moduleName) {
44     myProductionModulePointer = moduleName != null ? ModulePointerManager.getInstance(myModule.getProject()).create(moduleName) : null;
45   }
46
47   @Nullable
48   @Override
49   public TestModulePropertiesState getState() {
50     TestModulePropertiesState state = new TestModulePropertiesState();
51     state.moduleName = getProductionModuleName();
52     return state;
53   }
54
55   @Override
56   public void loadState(@NotNull TestModulePropertiesState state) {
57     setProductionModuleName(state.moduleName);
58   }
59
60   @Nullable
61   @Override
62   public ProjectModelExternalSource getExternalSource() {
63     return ExternalProjectSystemRegistry.getInstance().getExternalSource(myModule);
64   }
65
66   public static class TestModulePropertiesState {
67     @Attribute("production-module")
68     public String moduleName;
69   }
70 }