50b05722234246c6f4383ada1e7aa715b1113de9
[idea/community.git] / platform / projectModel-impl / src / com / intellij / openapi / roots / impl / TestModulePropertiesImpl.java
1 // Copyright 2000-2018 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 public class TestModulePropertiesImpl extends TestModuleProperties implements PersistentStateComponent<TestModulePropertiesImpl.TestModulePropertiesState>,
22                                                                               ProjectModelElement {
23   private final ModulePointerManager myModulePointerManager;
24   private ModulePointer myProductionModulePointer;
25   private final Module myModule;
26
27   public TestModulePropertiesImpl(@NotNull Module module, @NotNull ModulePointerManager modulePointerManager) {
28     myModule = module;
29     myModulePointerManager = modulePointerManager;
30   }
31
32   @Nullable
33   @Override
34   public String getProductionModuleName() {
35     return myProductionModulePointer != null ? myProductionModulePointer.getModuleName() : null;
36   }
37
38   @Nullable
39   @Override
40   public Module getProductionModule() {
41     return myProductionModulePointer != null ? myProductionModulePointer.getModule() : null;
42   }
43
44   @Override
45   public void setProductionModuleName(@Nullable String moduleName) {
46     myProductionModulePointer = moduleName != null ? myModulePointerManager.create(moduleName) : null;
47   }
48
49   @Nullable
50   @Override
51   public TestModulePropertiesState getState() {
52     TestModulePropertiesState state = new TestModulePropertiesState();
53     state.moduleName = getProductionModuleName();
54     return state;
55   }
56
57   @Override
58   public void loadState(@NotNull TestModulePropertiesState state) {
59     setProductionModuleName(state.moduleName);
60   }
61
62   @Nullable
63   @Override
64   public ProjectModelExternalSource getExternalSource() {
65     return ExternalProjectSystemRegistry.getInstance().getExternalSource(myModule);
66   }
67
68   public static class TestModulePropertiesState {
69     @Attribute("production-module")
70     public String moduleName;
71   }
72 }