move methods from PathMacroManager to PathMacroSubstitutor to avoid misunderstaning
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Mon, 14 Nov 2016 15:42:45 +0000 (16:42 +0100)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Tue, 15 Nov 2016 10:45:41 +0000 (11:45 +0100)
add javadoc to collapsePaths/collapsePathsRecursively

java/java-tests/testSrc/com/intellij/execution/ConfigurationsTest.java
jps/model-serialization/src/com/intellij/openapi/components/PathMacroMap.java
platform/projectModel-impl/src/com/intellij/openapi/components/PathMacroManager.java
platform/projectModel-impl/src/com/intellij/openapi/components/PathMacroSubstitutor.java
platform/projectModel-impl/src/com/intellij/openapi/components/impl/BasePathMacroManager.java

index 61a1e0c14ed9a7ae40377be21ac42136f81a6ac1..b490dde8f147b8fb90164a2598bbec4176b6244a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * 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.
@@ -20,6 +20,8 @@ import com.intellij.execution.application.ApplicationConfiguration;
 import com.intellij.execution.application.ApplicationConfigurationType;
 import com.intellij.execution.configurations.*;
 import com.intellij.execution.executors.DefaultRunExecutor;
+import com.intellij.execution.impl.RunManagerImpl;
+import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
 import com.intellij.execution.junit.*;
 import com.intellij.execution.junit2.configuration.JUnitConfigurable;
 import com.intellij.execution.junit2.configuration.JUnitConfigurationModel;
@@ -27,6 +29,7 @@ import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
 import com.intellij.execution.testframework.SearchForTestsTask;
 import com.intellij.execution.testframework.TestSearchScope;
 import com.intellij.execution.ui.CommonJavaParametersPanel;
+import com.intellij.ide.util.AppPropertiesComponentImpl;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleManager;
 import com.intellij.openapi.options.Configurable;
@@ -37,10 +40,7 @@ import com.intellij.openapi.roots.ContentEntry;
 import com.intellij.openapi.roots.ModuleRootManager;
 import com.intellij.openapi.roots.ModuleRootModificationUtil;
 import com.intellij.openapi.ui.LabeledComponent;
-import com.intellij.openapi.util.Condition;
 import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.WriteExternalException;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.JarFileSystem;
 import com.intellij.openapi.vfs.LocalFileSystem;
@@ -67,6 +67,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.StringTokenizer;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 public class ConfigurationsTest extends BaseConfigurationTestCase {
   private final Assertion CHECK = new Assertion();
 
@@ -253,17 +255,22 @@ public class ConfigurationsTest extends BaseConfigurationTestCase {
     CHECK.singleOccurence(classPath, getFSPath(findFile(MOCK_JUNIT)));
   }
 
-  public void testExternalizeJUnitConfiguration() throws WriteExternalException, InvalidDataException {
-    JUnitConfiguration configuration = createConfiguration(findTestA(getModule1()));
-    Element element = new Element("cfg");
-    configuration.writeExternal(element);
-    JUnitConfiguration newCfg =
-      new JUnitConfiguration(null, myProject, JUnitConfigurationType.getInstance().getConfigurationFactories()[0]);
+  public void testExternalizeJUnitConfiguration() {
+    Module module = getModule1();
+    JUnitConfiguration oldRc = createConfiguration(findTestA(module));
+    oldRc.setWorkingDirectory(module.getModuleFilePath());
+
+    RunManagerImpl runManager = new RunManagerImpl(myProject, new AppPropertiesComponentImpl());
+    Element element = new Element("configuration");
+    new RunnerAndConfigurationSettingsImpl(runManager, oldRc, false).writeExternal(element);
+
+    RunnerAndConfigurationSettingsImpl settings = new RunnerAndConfigurationSettingsImpl(runManager);
+    settings.readExternal(element);
+    JUnitConfiguration newRc = (JUnitConfiguration)settings.getConfiguration();
 
-    newCfg.readExternal(element);
-    checkTestObject(configuration.getPersistentData().TEST_OBJECT, newCfg);
-    assertEquals(Collections.singleton(getModule1()), ContainerUtilRt.newHashSet(newCfg.getModules()));
-    checkClassName(configuration.getPersistentData().getMainClassName(), newCfg);
+    checkTestObject(oldRc.getPersistentData().TEST_OBJECT, newRc);
+    assertThat(newRc.getModules()).containsOnly(module);
+    checkClassName(oldRc.getPersistentData().getMainClassName(), newRc);
   }
 
   public void testTestClassPathWhenRunningConfigurations() throws IOException, ExecutionException {
index ba6b779a3766d2bb4eafeb90bc623e83e136b3f6..bd5c592f384e4cd0f56c8e5cfd74ba728a65f3f6 100644 (file)
@@ -31,6 +31,12 @@ public abstract class PathMacroMap {
 
   public abstract String substitute(String text, boolean caseSensitive);
 
+  public final String substitute(String text, boolean caseSensitive, boolean recursively) {
+    return recursively
+           ? substituteRecursively(text, caseSensitive)
+           : substitute(text, caseSensitive);
+  }
+
   public final void substitute(@NotNull Element e, boolean caseSensitive) {
     substitute(e, caseSensitive, false);
   }
index 659f345fbd18a812f31ffc1bacf90f7fb900facf..8be21446b96c6a9ceee0326ad373f0a53b49987e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * 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.
  */
 package com.intellij.openapi.components;
 
-import org.jdom.Element;
 import org.jetbrains.annotations.NotNull;
 
 public abstract class PathMacroManager implements PathMacroSubstitutor {
+  @NotNull
   public static PathMacroManager getInstance(@NotNull ComponentManager componentManager) {
-    final PathMacroManager component = (PathMacroManager)componentManager.getPicoContainer().getComponentInstance(PathMacroManager.class);
-    assert component != null;
-    return component;
+    return (PathMacroManager)componentManager.getPicoContainer().getComponentInstance(PathMacroManager.class);
   }
 
-  public abstract void collapsePathsRecursively(@NotNull Element element);
-
-  @NotNull
-  public abstract String collapsePathsRecursively(@NotNull String text);
-
   @NotNull
   public abstract TrackingPathMacroSubstitutor createTrackingSubstitutor();
 }
index bcffa0bc34eea7203a9d56dc6a07eb7a94369afb..9bb789a09c946d4e6c649ab7c348f0d946bfc20a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * 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.
@@ -17,14 +17,38 @@ package com.intellij.openapi.components;
 
 import org.jdom.Element;
 import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 
 public interface PathMacroSubstitutor {
   String expandPath(String path);
 
-  String collapsePath(@Nullable String path);
+  @NotNull
+  default String collapsePath(@NotNull String text) {
+    return collapsePath(text, false);
+  }
+
+  String collapsePath(@NotNull String text, boolean recursively);
 
   void expandPaths(@NotNull Element element);
 
-  void collapsePaths(@NotNull Element element);
+  /**
+   * Path will be collapsed only if the entire content of an attribute (tag text) is a path, if a path is a substring of an attribute value it won't be collapsed.
+   * @param element
+   */
+  default void collapsePaths(@NotNull Element element) {
+    collapsePaths(element, false);
+  }
+
+  /**
+   * Path will be collapsed even if a path is a substring of an attribute value.
+   * @param element
+   */
+  default void collapsePathsRecursively(@NotNull Element element) {
+    collapsePaths(element, true);
+  }
+
+  void collapsePaths(@NotNull Element element, boolean recursively);
+
+  default String collapsePathsRecursively(@NotNull String string) {
+    return collapsePath(string, true);
+  }
 }
index 36d1a2ccfefffb2459eaab883174253d597e3026..58f18c39afc255ae6600a1c15bff3940259de736 100644 (file)
@@ -131,20 +131,10 @@ public class BasePathMacroManager extends PathMacroManager {
     return getExpandMacroMap().substitute(path, SystemInfo.isFileSystemCaseSensitive);
   }
 
-  @Override
-  public String collapsePath(@Nullable String path) {
-    return getReplacePathMap().substitute(path, SystemInfo.isFileSystemCaseSensitive);
-  }
-
-  @Override
-  public void collapsePathsRecursively(@NotNull final Element element) {
-    getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive, true);
-  }
-
   @NotNull
   @Override
-  public String collapsePathsRecursively(@NotNull final String text) {
-    return getReplacePathMap().substituteRecursively(text, SystemInfo.isFileSystemCaseSensitive);
+  public String collapsePath(@NotNull final String text, boolean recursively) {
+    return getReplacePathMap().substitute(text, SystemInfo.isFileSystemCaseSensitive, recursively);
   }
 
   @Override
@@ -153,8 +143,8 @@ public class BasePathMacroManager extends PathMacroManager {
   }
 
   @Override
-  public void collapsePaths(@NotNull final Element element) {
-    getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive);
+  public void collapsePaths(@NotNull final Element element, boolean recursively) {
+    getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive, recursively);
   }
 
   @NotNull
@@ -185,8 +175,8 @@ public class BasePathMacroManager extends PathMacroManager {
     }
 
     @Override
-    public String collapsePath(@Nullable String path) {
-      return getReplacePathMap().substitute(path, SystemInfo.isFileSystemCaseSensitive);
+    public String collapsePath(@Nullable String path, boolean recursively) {
+      return getReplacePathMap().substitute(path, SystemInfo.isFileSystemCaseSensitive, recursively);
     }
 
     @Override
@@ -195,8 +185,8 @@ public class BasePathMacroManager extends PathMacroManager {
     }
 
     @Override
-    public void collapsePaths(@NotNull final Element element) {
-      getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive, false, Holder.FILTER);
+    public void collapsePaths(@NotNull final Element element, boolean recursively) {
+      getReplacePathMap().substitute(element, SystemInfo.isFileSystemCaseSensitive, recursively, Holder.FILTER);
     }
 
     public int hashCode() {