Merge remote-tracking branch 'origin/master' appcode/171.981 clion/171.982
authorDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Tue, 15 Nov 2016 11:51:49 +0000 (12:51 +0100)
committerDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Tue, 15 Nov 2016 11:51:49 +0000 (12:51 +0100)
25 files changed:
java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java
java/execution/impl/src/com/intellij/execution/remote/RemoteConfiguration.java
java/java-tests/testSrc/com/intellij/execution/ConfigurationsTest.java
java/java-tests/testSrc/com/intellij/execution/impl/RunConfigurableTest.java
jps/model-serialization/src/com/intellij/openapi/components/PathMacroMap.java
platform/analysis-api/src/com/intellij/codeInspection/InspectionProfile.java
platform/analysis-api/src/com/intellij/codeInspection/ModifiableModel.java
platform/configuration-store-impl/src/StateStorageManagerImpl.kt
platform/configuration-store-impl/src/StreamProviderWrapper.java
platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java
platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java
platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationModule.java
platform/lang-api/src/com/intellij/formatting/Alignment.java
platform/lang-impl/src/com/intellij/execution/configuration/RunConfigurationPathMacroFilter.java
platform/lang-impl/src/com/intellij/formatting/AbstractBlockAlignmentProcessor.java
platform/lang-impl/src/com/intellij/formatting/AlignmentImpl.java
platform/platform-api/src/com/intellij/notification/Notification.java
platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java
platform/projectModel-api/src/com/intellij/openapi/module/ModuleUtilCore.java
platform/projectModel-impl/src/com/intellij/application/options/ReplacePathToMacroMap.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
plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java
plugins/ui-designer/src/com/intellij/uiDesigner/actions/DataBindingWizardAction.java

index bba107fcd03f26a2adfd7768d9ec0d8b5eb5ed6b..248ca7b7c154262ac58fc71f1587ffdbb7e7187d 100644 (file)
@@ -178,6 +178,9 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple
                                                                                         PsiModificationTracker.MODIFICATION_COUNT,
                                                                                         this));
     }
+    catch (ProcessCanceledException e) {
+      throw e;
+    }
     catch (Exception e) {
       LOG.error("an exception during scope without code references calculation", e);
       return null;
@@ -211,7 +214,6 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple
     if (!isServiceEnabledFor(aClass) || searchScope == LibraryScopeCache.getInstance(myProject).getLibrariesOnlyScope()) return null;
 
     try {
-
       Map<VirtualFile, Object[]> candidatesPerFile = ReadAction.compute(() -> {
         if (myProject.isDisposed()) throw new ProcessCanceledException();
         return CachedValuesManager.getCachedValue(aClass, () -> CachedValueProvider.Result.create(
@@ -234,6 +236,9 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple
       }
       return new CompilerHierarchyInfoImpl(candidatesPerFile, aClass, dirtyScope, searchScope, myProject, searchFileType, searchType);
     }
+    catch (ProcessCanceledException e) {
+      throw e;
+    }
     catch (Exception e) {
       LOG.error("an exception during hierarchy calculation", e);
       return null;
index 7054fdb3b2eb97df9035d8f0e3bb0774ae1ec37a..8460555c30bfcfebc18548a448ca3bcc648c657e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 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.
@@ -43,7 +43,6 @@ import java.util.Collection;
 
 public class RemoteConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule>
                                  implements RunConfigurationWithSuppressedDefaultRunAction, RemoteRunProfile {
-
   @Override
   public void writeExternal(final Element element) throws WriteExternalException {
     super.writeExternal(element);
@@ -100,6 +99,4 @@ public class RemoteConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
   public Collection<Module> getValidModules() {
     return getAllModules();
   }
-
-
 }
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 5592ae030f1a9bc4495902207f48bb225e42735d..d00b71835a4e76aade68eba8761923ac57cee8ae 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.
@@ -21,7 +21,6 @@ import com.intellij.execution.configurations.UnknownConfigurationType;
 import com.intellij.execution.junit.JUnitConfigurationType;
 import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.InvalidDataException;
 import com.intellij.openapi.util.JDOMUtil;
 import com.intellij.openapi.util.Trinity;
 import com.intellij.testFramework.LightIdeaTestCase;
@@ -196,7 +195,7 @@ public class RunConfigurableTest extends LightIdeaTestCase {
     assertEquals(expected, myConfigurable.getAvailableDropPosition(direction));
   }
 
-  private static RunManagerImpl createRunManager(Element element) throws InvalidDataException {
+  private static RunManagerImpl createRunManager(Element element) {
     Project project = getProject();
     RunManagerImpl runManager = new RunManagerImpl(project, PropertiesComponent.getInstance(project));
     runManager.initializeConfigurationTypes(new ConfigurationType[]{ApplicationConfigurationType.getInstance(),
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 0cd11db2e06205f963f64f8a522c69cfc619ecc2..d9968db36edea6ee1f955f43fdd5ec4e0db4977c 100644 (file)
@@ -34,8 +34,6 @@ import java.util.List;
  * Date: Dec 7, 2004
  */
 public interface InspectionProfile extends Comparable {
-  void setName(@NotNull String name);
-
   @NotNull
   String getName();
 
@@ -56,8 +54,7 @@ public interface InspectionProfile extends Comparable {
   InspectionProfileEntry getUnwrappedTool(@NotNull String shortName, @NotNull PsiElement element);
 
   /** Returns (unwrapped) inspection */
-  <T extends InspectionProfileEntry>
-  T getUnwrappedTool(@NotNull Key<T> shortNameKey, @NotNull PsiElement element);
+  <T extends InspectionProfileEntry> T getUnwrappedTool(@NotNull Key<T> shortNameKey, @NotNull PsiElement element);
 
   /**
    * Allows a plugin to modify the settings of the inspection tool with the specified ID programmatically, without going through
index fa2619335b41d7c59c1a7a2b2bc6a4d853f1533a..54181b862648d93cb8922d54939177fbbf21aed4 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.intellij.codeInspection;
 
 import com.intellij.codeHighlighting.HighlightDisplayLevel;
 import com.intellij.codeInsight.daemon.HighlightDisplayKey;
-import com.intellij.codeInspection.ex.InspectionToolWrapper;
 import com.intellij.openapi.project.Project;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.search.scope.packageSet.NamedScope;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-/**
- * User: anna
- * Date: 15-Feb-2006
- */
 public interface ModifiableModel extends InspectionProfile {
   void enableTool(@NotNull String inspectionTool, NamedScope namedScope, Project project);
 
   void setErrorLevel(HighlightDisplayKey key, @NotNull HighlightDisplayLevel level, Project project);
 
-  @Override
-  HighlightDisplayLevel getErrorLevel(HighlightDisplayKey inspectionToolKey, PsiElement element);
-
-  @Override
-  boolean isToolEnabled(HighlightDisplayKey key);
-
-  @Override
-  boolean isToolEnabled(@Nullable HighlightDisplayKey key, @Nullable PsiElement element);
-
-  @Override
-  InspectionProfileEntry getUnwrappedTool(@NotNull String shortName, @NotNull PsiElement element);
-
-  @Override
-  InspectionToolWrapper[] getInspectionTools(PsiElement element);
-
   /**
    * @see InspectionProfile#getSingleTool()
    */
index 5e054292a2f55ff40a8ff666dcb9685c3d292402..325f8c27769a47fdf05142748bfabaefac820911 100644 (file)
@@ -60,7 +60,7 @@ open class StateStorageManagerImpl(private val rootTagName: String,
   var streamProvider: StreamProvider?
     get() = streamWrapper
     set (value) {
-      streamWrapper.setStreamProvider(value)
+      streamWrapper.streamProvider = value
     }
 
   // access under storageLock
index 24f0aca09e5fe466295e9fde8ea6bf54dfb8516e..31bc97893348dc682870c70c2a59e8af0fa5ef0a 100644 (file)
@@ -22,6 +22,10 @@ public class StreamProviderWrapper implements StreamProvider {
     return null;
   }
 
+  public StreamProvider getStreamProvider() {
+    return myStreamProvider;
+  }
+
   public void setStreamProvider(@Nullable StreamProvider streamProvider) {
     myStreamProvider = streamProvider;
   }
index 5ab405254a9334edfd94a8ddeb6044f6bd584eed..d7e5aa27bf009682fa7a526f2db0e6075811e025 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 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.
@@ -25,13 +25,13 @@ import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.InvalidDataException;
 import com.intellij.openapi.util.WriteExternalException;
 import com.intellij.util.xmlb.annotations.Property;
+import gnu.trove.THashSet;
 import org.jdom.Element;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.Set;
 
 /**
@@ -68,11 +68,11 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
     myModule.setModule(module);
   }
 
-  protected void readModule(final Element element) throws InvalidDataException {
+  protected void readModule(final Element element) {
     myModule.readExternal(element);
   }
 
-  protected void writeModule(final Element element) throws WriteExternalException {
+  protected void writeModule(final Element element) {
     myModule.writeExternal(element);
   }
 
@@ -99,12 +99,13 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
       RunConfiguration configuration = getFactory().createTemplateConfiguration(getProject());
       configuration.setName(getName());
       configuration.readExternal(element);
-
       return (ModuleBasedConfiguration)configuration;
-    } catch (InvalidDataException e) {
+    }
+    catch (InvalidDataException e) {
       LOG.error(e);
       return null;
-    } catch (WriteExternalException e) {
+    }
+    catch (WriteExternalException e) {
       LOG.error(e);
       return null;
     }
@@ -113,24 +114,22 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
   @Override
   @NotNull
   public Module[] getModules() {
-    return ApplicationManager.getApplication().runReadAction(new Computable<Module[]>() {
-      @Override
-      @SuppressWarnings({"ConstantConditions"})
-      public Module[] compute() {
-        final Module module = getConfigurationModule().getModule();
-        return module == null ? Module.EMPTY_ARRAY : new Module[] {module};
-      }
-    });
+    Module module = ApplicationManager.getApplication().runReadAction((Computable<Module>)() -> getConfigurationModule().getModule());
+    return module == null ? Module.EMPTY_ARRAY : new Module[] {module};
   }
 
   public void restoreOriginalModule(final Module originalModule) {
-    if (originalModule == null) return;
-    final Module[] classModules = getModules();
-    final Set<Module> modules = new HashSet<>();
-    for (Module classModule : classModules) {
+    if (originalModule == null) {
+      return;
+    }
+
+    Set<Module> modules = new THashSet<>();
+    for (Module classModule : getModules()) {
       ModuleUtilCore.collectModulesDependsOn(classModule, modules);
     }
-    if (modules.contains(originalModule)) setModule(originalModule);
+    if (modules.contains(originalModule)) {
+      setModule(originalModule);
+    }
   }
 
   public void onNewConfigurationCreated() {
index adad3dd2de19e7365c1e75f6941aff0cc3b47ffd..fa9e71b0e82e97c6c1f4d5044bb98e4038bcee10 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.
@@ -33,7 +33,6 @@ import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Standard base class for run configuration implementations.
@@ -196,16 +195,15 @@ public abstract class RunConfigurationBase extends UserDataHolderBase implements
   @Override
   public void readExternal(Element element) throws InvalidDataException {
     myLogFiles.clear();
-    for (final Object o : element.getChildren(LOG_FILE)) {
+    for (Element o : element.getChildren(LOG_FILE)) {
       LogFileOptions logFileOptions = new LogFileOptions();
-      logFileOptions.readExternal((Element)o);
+      logFileOptions.readExternal(o);
       myLogFiles.add(logFileOptions);
     }
     myPredefinedLogFiles.clear();
-    final List list = element.getChildren(PREDEFINED_LOG_FILE_ELEMENT);
-    for (Object fileElement : list) {
+    for (Element fileElement : element.getChildren(PREDEFINED_LOG_FILE_ELEMENT)) {
       final PredefinedLogFile logFile = new PredefinedLogFile();
-      logFile.readExternal((Element)fileElement);
+      logFile.readExternal(fileElement);
       myPredefinedLogFiles.add(logFile);
     }
     final Element fileOutputElement = element.getChild(FILE_OUTPUT);
index de230e2e8e0dcacd5992dc56263e7e6b96a49cbd..100aa02ce07712ce07fa521015b35f69280380b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 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.
@@ -55,7 +55,6 @@ public class RunConfigurationModule implements JDOMExternalizable {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
   public void readExternal(@NotNull Element element) {
     List<Element> modules = element.getChildren(ELEMENT);
     if (!modules.isEmpty()) {
@@ -97,7 +96,8 @@ public class RunConfigurationModule implements JDOMExternalizable {
   @Nullable
   @Transient
   public Module getModule() {
-    if (myModuleName != null) { //caching
+    //caching
+    if (myModuleName != null) {
       myModule = findModule(myModuleName);
     }
     if (myModule != null && myModule.isDisposed()) {
@@ -107,18 +107,11 @@ public class RunConfigurationModule implements JDOMExternalizable {
   }
 
   @Nullable
-  public Module findModule(final String moduleName) {
+  public Module findModule(@NotNull String moduleName) {
     if (myProject.isDisposed()) {
       return null;
     }
-
-    return ApplicationManager.getApplication().runReadAction(new Computable<Module>() {
-      @Nullable
-      @Override
-      public Module compute() {
-        return getModuleManager().findModuleByName(moduleName);
-      }
-    });
+    return ApplicationManager.getApplication().runReadAction((Computable<Module>)() -> getModuleManager().findModuleByName(moduleName));
   }
 
   public void setModule(final Module module) {
index 68eb0d6ee900f47ee3faa591adc05ae0f35d04f0..48ad2b4f32edf0a75f84c445b05e9e87c2bd0793 100644 (file)
@@ -22,8 +22,8 @@ import org.jetbrains.annotations.NotNull;
  * alignment object instance from the <code>getAlignment</code> method
  * are aligned with each other.
  *
- * @see com.intellij.formatting.Block#getAlignment()
- * @see com.intellij.formatting.ChildAttributes#getAlignment()
+ * @see Block#getAlignment()
+ * @see ChildAttributes#getAlignment()
  */
 
 public abstract class Alignment {
@@ -36,23 +36,10 @@ public abstract class Alignment {
     myFactory = factory;
   }
 
-  /**
-   * Shorthand for calling {@link #createAlignment(boolean)} with <code>'false'</code>.
-   *
-   * @return      alignment object with default settings
-   */
   public static Alignment createAlignment() {
     return createAlignment(false, Anchor.LEFT);
   }
 
-  /**
-   * Delegates the processing to {@link #createAlignment(boolean, Anchor)} with given <code>'allow backward shift'</code> value
-   * and {@link Anchor#LEFT}.
-   *
-   * @param allowBackwardShift    flag that specifies if former aligned block may be shifted to right in order to align to subsequent
-   *                              aligned block
-   * @return                      alignment object with the given <code>'allow backward shift'</code> setting
-   */
   public static Alignment createAlignment(boolean allowBackwardShift) {
     return createAlignment(allowBackwardShift, Anchor.LEFT);
   }
index e6293c649f2aed9211b52215873c62710b46dd3f..1656d7bcf3019f44eae33ceb0ae56443916360cb 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.
@@ -22,7 +22,7 @@ import org.jdom.Element;
 /**
  * @author yole
  */
-public class RunConfigurationPathMacroFilter extends PathMacroFilter {
+class RunConfigurationPathMacroFilter extends PathMacroFilter {
   @Override
   public boolean skipPathMacros(Attribute attribute) {
     final Element parent = attribute.getParent();
index f3571b6d7c03d5714e3424aaacedd7dfaf412b90..c202510eabbe6c4409de1d769af86f780329f94e 100644 (file)
@@ -20,12 +20,6 @@ import org.jetbrains.annotations.Nullable;
 
 import java.util.Set;
 
-/**
- * Gof Template Method for {@link BlockAlignmentProcessor}.
- * 
- * @author Denis Zhdanov
- * @since 4/29/11 11:52 AM
- */
 public abstract class AbstractBlockAlignmentProcessor implements BlockAlignmentProcessor {
 
   @Override
index 3af772a999e20e5fe40472ebfb05ae2480419514..35b60ee4db4a79a1392720f4ddbd5cfea53470b3 100644 (file)
@@ -33,20 +33,10 @@ public class AlignmentImpl extends Alignment {
   private AlignmentImpl myParentAlignment;
   private ProbablyIncreasingLowerboundAlgorithm<LeafBlockWrapper> myOffsetRespBlocksCalculator;
 
-  /**
-   * Creates new <code>AlignmentImpl</code> object with <code>'false'</code> as <code>'allows backward shift'</code> argument flag.
-   */
   AlignmentImpl() {
     this(false, Anchor.LEFT);
   }
 
-  /**
-   * Creates new <code>AlignmentImpl</code> object with the given <code>'allows backward shift'</code> argument flag.
-   *
-   * @param allowBackwardShift    flag that indicates if it should be possible to shift former aligned block to right
-   *                              in order to align to subsequent aligned block (see {@link Alignment#createAlignment(boolean, Anchor)})
-   * @param anchor                alignment anchor (see {@link Alignment#createAlignment(boolean, Anchor)})
-   */
   AlignmentImpl(boolean allowBackwardShift, @NotNull Anchor anchor) {
     myAllowBackwardShift = allowBackwardShift;
     myAnchor = anchor;
index a8c6bf444724be474022c4af377f79d77c3ae2cd..14ddd5c4eeadc42f3a47735321bb8548589ec9ea 100644 (file)
@@ -263,6 +263,10 @@ public class Notification {
   }
 
   public void expire() {
+    if (myExpired) {
+      return;
+    }
+
     NotificationsManager.getNotificationsManager().expire(this);
     hideBalloon();
     myExpired = true;
index bdce240d96441ec5c14f4967af61957b2c3bccdc..420fb013e6af1aeedf717a66b89535de616152bc 100644 (file)
@@ -265,12 +265,13 @@ public class NotificationsManagerImpl extends NotificationsManager {
       }
       final Balloon balloon = createBalloon((IdeFrame)window, notification, false, false, layoutDataRef,
                                             project != null ? project : ApplicationManager.getApplication());
-      ((BalloonImpl)balloon).traceDispose(true);
 
       if (notification.isExpired()) {
         return null;
       }
 
+      ((BalloonImpl)balloon).traceDispose(true);
+
       layout.add(balloon, layoutDataRef == null ? null : layoutDataRef.get());
       if (layoutDataRef != null && layoutDataRef.get() instanceof BalloonLayoutData) {
         ((BalloonLayoutData)layoutDataRef.get()).project = project;
index f5c18dcab0aa4270fd42df983f4abc2e4cc40daf..d3a82734d39987ed48106bdcfafd7ff65abbcad7 100644 (file)
@@ -157,8 +157,10 @@ public class ModuleUtilCore {
    * @param result resulted set
    */
   public static void collectModulesDependsOn(@NotNull final Module module, @NotNull Set<Module> result) {
-    if (result.contains(module)) return;
-    result.add(module);
+    if (!result.add(module)) {
+      return;
+    }
+
     final ModuleManager moduleManager = ModuleManager.getInstance(module.getProject());
     final List<Module> dependentModules = moduleManager.getModuleDependentModules(module);
     for (final Module dependentModule : dependentModules) {
@@ -169,7 +171,8 @@ public class ModuleUtilCore {
           if (orderEntry.getModule() == module) {
             if (orderEntry.isExported()) {
               collectModulesDependsOn(dependentModule, result);
-            } else {
+            }
+            else {
               result.add(dependentModule);
             }
             break;
index 7ff4ffcd249ab6850bfe84a72325991aba5c4f8f..2e8533179e1dacf9434c88086a39b1d6661fac79 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.
@@ -19,7 +19,6 @@ import com.intellij.openapi.components.PathMacroMap;
 import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.util.ArrayUtil;
-import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.ContainerUtilRt;
 import gnu.trove.TObjectIntHashMap;
@@ -28,7 +27,6 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
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() {
index 7d5fe0b9098eb3db563857562137e924f9630aa6..8dd209be8babd635ed8278456869d7fcc47826c2 100644 (file)
@@ -351,8 +351,7 @@ public class JUnitConfiguration extends JavaTestConfigurationBase {
     final Element patternsElement = element.getChild(PATTERNS_EL_NAME);
     if (patternsElement != null) {
       final LinkedHashSet<String> tests = new LinkedHashSet<>();
-      for (Object o : patternsElement.getChildren(PATTERN_EL_NAME)) {
-        Element patternElement = (Element)o;
+      for (Element patternElement : patternsElement.getChildren(PATTERN_EL_NAME)) {
         tests.add(patternElement.getAttributeValue(TEST_CLASS_ATT_NAME));
       }
       myData.setPatterns(tests);
index b5bbd645b26e938c4d5ffae0b5c7a2704e8dae51..767be0a4192c7b4d8fac764dce59e00d7e3664eb 100644 (file)
@@ -46,7 +46,9 @@ public final class DataBindingWizardAction extends AnAction{
     final Project project;
     final VirtualFile formFile;
     GuiEditor editor = FormEditingUtil.getActiveEditor(e.getDataContext());
-    assert editor != null;
+    if (editor == null) {
+      return;
+    }
     project = editor.getProject();
     formFile = editor.getFile();