fix "IDEA-221944 Deadlock on opening second project" and support preloading for proje...
[idea/community.git] / platform / projectModel-impl / src / com / intellij / openapi / roots / impl / TestModulePropertiesImpl.java
index d4047c346cf7f74d4ec146185975b0a5e7a51543..768834dd29f716b60188ab60a4df517b12b81808 100644 (file)
@@ -1,27 +1,14 @@
-/*
- * 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.
- */
+// 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.
 package com.intellij.openapi.roots.impl;
 
 import com.intellij.openapi.components.PersistentStateComponent;
 import com.intellij.openapi.components.State;
-import com.intellij.openapi.components.Storage;
-import com.intellij.openapi.components.StoragePathMacros;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModulePointer;
 import com.intellij.openapi.module.ModulePointerManager;
+import com.intellij.openapi.roots.ExternalProjectSystemRegistry;
+import com.intellij.openapi.roots.ProjectModelElement;
+import com.intellij.openapi.roots.ProjectModelExternalSource;
 import com.intellij.openapi.roots.TestModuleProperties;
 import com.intellij.util.xmlb.annotations.Attribute;
 import org.jetbrains.annotations.NotNull;
@@ -30,16 +17,14 @@ import org.jetbrains.annotations.Nullable;
 /**
  * @author nik
  */
-@State(
-  name = "TestModuleProperties",
-  storages = @Storage(file = StoragePathMacros.MODULE_FILE)
-)
-public class TestModulePropertiesImpl extends TestModuleProperties implements PersistentStateComponent<TestModulePropertiesImpl.TestModulePropertiesState> {
-  private final ModulePointerManager myModulePointerManager;
+@State(name = "TestModuleProperties")
+class TestModulePropertiesImpl extends TestModuleProperties implements PersistentStateComponent<TestModulePropertiesImpl.TestModulePropertiesState>,
+                                                                       ProjectModelElement {
   private ModulePointer myProductionModulePointer;
+  private final Module myModule;
 
-  public TestModulePropertiesImpl(@NotNull ModulePointerManager modulePointerManager) {
-    myModulePointerManager = modulePointerManager;
+  TestModulePropertiesImpl(@NotNull Module module) {
+    myModule = module;
   }
 
   @Nullable
@@ -56,7 +41,7 @@ public class TestModulePropertiesImpl extends TestModuleProperties implements Pe
 
   @Override
   public void setProductionModuleName(@Nullable String moduleName) {
-    myProductionModulePointer = moduleName != null ? myModulePointerManager.create(moduleName) : null;
+    myProductionModulePointer = moduleName != null ? ModulePointerManager.getInstance(myModule.getProject()).create(moduleName) : null;
   }
 
   @Nullable
@@ -68,10 +53,16 @@ public class TestModulePropertiesImpl extends TestModuleProperties implements Pe
   }
 
   @Override
-  public void loadState(TestModulePropertiesState state) {
+  public void loadState(@NotNull TestModulePropertiesState state) {
     setProductionModuleName(state.moduleName);
   }
 
+  @Nullable
+  @Override
+  public ProjectModelExternalSource getExternalSource() {
+    return ExternalProjectSystemRegistry.getInstance().getExternalSource(myModule);
+  }
+
   public static class TestModulePropertiesState {
     @Attribute("production-module")
     public String moduleName;