Merge remote-tracking branch 'origin/master'
authorDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Mon, 11 Aug 2014 17:38:57 +0000 (19:38 +0200)
committerDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Mon, 11 Aug 2014 17:38:57 +0000 (19:38 +0200)
111 files changed:
java/debugger/impl/src/com/intellij/debugger/DefaultDebugUIEnvironment.java
java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTemplateList.java
java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java
java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNodeBase.java
java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectTypesList.java
java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java
java/java-impl/src/com/intellij/codeInsight/completion/MethodReferenceCompletionProvider.java
java/java-impl/src/com/intellij/codeInspection/javaDoc/JavaDocLocalInspection.java
java/java-impl/src/com/intellij/javadoc/JavadocGenerationPanel.java
java/java-impl/src/com/intellij/psi/filters/FilterUtil.java
java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java
java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java
java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiKeywordImpl.java
java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiLiteralExpressionImpl.java
java/java-tests/testData/codeInsight/completion/smartType/ConstructorRef-out.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/ConstructorRef.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after1.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/after2.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertFalse.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/afterAssertTrue.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before1.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/before2.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertFalse.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAll/beforeAssertTrue.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/after1.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/fixAllAnnotator/before1.java
java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java
java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java
java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/I18nizeTest.java
java/jdkAnnotations/java/awt/annotations.xml
java/jdkAnnotations/java/util/annotations.xml
java/jdkAnnotations/java/util/concurrent/atomic/annotations.xml [new file with mode: 0644]
platform/core-api/src/com/intellij/concurrency/JobScheduler.java
platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java
platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java
platform/core-api/src/com/intellij/psi/PsiWalkingState.java
platform/core-api/src/com/intellij/psi/ReferenceRange.java
platform/core-impl/src/com/intellij/core/CoreApplicationEnvironment.java
platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationUtil.java
platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnActionEvent.java
platform/lang-api/src/com/intellij/execution/ExecutionManager.java
platform/lang-api/src/com/intellij/execution/ExecutorRegistry.java
platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
platform/lang-api/src/com/intellij/execution/ui/RunContentDescriptor.java
platform/lang-api/src/com/intellij/execution/ui/RunContentManager.java
platform/lang-api/src/com/intellij/execution/ui/layout/ViewContext.java
platform/lang-api/src/com/intellij/openapi/actionSystem/LangDataKeys.java
platform/lang-impl/src/com/intellij/application/options/editor/EditorTabsConfigurable.form
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HectorComponent.java
platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java
platform/lang-impl/src/com/intellij/execution/ExecutorRegistryImpl.java
platform/lang-impl/src/com/intellij/execution/actions/StopAction.java
platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java
platform/lang-impl/src/com/intellij/execution/runners/FakeRerunAction.java
platform/lang-impl/src/com/intellij/execution/runners/RerunTestsAction.java
platform/lang-impl/src/com/intellij/execution/runners/RestartAction.java
platform/lang-impl/src/com/intellij/execution/runners/RunContentBuilder.java
platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java
platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java
platform/lang-impl/src/com/intellij/ide/util/MemberChooser.java
platform/lang-impl/src/com/intellij/tools/BaseToolManager.java
platform/lang-impl/src/com/intellij/ui/DuplicateNodeRenderer.java
platform/platform-api/src/com/intellij/openapi/ui/popup/ListItemDescriptorAdapter.java [new file with mode: 0644]
platform/platform-api/src/com/intellij/ui/tabs/impl/JBEditorTabs.java
platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java
platform/platform-impl/src/com/intellij/ide/customize/CustomizeKeyboardSchemeStepPanel.java
platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java
platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java
platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorMarkupModel.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java
platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileTextFieldImpl.java
platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsTree.java
platform/platform-impl/src/com/intellij/openapi/progress/impl/ProgressManagerImpl.java
platform/platform-impl/src/com/intellij/ui/popup/list/PopupListElementRenderer.java
platform/platform-resources-en/src/messages/ApplicationBundle.properties
platform/platform-resources-en/src/messages/ExecutionBundle.properties
platform/platform-resources-en/src/messages/InspectionsBundle.properties
platform/platform-resources/src/idea/LangActions.xml
platform/platform-tests/testSrc/com/intellij/history/integration/ui/LocalHistoryActionsTest.java
platform/platform-tests/testSrc/com/intellij/ui/tabs/impl/JBTabsDemo.java
platform/structuralsearch/source/com/intellij/structuralsearch/StructuralSearchProfileBase.java
platform/structuralsearch/testSource/com/intellij/structuralsearch/StructuralSearchTest.java
platform/testFramework/src/com/intellij/testFramework/ParsingTestCase.java
platform/util/src/com/intellij/openapi/util/registry/Registry.java
platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java
platform/util/src/com/intellij/util/ReflectionUtil.java
platform/util/src/com/intellij/util/containers/TransferToEDTQueue.java
platform/util/src/com/intellij/util/io/IntToIntBtree.java
platform/util/src/com/intellij/util/io/PagedFileStorage.java
platform/util/src/com/intellij/util/io/RandomAccessDataFile.java
platform/util/src/com/intellij/util/text/StringSearcher.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesFragmentedDiffPanel.java
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java
plugins/svn4idea/testSource/org/jetbrains/idea/SvnTestCase.java
plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnAnnotationIsClosedTest.java
python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java
python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java
python/testData/addImport/localFromImport.after.py
python/testData/addImport/localImport.after.py
python/testData/addImport/localImportInlineBranch.after.py [new file with mode: 0644]
python/testData/addImport/localImportInlineBranch.py [new file with mode: 0644]
python/testData/addImport/localImportInlineFunctionBody.after.py [new file with mode: 0644]
python/testData/addImport/localImportInlineFunctionBody.py [new file with mode: 0644]
python/testSrc/com/jetbrains/python/PyAddImportTest.java

index 27dbc15402cc414574b813ada31647f51db588ab..f3ebea41ee74cb2c114548f4deb376c064d1f711 100644 (file)
@@ -94,7 +94,7 @@ public class DefaultDebugUIEnvironment implements DebugUIEnvironment {
   @Override
   public void initActions(RunContentDescriptor content, DefaultActionGroup actionGroup) {
     Executor executor = myExecutionEnvironment.getExecutor();
-    RestartAction restartAction = new RestartAction(executor, content, myExecutionEnvironment);
+    RestartAction restartAction = new RestartAction(content, myExecutionEnvironment);
     actionGroup.add(restartAction, Constraints.FIRST);
     restartAction.registerShortcut(content.getComponent());
 
index 57918b1843d153c9c88c55c544cc8712ef5be56f..be586661f0d35b5d7739ab3e9ddb8d216974af2d 100644 (file)
@@ -17,7 +17,7 @@ package com.intellij.ide.projectWizard;
 
 import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.ui.popup.ListItemDescriptor;
+import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Condition;
 import com.intellij.openapi.util.IconLoader;
@@ -57,35 +57,18 @@ public class ProjectTemplateList extends JPanel {
     super(new BorderLayout());
     add(myPanel, BorderLayout.CENTER);
 
-    GroupedItemsListRenderer renderer = new GroupedItemsListRenderer(new ListItemDescriptor<ProjectTemplate>() {
+    GroupedItemsListRenderer renderer = new GroupedItemsListRenderer(new ListItemDescriptorAdapter<ProjectTemplate>() {
       @Nullable
       @Override
       public String getTextFor(ProjectTemplate value) {
         return value.getName();
       }
 
-      @Nullable
-      @Override
-      public String getTooltipFor(ProjectTemplate value) {
-        return null;
-      }
-
       @Nullable
       @Override
       public Icon getIconFor(ProjectTemplate value) {
         return value.getIcon();
       }
-
-      @Override
-      public boolean hasSeparatorAboveOf(ProjectTemplate value) {
-        return false;
-      }
-
-      @Nullable
-      @Override
-      public String getCaptionAboveOf(ProjectTemplate value) {
-        return null;
-      }
     }) {
 
       @Override
index 8fca04c7aa69de9f4d289c22b3460c691fc0997f..10e11f74077fafaa79192ad46565a5203ca5149f 100644 (file)
@@ -42,7 +42,7 @@ import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
 import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
 import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.ui.popup.ListItemDescriptor;
+import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Condition;
 import com.intellij.openapi.util.Disposer;
@@ -143,7 +143,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements SettingsStep, D
         updateSelection();
       }
     });
-    myProjectTypeList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptor<TemplatesGroup>() {
+    myProjectTypeList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptorAdapter<TemplatesGroup>() {
       @Nullable
       @Override
       public String getTextFor(TemplatesGroup value) {
@@ -171,12 +171,6 @@ public class ProjectTypeStep extends ModuleWizardStep implements SettingsStep, D
         return !Comparing.equal(upper.getParentGroup(), value.getParentGroup()) &&
                !Comparing.equal(upper.getName(), value.getParentGroup());
       }
-
-      @Nullable
-      @Override
-      public String getCaptionAboveOf(TemplatesGroup value) {
-        return null;
-      }
     }) {
       @Override
       protected JComponent createItemComponent() {
index 72e793e539034e1b6ad9f0e0b054f9383eeae222..2fee50a4301b9650d8240318be89974615e2d986 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2014 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.
+ */
 package com.intellij.ide.util.newProjectWizard;
 
 import com.intellij.framework.FrameworkOrGroup;
@@ -47,7 +62,7 @@ public abstract class FrameworkSupportNodeBase<T extends FrameworkOrGroup> exten
       }
     });
     for (FrameworkSupportNodeBase node : nodes) {
-      sortByName(node.children, null);
+      sortByName((List)node.children, null);
     }
   }
 
@@ -68,7 +83,7 @@ public abstract class FrameworkSupportNodeBase<T extends FrameworkOrGroup> exten
 
   @NotNull
   public List<FrameworkSupportNodeBase> getChildren() {
-    return children != null ? children : Collections.<FrameworkSupportNodeBase>emptyList();
+    return children != null ? (List)children : Collections.<FrameworkSupportNodeBase>emptyList();
   }
 
   public FrameworkSupportNodeBase getParentNode() {
index 2872e0deff50c8537249f6e354c2efb77332973e..7a502443fcdb9d3c820f458851092aa53d1aa362 100644 (file)
@@ -23,7 +23,7 @@ import com.intellij.openapi.actionSystem.CustomShortcutSet;
 import com.intellij.openapi.progress.ProgressIndicator;
 import com.intellij.openapi.progress.ProgressManager;
 import com.intellij.openapi.progress.Task;
-import com.intellij.openapi.ui.popup.ListItemDescriptor;
+import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.platform.ProjectTemplate;
@@ -114,19 +114,13 @@ public class ProjectTypesList implements Disposable {
       }
     });
 
-    myList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptor() {
+    myList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptorAdapter() {
       @Nullable
       @Override
       public String getTextFor(Object value) {
         return ((TemplateItem)value).getName();
       }
 
-      @Nullable
-      @Override
-      public String getTooltipFor(Object value) {
-        return null;
-      }
-
       @Nullable
       @Override
       public Icon getIconFor(Object value) {
index 29906bbde605894a9316a3d81c964eb00b21bc64..c0f82668f74af05430936a4194c469da3e3f8a0d 100644 (file)
@@ -39,7 +39,11 @@ public class JavaMethodCallElement extends LookupItem<PsiMethod> implements Type
   private boolean myMayNeedExplicitTypeParameters;
 
   public JavaMethodCallElement(@NotNull PsiMethod method) {
-    super(method, method.getName());
+    this(method, method.getName());
+  }
+
+  public JavaMethodCallElement(@NotNull PsiMethod method, String methodName) {
+    super(method, methodName);
     myMethod = method;
     myHelper = null;
     myContainingClass = method.getContainingClass();
index e83f0ef38c3c63bd8437554440a6ea5eaf5e3abf..494ed110b254319e74bea0fff24320fa0807bbcd 100644 (file)
@@ -68,7 +68,7 @@ public class MethodReferenceCompletionProvider extends CompletionProvider<Comple
                   final PsiElement resolve = referenceExpression.resolve();
                   if (resolve != null && PsiEquivalenceUtil.areElementsEquivalent(element, resolve) && 
                       PsiMethodReferenceUtil.checkMethodReferenceContext(referenceExpression, resolve, functionalType) == null) {
-                    result.addElement(new JavaMethodReferenceElement((PsiMethod)element, refPlace, referenceExpression));
+                    result.addElement(new JavaMethodReferenceElement((PsiMethod)element, refPlace));
                   }
                 }
                 finally {
@@ -80,19 +80,20 @@ public class MethodReferenceCompletionProvider extends CompletionProvider<Comple
             }
 
             private PsiMethodReferenceExpression createMethodReferenceExpression(PsiMethod method) {
+              PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(method.getProject());
               if (refPlace instanceof PsiMethodReferenceExpression) {
                 final PsiMethodReferenceExpression referenceExpression = (PsiMethodReferenceExpression)refPlace.copy();
                 final PsiElement referenceNameElement = referenceExpression.getReferenceNameElement();
                 LOG.assertTrue(referenceNameElement != null, referenceExpression);
-                referenceNameElement.replace(JavaPsiFacade.getElementFactory(method.getProject()).createIdentifier(method.getName()));
+                referenceNameElement.replace(method.isConstructor() ? elementFactory.createKeyword("new") : elementFactory.createIdentifier(method.getName()));
                 return referenceExpression;
               }
               else if (method.hasModifierProperty(PsiModifier.STATIC)) {
                 final PsiClass aClass = method.getContainingClass();
                 LOG.assertTrue(aClass != null);
                 final String qualifiedName = aClass.getQualifiedName();
-                return (PsiMethodReferenceExpression)JavaPsiFacade.getElementFactory(method.getProject()).createExpressionFromText(
-                  qualifiedName + "::" + method.getName(), refPlace);
+                return (PsiMethodReferenceExpression)elementFactory.createExpressionFromText(
+                  qualifiedName + "::" + (method.isConstructor() ? "new" : method.getName()), refPlace);
               }
               else {
                 return null;
@@ -113,13 +114,11 @@ public class MethodReferenceCompletionProvider extends CompletionProvider<Comple
   private static class JavaMethodReferenceElement extends JavaMethodCallElement {
     private final PsiMethod myMethod;
     private final PsiElement myRefPlace;
-    private PsiMethodReferenceExpression myReferenceExpression;
 
-    public JavaMethodReferenceElement(PsiMethod method, PsiElement refPlace, PsiMethodReferenceExpression referenceExpression) {
-      super(method);
+    public JavaMethodReferenceElement(PsiMethod method, PsiElement refPlace) {
+      super(method, method.isConstructor() ? "new" : method.getName());
       myMethod = method;
       myRefPlace = refPlace;
-      myReferenceExpression = referenceExpression;
     }
 
     @Override
index ba5b40120a3207b9bdcf31ace5ec6473ac623d85..0cf9bbbbd255b14fe2aa9e243ca6eb0782f41d67 100644 (file)
@@ -100,7 +100,7 @@ public class JavaDocLocalInspection extends JavaDocLocalInspectionBase {
         InspectionsBundle.message("inspection.scope.for.title"), true),
                                                          BorderFactory.createEmptyBorder(0, 3, 3, 3)));
 
-      final Hashtable<Integer, JLabel> sliderLabels = new Hashtable<Integer, JLabel>();
+      final Hashtable<Integer, JComponent> sliderLabels = new Hashtable<Integer, JComponent>();
       for (int i = 0; i < modifiers.length; i++) {
         sliderLabels.put(i + 1, new JLabel(modifiers[i]));
       }
index 5cc096016683dbcdadce150e33d92aa07591c1df..d15ce58041707501dee5583c0df082421eb4a503 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -69,7 +69,7 @@ final class JavadocGenerationPanel extends JPanel {
    );
 
     //noinspection UseOfObsoleteCollectionType
-    Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
+    Hashtable<Integer, JComponent> labelTable = new Hashtable<Integer, JComponent>();
     labelTable.put(new Integer(1), new JLabel(PsiKeyword.PUBLIC));
     labelTable.put(new Integer(2), new JLabel(PsiKeyword.PROTECTED));
     labelTable.put(new Integer(3), new JLabel(PsiKeyword.PACKAGE));
index 89033fae439f8c4393b553c3d007fa05ff804a7f..061e0bf1891651ec32935d040a99ec590b63d6bc 100644 (file)
@@ -40,6 +40,12 @@ public class FilterUtil{
       return JavaPsiFacade.getInstance(element.getProject()).getElementFactory().createType((PsiClass)element);
     }
     if(element instanceof PsiMethod){
+      if (((PsiMethod)element).isConstructor()) {
+        final PsiClass containingClass = ((PsiMethod)element).getContainingClass();
+        if (containingClass != null) {
+          return JavaPsiFacade.getInstance(element.getProject()).getElementFactory().createType(containingClass);
+        }
+      }
       return ((PsiMethod)element).getReturnType();
     }
     if(element instanceof PsiVariable){
index b9d8c0bfd30da9f4d24b6332d7d2f8377ce106fc..49064514be38c9531eee3668686f69bc8b9d9617 100644 (file)
@@ -537,9 +537,10 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
       PsiClass[] classes = ((PsiClassOwner)element).getClasses();
       ArrayList<PsiClass> buffer = new ArrayList<PsiClass>();
       for (final PsiClass aClass : classes) {
-        if (!(aClass instanceof SyntheticElement)) {
-          buffer.add(aClass);
+        if (isSynthetic(aClass)) {
+          return null;
         }
+        buffer.add(aClass);
       }
       return buffer.toArray(new PsiClass[buffer.size()]);
     }
index de5efa573d8a3b1e938aa973bcd8ae3fa8cd4b82..64afbfa17e84473ae311001e94ab7d23c196f8ee 100644 (file)
@@ -27,6 +27,7 @@ import com.intellij.refactoring.util.RefactoringUtil;
 import com.intellij.refactoring.util.javadoc.MethodJavaDocHelper;
 import com.intellij.usageView.UsageInfo;
 import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.containers.MultiMap;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -41,6 +42,20 @@ public class MakeMethodStaticProcessor extends MakeMethodOrClassStaticProcessor<
     super(project, method, settings);
   }
 
+  @Override
+  protected MultiMap<PsiElement, String> getConflictDescriptions(UsageInfo[] usages) {
+    MultiMap<PsiElement, String> descriptions = super.getConflictDescriptions(usages);
+    if (mySettings.isMakeClassParameter()) {
+      for (UsageInfo usage : usages) {
+        PsiElement element = usage.getElement();
+        if (element instanceof PsiMethodReferenceExpression) {
+          descriptions.putValue(element, "Method reference will be corrupted");
+        }
+      }
+    }
+    return descriptions;
+  }
+
   protected void changeSelfUsage(SelfUsageInfo usageInfo) throws IncorrectOperationException {
     PsiElement parent = usageInfo.getElement().getParent();
     LOG.assertTrue(parent instanceof PsiMethodCallExpression);
index aba5bbc852d2c5c20ae11f1e59a853dc038f15a0..782df40b80b4bca27245ddc4296b56d118fc8cd3 100644 (file)
@@ -837,11 +837,14 @@ public class InferenceSession {
       final Set<ConstraintFormula> subset = buildSubset(additionalConstraints);
 
       //collect all input variables of selection 
-      final Set<InferenceVariable> varsToResolve = new HashSet<InferenceVariable>();
+      final Set<InferenceVariable> varsToResolve = new LinkedHashSet<InferenceVariable>();
       for (ConstraintFormula formula : subset) {
         if (formula instanceof InputOutputConstraintFormula) {
           final Set<InferenceVariable> inputVariables = ((InputOutputConstraintFormula)formula).getInputVariables(this);
           if (inputVariables != null) {
+            for (InferenceVariable inputVariable : inputVariables) {
+              varsToResolve.addAll(inputVariable.getDependencies(this));
+            }
             varsToResolve.addAll(inputVariables);
           }
         }
index f39a88e8b35c87a3f6dea79e5c98e728d37d7d82..cdc2fa881c0b3474e88ccb4740e056879cae4da7 100644 (file)
@@ -25,6 +25,7 @@ import com.intellij.psi.tree.IElementType;
 import org.jetbrains.annotations.NotNull;
 
 import java.lang.reflect.Field;
+import java.util.Locale;
 
 public class PsiKeywordImpl extends LeafPsiElement implements PsiKeyword, PsiJavaToken {
   public PsiKeywordImpl(@NotNull IElementType type, CharSequence text) {
@@ -52,7 +53,7 @@ public class PsiKeywordImpl extends LeafPsiElement implements PsiKeyword, PsiJav
 
   static {
     for(Field field: PsiKeyword.class.getFields()) {
-      CharTableImpl.staticIntern(field.getName().toLowerCase());
+      CharTableImpl.staticIntern(field.getName().toLowerCase(Locale.ENGLISH));
     }
   }
 }
index e5892be2fb4d0b367357fe358cbe5d7051f4b15c..ce38729027d9272c7c2f0672892edae47a2319ba 100644 (file)
@@ -31,6 +31,8 @@ import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.Locale;
+
 public class PsiLiteralExpressionImpl
        extends ExpressionPsiElement
        implements PsiLiteralExpression, PsiLanguageInjectionHost, ContributedReferenceHost {
@@ -93,7 +95,7 @@ public class PsiLiteralExpressionImpl
   @Override
   public Object getValue() {
     final IElementType type = getLiteralElementType();
-    String text = NUMERIC_LITERALS.contains(type) ? getCanonicalText().toLowerCase() : getCanonicalText();
+    String text = NUMERIC_LITERALS.contains(type) ? getCanonicalText().toLowerCase(Locale.ENGLISH) : getCanonicalText();
     final int textLength = text.length();
 
     if (type == JavaTokenType.INTEGER_LITERAL) {
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorRef-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorRef-out.java
new file mode 100644 (file)
index 0000000..19decec
--- /dev/null
@@ -0,0 +1,14 @@
+@FunctionalInterface
+interface Foo9 {
+  Bar test(int p);
+}
+
+class Bar {
+  public Bar(int p) {}
+}
+
+class Test88 {
+  void foo(Foo9 foo) {
+    foo(Bar::new<caret>);
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConstructorRef.java b/java/java-tests/testData/codeInsight/completion/smartType/ConstructorRef.java
new file mode 100644 (file)
index 0000000..7f7af00
--- /dev/null
@@ -0,0 +1,14 @@
+@FunctionalInterface
+interface Foo9 {
+  Bar test(int p);
+}
+
+class Bar {
+  public Bar(int p) {}
+}
+
+class Test88 {
+  void foo(Foo9 foo) {
+    foo(Bar::<caret>);
+  }
+}
\ No newline at end of file
index f90b3db33828a6f4cd87eed1489567a707ed6f95..a144d82ac59cf938988ca1c1ad03077cc55345bb 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo() {
     int k = 0;
index 877810ea9adef607553fee03ce2447a2bf7266f5..a43c160b6d38b7e6fcff98a3beb5fc6018c76edf 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo1() {
     int k = 0;
index 5aba2e1bc320fdc15e78d927419412a253936e1b..b16797331be1c9aba292594b2176f62c7c7c8dfe 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo2() {
     int k = 0;
index b251f0387f29bcbd6dd1df4bb02debf1f89641f1..a5ded0b7ba07291b7725b0ae4d9c8b6d98aa913f 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo2() {
     int k = 0;
index b012f43a1c525a58f188334080058909587b04ea..698897914e67f1cdc0606baab2d4d2660028d46c 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo() {
     int k = 0;
index e7d9398ae3e81621994b20c0f7726f2a3e7dbc36..768ea463ff1c4bf03796bbf319a38057c1204dd3 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo1() {
     int k = 0;
index 8ddc67b7ac1e84fd38285f7e2626baa88a812389..49786029f303e67375c30ffe0d82a27974756d29 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo2() {
     int k = 0;
index 98611528fce539e68682c59c334e9d2cb59879cd..4aa5316be779249d64b06ce04ef75dfc94f28f5a 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Constant conditions & exceptions' problems" "true"
+// "Fix all 'Constant conditions & exceptions' problems in file" "true"
 public class Test {
   void foo2() {
     int k = 0;
index 1a0aba5d40ef7e3d70d38893c37bf0093a64c6e1..1297d5d7fac514f1236a8ea3f76cfc8a322f1229 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Annotator' problems" "true"
+// "Fix all 'Annotator' problems in file" "true"
 public class Test {
   void fooF() {
   }
index 8006731dbe32c24aa5bdd3e3001bbafd853fe698..8805559ebe8e64383d0e06592ff8153adccc0039 100644 (file)
@@ -1,4 +1,4 @@
-// "Fix all 'Annotator' problems" "true"
+// "Fix all 'Annotator' problems in file" "true"
 public class Test {
   void f<caret>oo() {
   }
index 8aee494012cb4005a659c87bd3de46ac1d469c44..d98f0a68b72bfce0c2ada35f9a1c6dff4d7ff70e 100644 (file)
@@ -81,6 +81,10 @@ public class SmartType18CompletionTest extends LightFixtureCompletionTestCase {
     doTest();
   }
 
+  public void testConstructorRef() throws Exception {
+    doTest(false);
+  }
+
   public void testFilteredMethodReference() throws Exception {
     doTest(false);
   }
index 7f4ac7e1105cf5b503fba15ca88e7c93200bec29..2daed089d5c23ee791236a9971ddf8a638cafc1a 100644 (file)
@@ -62,8 +62,6 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase {
   public void testIDEA120992() { doTest(); }
   public void testTargetTypeConflictResolverShouldNotTryToEvaluateCurrentArgumentType() { doTest(); }
   public void testIDEA119535() { doTest(); }
-
-  @Bombed(day = 20, month = Calendar.AUGUST)
   public void testIDEA119003() { doTest(); }
   public void testIDEA125674() { doTest(); }
   public void testIDEA117124() { doTest(); }
@@ -79,6 +77,7 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase {
   public void testIDEA122700() { doTest(); }
   public void testIDEA122406() { doTest(); }
   public void testNestedCallsInsideLambdaReturnExpression() { doTest(); }
+  @Bombed(day = 20, month = Calendar.AUGUST)
   public void testIDEA123731() { doTest(); }
   public void testIDEA123869() { doTest(); }
   public void testIDEA123848() { doTest(); }
@@ -108,7 +107,6 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase {
     doTest();
   }
 
-  @Bombed(day = 20, month = Calendar.AUGUST)
   public void testIDEA124190() throws Exception {
     doTest();
   }
index 099a7f4d3f0e4b3675cbe0e46e69ee196e836e37..03693ce742c3e7ce21769fe401722a8b16ba90e9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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,7 @@ import com.intellij.codeInspection.i18n.I18nizeAction;
 import com.intellij.codeInspection.i18n.JavaI18nUtil;
 import com.intellij.ide.DataManager;
 import com.intellij.lang.properties.psi.PropertiesFile;
+import com.intellij.openapi.actionSystem.ActionManager;
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.application.ex.PathManagerEx;
@@ -43,7 +44,7 @@ public class I18nizeTest extends LightCodeInsightTestCase {
     configureByFile(getBasePath() + "/before"+getTestName(false)+"."+ext);
     I18nizeAction action = new I18nizeAction();
     DataContext dataContext = DataManager.getInstance().getDataContext(myEditor.getComponent());
-    AnActionEvent event = new AnActionEvent(null, dataContext, "place", action.getTemplatePresentation(), null, 0);
+    AnActionEvent event = new AnActionEvent(null, dataContext, "place", action.getTemplatePresentation(), ActionManager.getInstance(), 0);
     action.update(event);
     @NonNls String afterFile = getBasePath() + "/after" + getTestName(false) + "." + ext;
     boolean afterFileExists = new File(PathManagerEx.getTestDataPath() + afterFile).exists();
index a1ea3a59605242640f2678d8e5898fc53eb8c85e..50d1f16ca819266c9001a7f9e70e09f45f83473e 100644 (file)
@@ -71,6 +71,9 @@
   <item name="java.awt.CardLayout void show(java.awt.Container, java.lang.String) 1">
     <annotation name="org.jetbrains.annotations.NonNls" />
   </item>
+  <item name='java.awt.Component java.awt.Cursor getCursor()'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
   <item name='java.awt.Component java.awt.Point getLocation()'>
     <annotation name='org.jetbrains.annotations.NotNull'/>
   </item>
       <val name="valuesFromClass" val="java.awt.Cursor.class" />
     </annotation>
   </item>
+  <item name='java.awt.Cursor java.awt.Cursor getPredefinedCursor(int)'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
   <item name="java.awt.Cursor java.awt.Cursor getPredefinedCursor(int) 0">
     <annotation name="org.intellij.lang.annotations.MagicConstant">
       <val name="valuesFromClass" val="java.awt.Cursor.class" />
index 330f7a4d0e234086b267ca8b0312187d51be507c..7e499f6ea9a28291bd818aa88325007dcc79d1ee 100644 (file)
   <item name='java.util.ResourceBundle boolean containsKey(java.lang.String) 0'>
     <annotation name='org.jetbrains.annotations.NotNull'/>
   </item>
+  <item name='java.util.ResourceBundle java.lang.Object getObject(java.lang.String)'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
   <item name='java.util.ResourceBundle java.lang.Object getObject(java.lang.String) 0'>
     <annotation name='org.jetbrains.annotations.NotNull'/>
   </item>
   <item name='java.util.ResourceBundle java.lang.Object handleGetObject(java.lang.String) 0'>
     <annotation name='org.jetbrains.annotations.NotNull'/>
   </item>
+  <item name='java.util.ResourceBundle java.lang.String getString(java.lang.String)'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
   <item name='java.util.ResourceBundle java.lang.String getString(java.lang.String) 0'>
     <annotation name='org.jetbrains.annotations.NotNull'/>
   </item>
+  <item name='java.util.ResourceBundle java.lang.String[] getStringArray(java.lang.String)'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
   <item name='java.util.ResourceBundle java.lang.String[] getStringArray(java.lang.String) 0'>
     <annotation name='org.jetbrains.annotations.NotNull'/>
   </item>
diff --git a/java/jdkAnnotations/java/util/concurrent/atomic/annotations.xml b/java/jdkAnnotations/java/util/concurrent/atomic/annotations.xml
new file mode 100644 (file)
index 0000000..dabc266
--- /dev/null
@@ -0,0 +1,36 @@
+<root>
+  <item name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater V get(T) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater V getAndSet(T, V) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater boolean compareAndSet(T, V, V) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater boolean weakCompareAndSet(T, V, V) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item
+      name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater java.util.concurrent.atomic.AtomicReferenceFieldUpdater&lt;U,W&gt; newUpdater(java.lang.Class&lt;U&gt;, java.lang.Class&lt;W&gt;, java.lang.String)'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item
+      name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater java.util.concurrent.atomic.AtomicReferenceFieldUpdater&lt;U,W&gt; newUpdater(java.lang.Class&lt;U&gt;, java.lang.Class&lt;W&gt;, java.lang.String) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item
+      name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater java.util.concurrent.atomic.AtomicReferenceFieldUpdater&lt;U,W&gt; newUpdater(java.lang.Class&lt;U&gt;, java.lang.Class&lt;W&gt;, java.lang.String) 1'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item
+      name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater java.util.concurrent.atomic.AtomicReferenceFieldUpdater&lt;U,W&gt; newUpdater(java.lang.Class&lt;U&gt;, java.lang.Class&lt;W&gt;, java.lang.String) 2'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater void lazySet(T, V) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+  <item name='java.util.concurrent.atomic.AtomicReferenceFieldUpdater void set(T, V) 0'>
+    <annotation name='org.jetbrains.annotations.NotNull'/>
+  </item>
+</root>
\ No newline at end of file
index a7e16644363c9dd414467474129ed66b9b160cd9..30d668088824fe8749fa1e1517b063a98bb5fedb 100644 (file)
@@ -81,8 +81,7 @@ public abstract class JobScheduler {
   private static void enableRemoveOnCancelPolicy(ScheduledThreadPoolExecutor executor) {
     if (Patches.USE_REFLECTION_TO_ACCESS_JDK7) {
       try {
-        Method setRemoveOnCancelPolicy = ScheduledThreadPoolExecutor.class.getDeclaredMethod("setRemoveOnCancelPolicy", boolean.class);
-        setRemoveOnCancelPolicy.setAccessible(true);
+        Method setRemoveOnCancelPolicy = ReflectionUtil.getDeclaredMethod(ScheduledThreadPoolExecutor.class, "setRemoveOnCancelPolicy", boolean.class);
         setRemoveOnCancelPolicy.invoke(executor, true);
       }
       catch (Exception ignored) {
index 0f50f8d05ecf41624c7fcd439b0f25c576ecc981..c2a40b46f3483f5db0679d23fbdbdd2e5f1cc7f2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 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,7 +25,6 @@ public abstract class ProgressIndicatorProvider {
   @Nullable
   public static ProgressIndicatorProvider ourInstance;
 
-  @Nullable
   public static ProgressIndicatorProvider getInstance() {
     return ourInstance;
   }
@@ -39,6 +38,7 @@ public abstract class ProgressIndicatorProvider {
     return ourInstance != null ? ourInstance.getProgressIndicator() : null;
   }
 
+  @NotNull
   public abstract NonCancelableSection startNonCancelableSection();
 
   @NotNull
@@ -50,8 +50,8 @@ public abstract class ProgressIndicatorProvider {
   public static void checkCanceled() throws ProcessCanceledException {
     // smart optimization! There's a thread started in ProgressManagerImpl, that set's this flag up once in 10 milliseconds
     if (ourNeedToCheckCancel && ourInstance != null) {
+      ourNeedToCheckCancel = false; // doCheckCanceled() may flip it back to true
       ourInstance.doCheckCanceled();
-      ourNeedToCheckCancel = false;
     }
   }
 }
index e4c3e5c502f57bf04f9fe62bf83c126c773a00ec..d265d5a8cd2e3bd82e4054f147d07c4422554852 100644 (file)
@@ -717,6 +717,7 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
     putUserData(BOM_KEY, BOM);
   }
 
+  @Override
   @NonNls
   public String toString() {
     return "VirtualFile: " + getPresentableUrl();
index b6207e8bf36428f46b0555b8786438118eca3bb6..6418a0b60804424ac8a7859621fd7d62789ac327 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -52,7 +52,10 @@ public abstract class PsiWalkingState extends WalkingState<PsiElement> {
   }
 
   protected PsiWalkingState(@NotNull PsiElementVisitor delegate) {
-    super(PsiTreeGuide.instance);
+    this(delegate, PsiTreeGuide.instance);
+  }
+  protected PsiWalkingState(@NotNull PsiElementVisitor delegate, @NotNull TreeGuide<PsiElement> guide) {
+    super(guide);
     myVisitor = delegate;
   }
 
index cfb1f49a71e7383ffee8a60767b7ec7276347f13..1ac18336abcbb456fd284b7308df6e62eb0514d2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2014 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,7 @@
 package com.intellij.psi;
 
 import com.intellij.openapi.util.TextRange;
+import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -29,14 +30,16 @@ public class ReferenceRange {
   private ReferenceRange() {
   }
 
-  public static List<TextRange> getRanges(PsiReference ref) {
+  @NotNull
+  public static List<TextRange> getRanges(@NotNull PsiReference ref) {
     if (ref instanceof MultiRangeReference) {
       return ((MultiRangeReference)ref).getRanges();
     }
     return Collections.singletonList(ref.getRangeInElement());
   }
 
-  public static List<TextRange> getAbsoluteRanges(PsiReference ref) {
+  @NotNull
+  public static List<TextRange> getAbsoluteRanges(@NotNull PsiReference ref) {
     final PsiElement elt = ref.getElement();
     final List<TextRange> relativeRanges = getRanges(ref);
     final List<TextRange> answer = new ArrayList<TextRange>(relativeRanges.size());
@@ -47,7 +50,7 @@ public class ReferenceRange {
     return answer;
   }
 
-  public static TextRange getRange(PsiReference ref) {
+  public static TextRange getRange(@NotNull PsiReference ref) {
     if (ref instanceof MultiRangeReference) {
       final List<TextRange> ranges = ((MultiRangeReference)ref).getRanges();
       return new TextRange(ranges.get(0).getStartOffset(), ranges.get(ranges.size() - 1).getEndOffset());
@@ -56,7 +59,7 @@ public class ReferenceRange {
     return ref.getRangeInElement();
   }
 
-  public static boolean containsOffsetInElement(PsiReference ref, int offset) {
+  public static boolean containsOffsetInElement(@NotNull PsiReference ref, int offset) {
     if (ref instanceof MultiRangeReference) {
       for (TextRange range : ((MultiRangeReference)ref).getRanges()) {
         if (range.containsOffset(offset)) return true;
@@ -68,7 +71,7 @@ public class ReferenceRange {
     return rangeInElement != null && rangeInElement.containsOffset(offset);
   }
 
-  public static boolean containsRangeInElement(PsiReference ref, TextRange rangeInElement) {
+  public static boolean containsRangeInElement(@NotNull PsiReference ref, @NotNull TextRange rangeInElement) {
     if (ref instanceof MultiRangeReference) {
       for (TextRange range : ((MultiRangeReference)ref).getRanges()) {
         if (range.contains(rangeInElement)) return true;
index 633c25a0145a6b1670ca4e5c26a3bec6402224b2..f82e7a80d5fb23e02a674686eacca46cdfbe23e7 100644 (file)
@@ -234,6 +234,7 @@ public class CoreApplicationEnvironment {
       protected void doCheckCanceled() throws ProcessCanceledException {
       }
 
+      @NotNull
       @Override
       public NonCancelableSection startNonCancelableSection() {
         return NonCancelableSection.EMPTY;
index 663cd6f9e0b3798b1bcc2ead7cffb2b1e1e88403..1d7de90e5f619298832d8852d4b77da9bd68247c 100644 (file)
@@ -35,6 +35,12 @@ public class ApplicationUtil {
     throw new CannotRunReadActionException();
   }
 
+  public static void tryRunReadAction(@NotNull final Runnable computable) throws CannotRunReadActionException {
+    if (!((ApplicationEx)ApplicationManager.getApplication()).tryRunReadAction(computable)) {
+      throw new CannotRunReadActionException();
+    }
+  }
+
   public static class CannotRunReadActionException extends RuntimeException{
     @Override
     public Throwable fillInStackTrace() {
index 5202aa291224763952d234e5263c0548f4131d15..ca7bbb582c594729e4af3bda4085597b42d5f4e4 100644 (file)
@@ -37,7 +37,7 @@ import java.util.Map;
 
 public class AnActionEvent implements PlaceProvider<String> {
   private final InputEvent myInputEvent;
-  private final ActionManager myActionManager;
+  @NotNull private final ActionManager myActionManager;
   @NotNull private final DataContext myDataContext;
   @NotNull private final String myPlace;
   @NotNull private final Presentation myPresentation;
@@ -49,12 +49,14 @@ public class AnActionEvent implements PlaceProvider<String> {
   /**
    * @throws IllegalArgumentException if <code>dataContext</code> is <code>null</code> or
    * <code>place</code> is <code>null</code> or <code>presentation</code> is <code>null</code>
+   *
+   * @see ActionManager#getInstance()
    */
   public AnActionEvent(InputEvent inputEvent,
                        @NotNull DataContext dataContext,
                        @NotNull @NonNls String place,
                        @NotNull Presentation presentation,
-                       ActionManager actionManager,
+                       @NotNull ActionManager actionManager,
                        @JdkConstants.InputEventMask int modifiers) {
     // TODO[vova,anton] make this constructor package local. No one is allowed to create AnActionEvents
     myInputEvent = inputEvent;
@@ -69,7 +71,7 @@ public class AnActionEvent implements PlaceProvider<String> {
   public static AnActionEvent createFromInputEvent(@NotNull AnAction action, InputEvent event, @NotNull String place) {
     DataContext context = event == null ? DataManager.getInstance().getDataContext() : DataManager.getInstance().getDataContext(event.getComponent());
     int modifiers = event == null ? 0 : event.getModifiers();
-    return new AnActionEvent(
+    AnActionEvent anActionEvent = new AnActionEvent(
       event,
       context,
       place,
@@ -77,6 +79,8 @@ public class AnActionEvent implements PlaceProvider<String> {
       ActionManager.getInstance(),
       modifiers
     );
+    anActionEvent.setInjectedContext(action.isInInjectedContext());
+    return anActionEvent;
   }
 
   /**
@@ -203,9 +207,11 @@ public class AnActionEvent implements PlaceProvider<String> {
     return myModifiers;
   }
 
+  @NotNull
   public ActionManager getActionManager() {
     return myActionManager;
   }
+
   public void setInjectedContext(boolean worksInInjected) {
     myWorksInInjected = worksInInjected;
   }
index 5e9029ebf93fe46b908279b2946942c0d97c00c8..bc1caec4df9dea67ff314d57256cf70bb03f892e 100644 (file)
@@ -104,4 +104,6 @@ public abstract class ExecutionManager {
   public abstract void restartRunProfile(@Nullable ProgramRunner runner,
                                          @NotNull ExecutionEnvironment environment,
                                          @Nullable RunContentDescriptor currentDescriptor);
+
+  public abstract void restartRunProfile(@NotNull ExecutionEnvironment environment, @Nullable RunContentDescriptor currentDescriptor);
 }
index 49139be54e5889f671c06d3e1a1b641107598ce4..9efd7bfec3b1799c39c295180df5839d3f75968b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -16,6 +16,7 @@
 
 package com.intellij.execution;
 
+import com.intellij.execution.runners.ExecutionEnvironment;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.components.ApplicationComponent;
 import com.intellij.openapi.project.Project;
@@ -25,7 +26,6 @@ import org.jetbrains.annotations.NotNull;
  * @author spleaner
  */
 public abstract class ExecutorRegistry implements ApplicationComponent {
-
   public static ExecutorRegistry getInstance() {
     return ApplicationManager.getApplication().getComponent(ExecutorRegistry.class);
   }
@@ -35,5 +35,12 @@ public abstract class ExecutorRegistry implements ApplicationComponent {
 
   public abstract Executor getExecutorById(final String executorId);
 
+  @Deprecated
+  /**
+   * @deprecated
+   * to remove in IDEA 15
+   */
   public abstract boolean isStarting(Project project, String executorId, String runnerId);
+
+  public abstract boolean isStarting(@NotNull ExecutionEnvironment environment);
 }
index f0d67274d61a450629e08b864ea93b8614a77a2c..8d6e716e3338408ea3ce90179b9ec06592d9fa82 100644 (file)
 
 package com.intellij.execution.runners;
 
-import com.intellij.execution.ExecutionBundle;
-import com.intellij.execution.ExecutionException;
-import com.intellij.execution.RunCanceledByUserException;
+import com.intellij.execution.*;
 import com.intellij.execution.configurations.RunProfile;
 import com.intellij.execution.process.ProcessNotCreatedException;
+import com.intellij.execution.ui.RunContentDescriptor;
 import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.notification.NotificationGroup;
 import com.intellij.notification.NotificationListener;
@@ -33,6 +32,7 @@ import com.intellij.openapi.wm.ToolWindowManager;
 import com.intellij.util.ObjectUtils;
 import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
@@ -107,4 +107,14 @@ public class ExecutionUtil {
       }
     });
   }
+
+  public static void restart(@NotNull ExecutionEnvironment environment) {
+    restart(environment, null);
+  }
+
+  public static void restart(@NotNull ExecutionEnvironment environment, @Nullable RunContentDescriptor contentDescriptor) {
+    if (!ExecutorRegistry.getInstance().isStarting(environment)) {
+      ExecutionManager.getInstance(environment.getProject()).restartRunProfile(environment, contentDescriptor == null ? environment.getContentToReuse() : contentDescriptor);
+    }
+  }
 }
index a20843e2ea8dbceb56fe89ec827736dfacb36dd1..df1875591b300aa25bd7aaf19e804d9fbbbadeb6 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.ide.DataManager;
 import com.intellij.ide.HelpIdProvider;
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.actionSystem.DataProvider;
+import com.intellij.openapi.actionSystem.LangDataKeys;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.Disposer;
 import com.intellij.ui.content.Content;
@@ -73,10 +74,7 @@ public class RunContentDescriptor implements Disposable, DataProvider {
   @Nullable
   @Override
   public Object getData(@NonNls String dataId) {
-    if (RunContentManager.RUN_CONTENT_DESCRIPTOR.is(dataId)) {
-      return this;
-    }
-    return null;
+    return LangDataKeys.RUN_CONTENT_DESCRIPTOR.is(dataId) ? this : null;
   }
 
   public ExecutionConsole getExecutionConsole() {
index 4f192197b0f9a4bb473a3902139efe9f62a331cb..94acfeebfbb9d183527c7a0d2efeb1a5293f1522 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.execution.process.ProcessHandler;
 import com.intellij.execution.runners.ExecutionEnvironment;
 import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.actionSystem.DataKey;
+import com.intellij.openapi.actionSystem.LangDataKeys;
 import com.intellij.openapi.wm.ToolWindow;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -27,8 +28,8 @@ import org.jetbrains.annotations.Nullable;
 import java.util.List;
 
 public interface RunContentManager {
-
-  DataKey<RunContentDescriptor> RUN_CONTENT_DESCRIPTOR = DataKey.create("RUN_CONTENT_DESCRIPTOR");
+  @Deprecated
+  DataKey<RunContentDescriptor> RUN_CONTENT_DESCRIPTOR = LangDataKeys.RUN_CONTENT_DESCRIPTOR;
 
   @Nullable
   RunContentDescriptor getSelectedContent();
index 90dfad98dbbcafe650070af4ed44e7e691e5a56c..7fdb851514fe621d0724a149447336aacfe47ba0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -53,6 +53,7 @@ public interface ViewContext extends Disposable {
 
   ContentManager getContentManager();
 
+  @NotNull
   ActionManager getActionManager();
 
   IdeFocusManager getFocusManager();
index c3f1bc3cb2fd3b0d3015a31380530ba8e208b830..acc7f26ec6a5e8f72414c18ab09bb8f97c166698 100644 (file)
 
 package com.intellij.openapi.actionSystem;
 
+import com.intellij.execution.configurations.RunProfile;
+import com.intellij.execution.runners.ExecutionEnvironment;
 import com.intellij.execution.ui.ConsoleView;
+import com.intellij.execution.ui.RunContentDescriptor;
 import com.intellij.ide.IdeView;
 import com.intellij.lang.Language;
 import com.intellij.openapi.module.ModifiableModuleModel;
@@ -60,4 +63,8 @@ public class LangDataKeys extends PlatformDataKeys {
 
 
   public static final DataKey<Library> LIBRARY = DataKey.create("project.model.library");
+
+  public static final DataKey<RunProfile> RUN_PROFILE = DataKey.create("runProfile");
+  public static final DataKey<ExecutionEnvironment> EXECUTION_ENVIRONMENT = DataKey.create("executionEnvironment");
+  public static final DataKey<RunContentDescriptor> RUN_CONTENT_DESCRIPTOR = DataKey.create("RUN_CONTENT_DESCRIPTORy6gfv");
 }
index db23ce17b2c31880ba57f4d9e770636bdfce22ff..edb9fcdb9e18f4a05efea5d5cfe86ad72d9170d5 100644 (file)
@@ -3,12 +3,12 @@
   <grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
     <margin top="0" left="0" bottom="0" right="0"/>
     <constraints>
-      <xy x="20" y="20" width="500" height="585"/>
+      <xy x="20" y="20" width="500" height="614"/>
     </constraints>
     <properties/>
     <border type="none"/>
     <children>
-      <grid id="ed507" layout-manager="GridLayoutManager" row-count="7" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+      <grid id="ed507" layout-manager="GridLayoutManager" row-count="8" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
         <margin top="0" left="0" bottom="0" right="0"/>
         <constraints>
           <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="9" fill="3" indent="0" use-parent-layout="false"/>
               <text resource-bundle="messages/ApplicationBundle" key="checkbox.show.tabs.tooltips"/>
             </properties>
           </component>
+          <grid id="e3283" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+            <margin top="0" left="0" bottom="0" right="0"/>
+            <constraints>
+              <grid row="7" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+            </constraints>
+            <properties/>
+            <border type="none"/>
+            <children>
+              <component id="2479d" class="javax.swing.JLabel">
+                <constraints>
+                  <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
+                </constraints>
+                <properties>
+                  <text resource-bundle="messages/ApplicationBundle" key="editbox.tab.title.limit"/>
+                </properties>
+              </component>
+              <component id="3499c" class="javax.swing.JTextField" binding="myTabTitleLimitField">
+                <constraints>
+                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false">
+                    <preferred-size width="30" height="27"/>
+                  </grid>
+                </constraints>
+                <properties>
+                  <columns value="2"/>
+                  <text value="30"/>
+                </properties>
+              </component>
+            </children>
+          </grid>
         </children>
       </grid>
       <vspacer id="651b4">
         </clientProperties>
         <border type="none" title-resource-bundle="messages/ApplicationBundle" title-key="group.tab.closing.policy"/>
         <children>
-          <grid id="5a5a7" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+          <grid id="5a5a7" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
             <margin top="0" left="0" bottom="0" right="0"/>
             <constraints>
               <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
                   <text value="15"/>
                 </properties>
               </component>
-              <component id="2479d" class="javax.swing.JLabel">
-                <constraints>
-                  <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <text resource-bundle="messages/ApplicationBundle" key="editbox.tab.title.limit"/>
-                </properties>
-              </component>
-              <component id="3499c" class="javax.swing.JTextField" binding="myTabTitleLimitField">
-                <constraints>
-                  <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false">
-                    <preferred-size width="30" height="27"/>
-                  </grid>
-                </constraints>
-                <properties>
-                  <columns value="2"/>
-                  <text value="30"/>
-                </properties>
-              </component>
             </children>
           </grid>
           <grid id="9b723" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="2">
index 75a4fd41095986f376217a66c4f18bd9bf1a627d..c8d5ec4b8ddbf4c947f8a9dbc6f8ddfeb0191b46 100644 (file)
@@ -104,7 +104,7 @@ public class DaemonListeners implements Disposable {
   private final ProjectLevelVcsManager myProjectLevelVcsManager;
   private final VcsDirtyScopeManager myVcsDirtyScopeManager;
   private final FileStatusManager myFileStatusManager;
-  private final ActionManager myActionManager;
+  @NotNull private final ActionManager myActionManager;
   private final TooltipController myTooltipController;
 
   private boolean myEscPressed;
index 0483d5a050275c11cf06941734fbc6410f4053e2..825e72bc98e6f9e3f8048993a8f7165ee46c2875 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -91,7 +91,7 @@ public class HectorComponent extends JPanel {
     Collections.sort(languages, PsiUtilBase.LANGUAGE_COMPARATOR);
     for (Language language : languages) {
       @SuppressWarnings("UseOfObsoleteCollectionType")
-      final Hashtable<Integer, JLabel> sliderLabels = new Hashtable<Integer, JLabel>();
+      final Hashtable<Integer, JComponent> sliderLabels = new Hashtable<Integer, JComponent>();
       sliderLabels.put(1, new JLabel(EditorBundle.message("hector.none.slider.label")));
       sliderLabels.put(2, new JLabel(EditorBundle.message("hector.syntax.slider.label")));
       if (notInLibrary) {
index 3666b4642efdc2beb7b009358e0215ddbbd32fb7..2f56d3714943730914edc777ea1d2e7abde07f0c 100644 (file)
@@ -19,6 +19,7 @@ package com.intellij.codeInsight.navigation;
 import com.intellij.codeInsight.CodeInsightBundle;
 import com.intellij.codeInsight.TargetElementUtilBase;
 import com.intellij.codeInsight.documentation.DocumentationManager;
+import com.intellij.codeInsight.documentation.DocumentationManagerProtocol;
 import com.intellij.codeInsight.hint.HintManager;
 import com.intellij.codeInsight.hint.HintManagerImpl;
 import com.intellij.codeInsight.hint.HintUtil;
@@ -34,9 +35,7 @@ import com.intellij.openapi.actionSystem.MouseShortcut;
 import com.intellij.openapi.actionSystem.Shortcut;
 import com.intellij.openapi.actionSystem.impl.ActionButton;
 import com.intellij.openapi.actionSystem.impl.PresentationFactory;
-import com.intellij.openapi.application.AccessToken;
 import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.ReadAction;
 import com.intellij.openapi.components.AbstractProjectComponent;
 import com.intellij.openapi.editor.Document;
 import com.intellij.openapi.editor.Editor;
@@ -66,7 +65,7 @@ import com.intellij.openapi.project.IndexNotReadyException;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.startup.StartupManager;
 import com.intellij.openapi.util.Comparing;
-import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.openapi.util.text.StringUtil;
@@ -104,16 +103,14 @@ import java.util.List;
 
 public class CtrlMouseHandler extends AbstractProjectComponent {
   private static final AbstractDocumentationTooltipAction[] ourTooltipActions = {new ShowQuickDocAtPinnedWindowFromTooltipAction()};
-  private static Key<?> ourDebuggerHighlighterKey;
-  private static Key<?> ourXDebuggerHighlighterKey;
   private final EditorColorsManager myEditorColorsManager;
 
-  private       HighlightersSet myHighlighter;
-  @JdkConstants.InputEventMask private int             myStoredModifiers = 0;
-  private                              TooltipProvider myTooltipProvider = null;
-  private final     FileEditorManager    myFileEditorManager;
-  private final     DocumentationManager myDocumentationManager;
-  @Nullable private Point                myPrevMouseLocation;
+  private HighlightersSet myHighlighter;
+  @JdkConstants.InputEventMask private int myStoredModifiers = 0;
+  private TooltipProvider myTooltipProvider = null;
+  private final FileEditorManager myFileEditorManager;
+  private final DocumentationManager myDocumentationManager;
+  @Nullable private Point myPrevMouseLocation;
   private LightweightHint myHint;
 
   private enum BrowseMode {None, Declaration, TypeDeclaration, Implementation}
@@ -137,7 +134,11 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
 
       BrowseMode browseMode = getBrowseMode(modifiers);
 
-      if (browseMode != BrowseMode.None) {
+      if (browseMode == BrowseMode.None) {
+        disposeHighlighter();
+        cancelPreviousTooltip();
+      }
+      else {
         TooltipProvider tooltipProvider = myTooltipProvider;
         if (tooltipProvider != null) {
           if (browseMode != tooltipProvider.getBrowseMode()) {
@@ -149,10 +150,6 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
           myTooltipProvider.execute(browseMode);
         }
       }
-      else {
-        disposeHighlighter();
-        cancelPreviousTooltip();
-      }
     }
   };
 
@@ -240,8 +237,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
                           EditorColorsManager colorsManager,
                           FileEditorManager fileEditorManager,
                           @NotNull DocumentationManager documentationManager,
-                          @NotNull final EditorFactory editorFactory)
-  {
+                          @NotNull final EditorFactory editorFactory) {
     super(project);
     myEditorColorsManager = colorsManager;
     startupManager.registerPostStartupActivity(new DumbAwareRunnable() {
@@ -289,6 +285,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     return new Rectangle(hintComponent.getLocationOnScreen(), hintComponent.getSize());
   }
 
+  @NotNull
   private static BrowseMode getBrowseMode(@JdkConstants.InputEventMask int modifiers) {
     if (modifiers != 0) {
       final Keymap activeKeymap = KeymapManager.getInstance().getActiveKeymap();
@@ -375,9 +372,9 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
 
   private abstract static class Info {
     @NotNull protected final PsiElement myElementAtPointer;
-    private final List<TextRange> myRanges;
+    @NotNull private final List<TextRange> myRanges;
 
-    public Info(@NotNull PsiElement elementAtPointer, List<TextRange> ranges) {
+    public Info(@NotNull PsiElement elementAtPointer, @NotNull List<TextRange> ranges) {
       myElementAtPointer = elementAtPointer;
       myRanges = ranges;
     }
@@ -387,10 +384,11 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
                                                                      elementAtPointer.getTextOffset() + elementAtPointer.getTextLength())));
     }
 
-    boolean isSimilarTo(final Info that) {
+    boolean isSimilarTo(@NotNull Info that) {
       return Comparing.equal(myElementAtPointer, that.myElementAtPointer) && myRanges.equals(that.myRanges);
     }
 
+    @NotNull
     public List<TextRange> getRanges() {
       return myRanges;
     }
@@ -398,11 +396,11 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     @NotNull
     public abstract DocInfo getInfo();
 
-    public abstract boolean isValid(Document document);
+    public abstract boolean isValid(@NotNull Document document);
 
     public abstract void showDocInfo(@NotNull DocumentationManager docManager);
 
-    protected boolean rangesAreCorrect(Document document) {
+    protected boolean rangesAreCorrect(@NotNull Document document) {
       final TextRange docRange = new TextRange(0, document.getTextLength());
       for (TextRange range : getRanges()) {
         if (!docRange.contains(range)) return false;
@@ -412,7 +410,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     }
   }
 
-  private static void showDumbModeNotification(final Project project) {
+  private static void showDumbModeNotification(@NotNull Project project) {
     DumbService.getInstance(project).showDumbModeNotification("Element information is not available during index update");
   }
 
@@ -424,7 +422,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       myTargetElement = targetElement;
     }
 
-    public InfoSingle(final PsiReference ref, @NotNull final PsiElement targetElement) {
+    public InfoSingle(@NotNull PsiReference ref, @NotNull final PsiElement targetElement) {
       super(ref.getElement(), ReferenceRange.getAbsoluteRanges(ref));
       myTargetElement = targetElement;
     }
@@ -432,21 +430,22 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     @Override
     @NotNull
     public DocInfo getInfo() {
-      AccessToken token = ReadAction.start();
-      try {
-        return generateInfo(myTargetElement, myElementAtPointer);
-      }
-      catch (IndexNotReadyException e) {
-        showDumbModeNotification(myTargetElement.getProject());
-        return DocInfo.EMPTY;
-      }
-      finally {
-        token.finish();
-      }
+      return ApplicationManager.getApplication().runReadAction(new Computable<DocInfo>() {
+        @Override
+        public DocInfo compute() {
+          try {
+            return generateInfo(myTargetElement, myElementAtPointer);
+          }
+          catch (IndexNotReadyException e) {
+            showDumbModeNotification(myTargetElement.getProject());
+            return DocInfo.EMPTY;
+          }
+        }
+      });
     }
 
     @Override
-    public boolean isValid(Document document) {
+    public boolean isValid(@NotNull Document document) {
       if (!myTargetElement.isValid()) return false;
       if (!myElementAtPointer.isValid()) return false;
       if (myTargetElement == myElementAtPointer) return false;
@@ -462,7 +461,6 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
   }
 
   private static class InfoMultiple extends Info {
-
     public InfoMultiple(@NotNull final PsiElement elementAtPointer) {
       super(elementAtPointer);
     }
@@ -478,7 +476,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     }
 
     @Override
-    public boolean isValid(Document document) {
+    public boolean isValid(@NotNull Document document) {
       return rangesAreCorrect(document);
     }
 
@@ -489,7 +487,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
   }
 
   @Nullable
-  private Info getInfoAt(@NotNull Editor editor, PsiFile file, int offset, BrowseMode browseMode) {
+  private Info getInfoAt(@NotNull Editor editor, @NotNull PsiFile file, int offset, @NotNull BrowseMode browseMode) {
     PsiElement targetElement = null;
 
     if (browseMode == BrowseMode.TypeDeclaration) {
@@ -502,7 +500,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     }
     else if (browseMode == BrowseMode.Declaration) {
       final PsiReference ref = TargetElementUtilBase.findReference(editor, offset);
-      final List<PsiElement> resolvedElements = ref != null ? resolve(ref) : Collections.<PsiElement>emptyList();
+      final List<PsiElement> resolvedElements = ref == null ? Collections.<PsiElement>emptyList() : resolve(ref);
       final PsiElement resolvedElement = resolvedElements.size() == 1 ? resolvedElements.get(0) : null;
 
       final PsiElement[] targetElements = GotoDeclarationAction.findTargetElementsNoVS(myProject, editor, offset, false);
@@ -572,7 +570,8 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     return null;
   }
 
-  private static List<PsiElement> resolve(final PsiReference ref) {
+  @NotNull
+  private static List<PsiElement> resolve(@NotNull PsiReference ref) {
     // IDEA-56727 try resolve first as in GotoDeclarationAction
     PsiElement resolvedElement = ref.resolve();
 
@@ -734,13 +733,13 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
   }
 
   private class TooltipProvider {
-    private final Editor myEditor;
-    private final LogicalPosition myPosition;
+    @NotNull private final Editor myEditor;
+    @NotNull private final LogicalPosition myPosition;
     private BrowseMode myBrowseMode;
     private boolean myDisposed;
     private final ProgressIndicator myProgress = new ProgressIndicatorBase();
 
-    TooltipProvider(Editor editor, LogicalPosition pos) {
+    TooltipProvider(@NotNull Editor editor, @NotNull LogicalPosition pos) {
       myEditor = editor;
       myPosition = pos;
     }
@@ -754,7 +753,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       return myBrowseMode;
     }
 
-    void execute(BrowseMode browseMode) {
+    void execute(@NotNull BrowseMode browseMode) {
       myBrowseMode = browseMode;
 
       Document document = myEditor.getDocument();
@@ -785,16 +784,16 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       });
     }
 
-    private void doExecute(PsiFile file, int offset) {
+    private void doExecute(@NotNull PsiFile file, int offset) {
       final Info info;
       try {
         info = getInfoAt(myEditor, file, offset, myBrowseMode);
+        if (info == null) return;
       }
       catch (IndexNotReadyException e) {
         showDumbModeNotification(myProject);
         return;
       }
-      if (info == null) return;
 
       ApplicationManager.getApplication().invokeLater(new Runnable() {
         @Override
@@ -805,7 +804,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       });
     }
 
-    private void showHint(Info info) {
+    private void showHint(@NotNull Info info) {
       if (myDisposed || myEditor.isDisposed()) return;
       Component internalComponent = myEditor.getContentComponent();
       if (myHighlighter != null) {
@@ -856,10 +855,6 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
 
         @Override
         public void mouseClicked(MouseEvent e) {
-          QuickDocInfoPane pane = quickDocPaneRef.get();
-          if (pane != null) {
-            pane.mouseClicked(e);
-          }
         }
       };
       Ref<Consumer<String>> newTextConsumerRef = new Ref<Consumer<String>>();
@@ -889,7 +884,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       showHint(hint);
     }
 
-    public void showHint(LightweightHint hint) {
+    public void showHint(@NotNull LightweightHint hint) {
       final HintManagerImpl hintManager = HintManagerImpl.getInstanceImpl();
       Point p = HintManagerImpl.getHintPosition(hint, myEditor, myPosition, HintManager.ABOVE);
       hintManager.showEditorHint(hint, myEditor, p,
@@ -898,7 +893,8 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     }
   }
 
-  private HighlightersSet installHighlighterSet(Info info, Editor editor) {
+  @NotNull
+  private HighlightersSet installHighlighterSet(@NotNull Info info, @NotNull Editor editor) {
     final JComponent internalComponent = editor.getContentComponent();
     internalComponent.addKeyListener(myEditorKeyListener);
     editor.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener);
@@ -922,12 +918,15 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
 
 
   private class HighlightersSet {
-    private final List<RangeHighlighter> myHighlighters;
-    private final Editor myHighlighterView;
-    private final Cursor myStoredCursor;
-    private final Info myStoredInfo;
-
-    private HighlightersSet(List<RangeHighlighter> highlighters, Editor highlighterView, Cursor storedCursor, Info storedInfo) {
+    @NotNull private final List<RangeHighlighter> myHighlighters;
+    @NotNull private final Editor myHighlighterView;
+    @NotNull private final Cursor myStoredCursor;
+    @NotNull private final Info myStoredInfo;
+
+    private HighlightersSet(@NotNull List<RangeHighlighter> highlighters,
+                            @NotNull Editor highlighterView,
+                            @NotNull Cursor storedCursor,
+                            @NotNull Info storedInfo) {
       myHighlighters = highlighters;
       myHighlighterView = highlighterView;
       myStoredCursor = storedCursor;
@@ -946,18 +945,18 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       myFileEditorManager.removeFileEditorManagerListener(myFileEditorManagerListener);
     }
 
+    @NotNull
     public Info getStoredInfo() {
       return myStoredInfo;
     }
   }
 
   private static class DocInfo {
-
     public static final DocInfo EMPTY = new DocInfo(null, null, null);
 
-    @Nullable public final String                text;
+    @Nullable public final String text;
     @Nullable public final DocumentationProvider docProvider;
-    @Nullable public final PsiElement            documentationAnchor;
+    @Nullable public final PsiElement documentationAnchor;
 
     DocInfo(@Nullable String text, @Nullable DocumentationProvider provider, @Nullable PsiElement documentationAnchor) {
       this.text = text;
@@ -967,7 +966,6 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
   }
 
   private class QuickDocInfoPane extends JBLayeredPane {
-
     private static final int BUTTON_HGAP = 5;
 
     @NotNull private final List<JComponent> myButtons = new ArrayList<JComponent>();
@@ -1073,11 +1071,6 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       processStateChangeIfNecessary(e.getLocationOnScreen(), false);
     }
 
-    public void mouseClicked(@NotNull MouseEvent e) {
-      // TODO den check the processing.
-      int i = 1;
-    }
-
     private void processStateChangeIfNecessary(@NotNull Point mouseScreenLocation, boolean mouseEntered) {
       // Don't show 'view quick doc' buttons if docked quick doc control is already active.
       if (myDocumentationManager.hasActiveDockedDocWindow()) {
@@ -1095,9 +1088,8 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
   }
 
   private class QuickDocHyperlinkListener implements HyperlinkListener {
-
     @NotNull private final DocumentationProvider myProvider;
-    @NotNull private final PsiElement            myContext;
+    @NotNull private final PsiElement myContext;
 
     QuickDocHyperlinkListener(@NotNull DocumentationProvider provider, @NotNull PsiElement context) {
       myProvider = provider;
@@ -1111,11 +1103,11 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       }
 
       String description = e.getDescription();
-      if (StringUtil.isEmpty(description) || !description.startsWith(DocumentationManager.PSI_ELEMENT_PROTOCOL)) {
+      if (StringUtil.isEmpty(description) || !description.startsWith(DocumentationManagerProtocol.PSI_ELEMENT_PROTOCOL)) {
         return;
       }
 
-      String elementName = e.getDescription().substring(DocumentationManager.PSI_ELEMENT_PROTOCOL.length());
+      String elementName = e.getDescription().substring(DocumentationManagerProtocol.PSI_ELEMENT_PROTOCOL.length());
 
       final PsiElement targetElement = myProvider.getDocumentationElementForLink(PsiManager.getInstance(myProject), elementName, myContext);
       if (targetElement != null) {
index b625606e677426aaa82543247d74084b977df339..359160d39f33957a46b246b83a924d40e4cf54cf 100644 (file)
@@ -178,7 +178,12 @@ public class ExecutorRegistryImpl extends ExecutorRegistry {
 
   @Override
   public boolean isStarting(Project project, final String executorId, final String runnerId) {
-    return myInProgress.contains(new Trinity<Project, String, String>(project, executorId, runnerId));
+    return myInProgress.contains(Trinity.create(project, executorId, runnerId));
+  }
+
+  @Override
+  public boolean isStarting(@NotNull ExecutionEnvironment environment) {
+    return isStarting(environment.getProject(), environment.getExecutor().getId(), environment.getRunnerId());
   }
 
   @Override
index 618a4b1c65c5ad77ee8ddd5ceed4ea47568d03a1..7cbed4483070a314e2c16e4a457c800fbd5863f6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.intellij.execution.actions;
 
+import com.intellij.execution.ExecutionBundle;
 import com.intellij.execution.ExecutionManager;
 import com.intellij.execution.KillableProcess;
+import com.intellij.execution.configurations.RunProfile;
 import com.intellij.execution.process.ProcessHandler;
 import com.intellij.execution.ui.RunContentDescriptor;
-import com.intellij.execution.ui.RunContentManager;
 import com.intellij.icons.AllIcons;
 import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.progress.ProgressIndicator;
@@ -29,7 +29,7 @@ import com.intellij.openapi.project.DumbAwareAction;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.popup.JBPopup;
 import com.intellij.openapi.ui.popup.JBPopupFactory;
-import com.intellij.openapi.ui.popup.ListItemDescriptor;
+import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
 import com.intellij.openapi.ui.popup.PopupChooserBuilder;
 import com.intellij.openapi.util.Condition;
 import com.intellij.openapi.util.Pair;
@@ -49,19 +49,20 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-public class StopAction extends DumbAwareAction implements AnAction.TransparentUpdate {
+class StopAction extends DumbAwareAction implements AnAction.TransparentUpdate {
   @Override
   public void update(final AnActionEvent e) {
     boolean enable = false;
     Icon icon = getTemplatePresentation().getIcon();
     String description = getTemplatePresentation().getDescription();
-    final Presentation presentation = e.getPresentation();
-
+    Presentation presentation = e.getPresentation();
     if (ActionPlaces.MAIN_MENU.equals(e.getPlace())) {
       enable = !getCancellableProcesses(e.getProject()).isEmpty() || !getActiveDescriptors(e.getDataContext()).isEmpty();
+      presentation.setText(getTemplatePresentation().getText());
     }
     else {
-      final ProcessHandler processHandler = getHandler(e.getDataContext());
+      RunContentDescriptor contentDescriptor = e.getData(LangDataKeys.RUN_CONTENT_DESCRIPTOR);
+      ProcessHandler processHandler = contentDescriptor == null ? null : contentDescriptor.getProcessHandler();
       if (processHandler != null && !processHandler.isProcessTerminated()) {
         if (!processHandler.isProcessTerminating()) {
           enable = true;
@@ -72,6 +73,14 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
           description = "Kill process";
         }
       }
+
+      RunProfile runProfile = e.getData(LangDataKeys.RUN_PROFILE);
+      if (runProfile == null && contentDescriptor == null) {
+        presentation.setText(getTemplatePresentation().getText());
+      }
+      else {
+        presentation.setText(ExecutionBundle.message("stop.configuration.action.name", runProfile == null ? contentDescriptor.getDisplayName() : runProfile.getName()));
+      }
     }
 
     presentation.setEnabled(enable);
@@ -99,19 +108,13 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
       final JBList list = new JBList(handlerItems.first);
       if (handlerItems.second != null) list.setSelectedValue(handlerItems.second, true);
 
-      list.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptor() {
+      list.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptorAdapter() {
         @Nullable
         @Override
         public String getTextFor(Object value) {
           return value instanceof HandlerItem ? ((HandlerItem)value).displayName : null;
         }
 
-        @Nullable
-        @Override
-        public String getTooltipFor(Object value) {
-          return null;
-        }
-
         @Nullable
         @Override
         public Icon getIconFor(Object value) {
@@ -122,12 +125,6 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
         public boolean hasSeparatorAboveOf(Object value) {
           return value instanceof HandlerItem && ((HandlerItem)value).hasSeparator;
         }
-
-        @Nullable
-        @Override
-        public String getCaptionAboveOf(Object value) {
-          return null;
-        }
       }));
 
       final PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(list);
@@ -220,21 +217,19 @@ public class StopAction extends DumbAwareAction implements AnAction.TransparentU
   }
 
   @Nullable
-  static ProcessHandler getHandler(final DataContext dataContext) {
-    final RunContentDescriptor contentDescriptor = RunContentManager.RUN_CONTENT_DESCRIPTOR.getData(dataContext);
-    final ProcessHandler processHandler;
+  static ProcessHandler getHandler(@NotNull DataContext dataContext) {
+    final RunContentDescriptor contentDescriptor = LangDataKeys.RUN_CONTENT_DESCRIPTOR.getData(dataContext);
     if (contentDescriptor != null) {
       // toolwindow case
-      processHandler = contentDescriptor.getProcessHandler();
+      return contentDescriptor.getProcessHandler();
     }
     else {
       // main menu toolbar
       final Project project = CommonDataKeys.PROJECT.getData(dataContext);
       final RunContentDescriptor selectedContent =
         project == null ? null : ExecutionManager.getInstance(project).getContentManager().getSelectedContent();
-      processHandler = selectedContent == null ? null : selectedContent.getProcessHandler();
+      return selectedContent == null ? null : selectedContent.getProcessHandler();
     }
-    return processHandler;
   }
 
   @NotNull
index 8d7489761d0cde81e18dbc33ca64586da2ef4d79..36cfaa2298c1008f8866120ee001444fa91b1ba3 100644 (file)
@@ -292,6 +292,11 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
     restartRunProfile(project, null, null, null, null, null, executor, target, configuration, currentDescriptor);
   }
 
+  @Override
+  public void restartRunProfile(@NotNull ExecutionEnvironment environment, @Nullable RunContentDescriptor currentDescriptor) {
+    restartRunProfile(RunnerRegistry.getInstance().findRunnerById(environment.getRunnerId()), environment, currentDescriptor);
+  }
+
   @Override
   public void restartRunProfile(@Nullable ProgramRunner runner,
                                 @NotNull ExecutionEnvironment environment,
@@ -378,7 +383,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
             return;
           }
         }
-        start(project, context, runner, runProfile, runnerSettings, configurationPerRunnerSettings, configuration, executor, target,
+        start(project, context, runner, runProfile, configuration, executor, target,
               currentDescriptor);
       }
     };
@@ -389,8 +394,6 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
                             @Nullable DataContext context,
                             @Nullable ProgramRunner runner,
                             @Nullable RunProfile runProfile,
-                            @Nullable RunnerSettings runnerSettings,
-                            @Nullable ConfigurationPerRunnerSettings configurationPerRunnerSettings,
                             @Nullable RunnerAndConfigurationSettings configuration,
                             @NotNull Executor executor,
                             @NotNull ExecutionTarget target,
index 45393c328e6979fc04d847ddfac620672efe16e5..30058177c853028b9d88ed9beb8e5b76e7d7831d 100644 (file)
  */
 package com.intellij.execution.runners;
 
+import com.intellij.execution.ExecutionBundle;
+import com.intellij.execution.ExecutorRegistry;
+import com.intellij.execution.process.ProcessHandler;
+import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.icons.AllIcons;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.LangDataKeys;
 import com.intellij.openapi.actionSystem.Presentation;
 import com.intellij.openapi.project.DumbAware;
 import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
+import javax.swing.*;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 /**
  * @author Roman.Chernyatchik
  */
-public class FakeRerunAction extends AnAction implements DumbAware {
-  protected static final List<RestartAction> registry = ContainerUtil.createLockFreeCopyOnWriteList();
+class FakeRerunAction extends AnAction implements DumbAware {
+  @SuppressWarnings("deprecation")
+  static final List<RestartAction> registry = ContainerUtil.createLockFreeCopyOnWriteList();
 
   @Override
-  public void actionPerformed(AnActionEvent e) {
-    RestartAction action = RestartAction.findActualAction();
-    if (action != null && action.isEnabled()) {
-      action.actionPerformed(e);
+  public void update(AnActionEvent event) {
+    Presentation presentation = event.getPresentation();
+    ExecutionEnvironment environment = getEnvironment(event);
+    if (environment != null) {
+      presentation.setText(ExecutionBundle.message("rerun.configuration.action.name", environment.getRunProfile().getName()));
+
+      RunContentDescriptor descriptor = getDescriptor(event);
+      ProcessHandler processHandler = descriptor == null ? null : descriptor.getProcessHandler();
+      presentation.setIcon(processHandler != null && !processHandler.isProcessTerminated() ? AllIcons.Actions.Restart : environment.getExecutor().getIcon());
+      presentation.setEnabledAndVisible(isEnabled(event));
+      return;
     }
+
+    FakeRerunAction action = findActualAction(event);
+    presentation.setEnabled(action != null && action.isEnabled(event));
+    presentation.setVisible(false);
   }
 
   @Override
-  public void update(AnActionEvent e) {
-    final Presentation presentation = e.getPresentation();
-    RestartAction action = RestartAction.findActualAction();
-    presentation.setEnabled(action != null && action.isEnabled());
-    presentation.setVisible(false);
+  public void actionPerformed(AnActionEvent event) {
+    ExecutionEnvironment environment = getEnvironment(event);
+    if (environment != null) {
+      ExecutionUtil.restart(environment, getDescriptor(event));
+      return;
+    }
+
+    FakeRerunAction action = findActualAction(event);
+    if (action != null && action.isEnabled(event)) {
+      action.actionPerformed(event);
+    }
+  }
+
+  @Nullable
+  protected RunContentDescriptor getDescriptor(AnActionEvent event) {
+    return event.getData(LangDataKeys.RUN_CONTENT_DESCRIPTOR);
+  }
+
+  @Nullable
+  protected ExecutionEnvironment getEnvironment(AnActionEvent event) {
+    return event.getData(LangDataKeys.EXECUTION_ENVIRONMENT);
+  }
+
+  protected boolean isEnabled(AnActionEvent event) {
+    RunContentDescriptor descriptor = getDescriptor(event);
+    ProcessHandler processHandler = descriptor == null ? null : descriptor.getProcessHandler();
+    ExecutionEnvironment environment = getEnvironment(event);
+    return environment != null &&
+           !ExecutorRegistry.getInstance().isStarting(environment) &&
+           !(processHandler != null && processHandler.isProcessTerminating());
+  }
+
+  @Nullable
+  private JComponent getRunComponent(@NotNull AnActionEvent event) {
+    RunContentDescriptor descriptor = getDescriptor(event);
+    return descriptor == null ? null : descriptor.getComponent();
+  }
+
+  @Nullable
+  private static FakeRerunAction findActualAction(@NotNull final AnActionEvent event) {
+    if (registry.isEmpty()) {
+      return null;
+    }
+
+    List<FakeRerunAction> candidates = new ArrayList<FakeRerunAction>(registry);
+    Collections.sort(candidates, new Comparator<FakeRerunAction>() {
+      @Override
+      public int compare(@NotNull FakeRerunAction action1, @NotNull FakeRerunAction action2) {
+        boolean isActive1 = action1.isEnabled(event);
+        if (isActive1 != action2.isEnabled(event)) {
+          return isActive1 ? -1 : 1;
+        }
+
+        JComponent component1 = action1.getRunComponent(event);
+        JComponent component2 = action2.getRunComponent(event);
+        Window window1 = component1 == null ? null : SwingUtilities.windowForComponent(component1);
+        Window window2 = component2 == null ? null : SwingUtilities.windowForComponent(component2);
+        if (window1 == null) {
+          return 1;
+        }
+        if (window2 == null) {
+          return -1;
+        }
+
+        boolean showing1 = component1.isShowing();
+        boolean showing2 = component2.isShowing();
+        if (showing1 && !showing2) {
+          return -1;
+        }
+        if (showing2 && !showing1) {
+          return 1;
+        }
+        return (window1.isActive() ? -1 : 1);
+      }
+    });
+    return candidates.get(0);
   }
 }
index c4e8fd0a3e0d0684b375061a5a805616ac6bb781..1ab1f5b592d15b20d3e858f50c865bd95a9a5aac 100644 (file)
@@ -1,7 +1,5 @@
 package com.intellij.execution.runners;
 
-import com.intellij.execution.ExecutionManager;
-import com.intellij.execution.ExecutorRegistry;
 import com.intellij.execution.process.ProcessHandler;
 import com.intellij.execution.ui.RunContentDescriptor;
 import com.intellij.openapi.Disposable;
@@ -29,10 +27,8 @@ public class RerunTestsAction extends DumbAwareAction implements AnAction.Transp
   public static final String ID = "RerunTests";
   private static final List<RerunInfo> REGISTRY = ContainerUtil.createLockFreeCopyOnWriteList();
 
-  public static void register(@NotNull RunContentDescriptor descriptor,
-                              @NotNull ExecutionEnvironment env,
-                              @NotNull ProgramRunner runner) {
-    final RerunInfo rerunInfo = new RerunInfo(descriptor, env, runner);
+  public static void register(@NotNull RunContentDescriptor descriptor, @NotNull ExecutionEnvironment environment) {
+    final RerunInfo rerunInfo = new RerunInfo(descriptor, environment);
     REGISTRY.add(rerunInfo);
     Disposer.register(descriptor, new Disposable() {
       @Override
@@ -49,17 +45,12 @@ public class RerunTestsAction extends DumbAwareAction implements AnAction.Transp
     if (project == null) {
       return;
     }
-    ExecutionManager executionManager = ExecutionManager.getInstance(project);
     for (RerunInfo rerunInfo : REGISTRY) {
       RunContentDescriptor descriptor = rerunInfo.getDescriptor();
       if (!Disposer.isDisposed(descriptor)) {
-        ExecutionEnvironment env = rerunInfo.getEnv();
-        ProgramRunner runner = rerunInfo.getRunner();
         ProcessHandler processHandler = descriptor.getProcessHandler();
         if (processHandler != null && processHandler.isProcessTerminated()) {
-          if (!ExecutorRegistry.getInstance().isStarting(project, env.getExecutor().getId(), runner.getRunnerId())) {
-            executionManager.restartRunProfile(runner, env, descriptor);
-          }
+          ExecutionUtil.restart(rerunInfo.getEnvironment(), descriptor);
         }
       }
     }
@@ -72,30 +63,20 @@ public class RerunTestsAction extends DumbAwareAction implements AnAction.Transp
   }
 
   private static class RerunInfo {
-
     private final RunContentDescriptor myDescriptor;
     private final ExecutionEnvironment myEnv;
-    private final ProgramRunner myRunner;
 
-    public RerunInfo(@NotNull RunContentDescriptor descriptor,
-                     @NotNull ExecutionEnvironment env,
-                     @NotNull ProgramRunner runner) {
+    public RerunInfo(@NotNull RunContentDescriptor descriptor, @NotNull ExecutionEnvironment env) {
       myDescriptor = descriptor;
       myEnv = env;
-      myRunner = runner;
     }
 
     private RunContentDescriptor getDescriptor() {
       return myDescriptor;
     }
 
-    private ExecutionEnvironment getEnv() {
+    private ExecutionEnvironment getEnvironment() {
       return myEnv;
     }
-
-    private ProgramRunner getRunner() {
-      return myRunner;
-    }
   }
-
 }
index 306b6963bd7fad6edf7180142453569ffd74b5f4..52d404eff8b8cc357e6910b4ee3574d5875b4082 100644 (file)
  */
 package com.intellij.execution.runners;
 
-import com.intellij.execution.*;
-import com.intellij.execution.process.ProcessHandler;
+import com.intellij.execution.Executor;
 import com.intellij.execution.ui.RunContentDescriptor;
-import com.intellij.icons.AllIcons;
 import com.intellij.openapi.Disposable;
-import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.CustomShortcutSet;
+import com.intellij.openapi.actionSystem.IdeActions;
 import com.intellij.openapi.keymap.KeymapManager;
 import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Disposer;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
 
+@Deprecated
+/**
+ * to remove in IDEA 15
+ */
 public class RestartAction extends FakeRerunAction implements DumbAware, AnAction.TransparentUpdate, Disposable {
-  private final ProgramRunner myRunner;
-  @NotNull private final RunContentDescriptor myDescriptor;
-  @NotNull private final Executor myExecutor;
-  private final ExecutionEnvironment myEnvironment;
+  private final RunContentDescriptor descriptor;
+  private final ExecutionEnvironment environment;
 
-  public RestartAction(@NotNull Executor executor,
-                       @NotNull RunContentDescriptor descriptor,
-                       @NotNull ExecutionEnvironment environment) {
+  public RestartAction(@NotNull RunContentDescriptor descriptor, @NotNull ExecutionEnvironment environment) {
     //noinspection deprecation
-    this(executor, null, descriptor, environment);
+    this(environment.getExecutor(), null, descriptor, environment);
   }
 
   @Deprecated
@@ -53,100 +48,33 @@ public class RestartAction extends FakeRerunAction implements DumbAware, AnActio
    * @deprecated environment must provide runner id
    * to remove in IDEA 15
    */
-  public RestartAction(@NotNull Executor executor,
+  public RestartAction(@SuppressWarnings("UnusedParameters") @NotNull Executor executor,
                        @Nullable ProgramRunner runner,
                        @NotNull RunContentDescriptor descriptor,
                        @NotNull ExecutionEnvironment environment) {
     Disposer.register(descriptor, this);
-    registry.add(this);
+    FakeRerunAction.registry.add(this);
 
-    myEnvironment = environment;
+    this.environment = runner == null ? environment : ExecutionEnvironmentBuilder.fix(environment, runner);
     getTemplatePresentation().setEnabled(false);
-    myRunner = runner;
-    myDescriptor = descriptor;
-    myExecutor = executor;
-    // see IDEADEV-698
-
-    if (descriptor.getRestarter() == null) {
-      descriptor.setRestarter(new Runnable() {
-        @Override
-        public void run() {
-          restart();
-        }
-      });
-    }
+    this.descriptor = descriptor;
   }
 
   @Override
   public void dispose() {
-    registry.remove(this);
-  }
-
-  @Nullable
-  static RestartAction findActualAction() {
-    if (registry.isEmpty()) {
-      return null;
-    }
-
-    List<RestartAction> candidates = new ArrayList<RestartAction>(registry);
-    Collections.sort(candidates, new Comparator<RestartAction>() {
-      @Override
-      public int compare(@NotNull RestartAction action1, @NotNull RestartAction action2) {
-        boolean isActive1 = action1.isEnabled();
-        boolean isActive2 = action2.isEnabled();
-        if (isActive1 != isActive2)
-          return isActive1? - 1 : 1;
-        Window window1 = SwingUtilities.windowForComponent(action1.myDescriptor.getComponent());
-        Window window2 = SwingUtilities.windowForComponent(action2.myDescriptor.getComponent());
-        if (window1 == null)
-          return 1;
-        if (window2 == null)
-          return -1;
-        boolean showing1 = action1.myDescriptor.getComponent().isShowing();
-        boolean showing2 = action2.myDescriptor.getComponent().isShowing();
-        if (showing1 && !showing2)
-          return -1;
-        if (showing2 && !showing1)
-          return 1;
-        return (window1.isActive() ? -1 : 1);
-      }
-    });
-    return candidates.get(0);
+    FakeRerunAction.registry.remove(this);
   }
 
   @Override
-  public void actionPerformed(final AnActionEvent e) {
-    restart();
-  }
-
-  public void restart() {
-    Project project = myEnvironment.getProject();
-    if (!ExecutorRegistry.getInstance().isStarting(project, myExecutor.getId(), getRunnerId())) {
-      ProgramRunner runner = myRunner == null ? RunnerRegistry.getInstance().findRunnerById(myEnvironment.getRunnerId()) : myRunner;
-      ExecutionManager.getInstance(project).restartRunProfile(runner, myEnvironment, myDescriptor);
-    }
-  }
-
-  private String getRunnerId() {
-    return myRunner == null ? myEnvironment.getRunnerId() : myRunner.getRunnerId();
+  @NotNull
+  protected RunContentDescriptor getDescriptor(AnActionEvent event) {
+    return descriptor;
   }
 
   @Override
-  public void update(final AnActionEvent event) {
-    final Presentation presentation = event.getPresentation();
-    String name = myEnvironment.getRunProfile().getName();
-    ProcessHandler processHandler = myDescriptor.getProcessHandler();
-    final boolean isRunning = processHandler != null && !processHandler.isProcessTerminated();
-
-    presentation.setText(ExecutionBundle.message("rerun.configuration.action.name", name));
-    presentation.setIcon(isRunning ? AllIcons.Actions.Restart : myExecutor.getIcon());
-    presentation.setEnabled(isEnabled());
-  }
-
-  boolean isEnabled() {
-    ProcessHandler processHandler = myDescriptor.getProcessHandler();
-    return !ExecutorRegistry.getInstance().isStarting(myEnvironment.getProject(), myExecutor.getId(), getRunnerId()) &&
-           !(processHandler != null && processHandler.isProcessTerminating());
+  @NotNull
+  protected ExecutionEnvironment getEnvironment(AnActionEvent event) {
+    return environment;
   }
 
   public void registerShortcut(JComponent component) {
index 712956bd670dc16183a8236d5d0779d18e576f27..06a24c2896488fc1421eebba53caef652669fda3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -18,10 +18,7 @@ package com.intellij.execution.runners;
 import com.intellij.diagnostic.logging.LogConsoleManagerBase;
 import com.intellij.diagnostic.logging.LogFilesManager;
 import com.intellij.diagnostic.logging.OutputFileUtil;
-import com.intellij.execution.DefaultExecutionResult;
-import com.intellij.execution.ExecutionManager;
-import com.intellij.execution.ExecutionResult;
-import com.intellij.execution.Executor;
+import com.intellij.execution.*;
 import com.intellij.execution.configurations.RunConfigurationBase;
 import com.intellij.execution.configurations.RunProfile;
 import com.intellij.execution.configurations.SearchScopeProvider;
@@ -60,7 +57,6 @@ public class RunContentBuilder extends LogConsoleManagerBase {
   private final LogFilesManager myManager;
 
   private RunnerLayoutUi myUi;
-  private final Executor myExecutor;
 
   /**
    * @deprecated use {@link #RunContentBuilder(ProgramRunner, com.intellij.execution.ExecutionResult, ExecutionEnvironment)}
@@ -88,7 +84,6 @@ public class RunContentBuilder extends LogConsoleManagerBase {
   public RunContentBuilder(ExecutionResult executionResult, @NotNull ExecutionEnvironment environment) {
     super(environment.getProject(), SearchScopeProvider.createSearchScope(environment.getProject(), environment.getRunProfile()));
 
-    myExecutor = environment.getExecutor();
     myManager = new LogFilesManager(environment.getProject(), this, this);
     myExecutionResult = executionResult;
     setEnvironment(environment);
@@ -142,7 +137,7 @@ public class RunContentBuilder extends LogConsoleManagerBase {
         runnerType = JAVA_RUNNER + "." + id;
       }
     }
-    myUi = RunnerLayoutUi.Factory.getInstance(getProject()).create(runnerType, myExecutor.getId(), profile.getName(), this);
+    myUi = RunnerLayoutUi.Factory.getInstance(getProject()).create(runnerType, getEnvironment().getExecutor().getId(), profile.getName(), this);
     myUi.getOptions().setMoveToGridActionEnabled(false).setMinimizeActionEnabled(false);
 
     if (ApplicationManager.getApplication().isUnitTestMode()) {
@@ -168,7 +163,7 @@ public class RunContentBuilder extends LogConsoleManagerBase {
       if (console instanceof ObservableConsoleView && !ApplicationManager.getApplication().isUnitTestMode()) {
         ((ObservableConsoleView)console).addChangeListener(new ConsoleToFrontListener((RunConfigurationBase)profile,
                                                                                       getProject(),
-                                                                                      myExecutor,
+                                                                                      getEnvironment().getExecutor(),
                                                                                       contentDescriptor,
                                                                                       myUi),
                                                            this);
@@ -192,8 +187,8 @@ public class RunContentBuilder extends LogConsoleManagerBase {
     final DefaultActionGroup consoleActions = new DefaultActionGroup();
     if (console instanceof ConsoleView) {
       AnAction[] actions = ((ConsoleView)console).createConsoleActions();
-      for (AnAction goaction: actions) {
-        consoleActions.add(goaction);
+      for (AnAction action: actions) {
+        consoleActions.add(action);
       }
     }
 
@@ -203,9 +198,15 @@ public class RunContentBuilder extends LogConsoleManagerBase {
   private ActionGroup createActionToolbar(final RunContentDescriptor contentDescriptor, final JComponent component) {
     final DefaultActionGroup actionGroup = new DefaultActionGroup();
 
-    final RestartAction restartAction = new RestartAction(myExecutor, contentDescriptor, getEnvironment());
+    final RestartAction restartAction = new RestartAction(contentDescriptor, getEnvironment());
     restartAction.registerShortcut(component);
     actionGroup.add(restartAction);
+    contentDescriptor.setRestarter(new Runnable() {
+      @Override
+      public void run() {
+        ExecutionUtil.restart(getEnvironment(), contentDescriptor);
+      }
+    });
 
     if (myExecutionResult instanceof DefaultExecutionResult) {
       final AnAction[] actions = ((DefaultExecutionResult)myExecutionResult).getRestartActions();
@@ -238,9 +239,9 @@ public class RunContentBuilder extends LogConsoleManagerBase {
     actionGroup.add(myUi.getOptions().getLayoutActions());
     actionGroup.addSeparator();
     actionGroup.add(PinToolwindowTabAction.getPinAction());
-    actionGroup.add(new CloseAction(myExecutor, contentDescriptor, getProject()));
+    actionGroup.add(new CloseAction(getEnvironment().getExecutor(), contentDescriptor, getProject()));
     final String helpId = contentDescriptor.getHelpId();
-    actionGroup.add(new ContextHelpAction(helpId != null ? helpId : myExecutor.getHelpId()));
+    actionGroup.add(new ContextHelpAction(helpId != null ? helpId : getEnvironment().getExecutor().getHelpId()));
     return actionGroup;
   }
 
index 8ca416bd54277bc28353501c3653c1d36456c10d..d680e8a7e1738462262e118fdca7396fa7f771a4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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,7 @@ import java.util.Map;
  */
 public class
   JBRunnerTabs extends JBTabsImpl {
-  public JBRunnerTabs(@Nullable Project project, ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
+  public JBRunnerTabs(@Nullable Project project, @NotNull ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
     super(project, actionManager, focusManager, parent);
   }
 
index 1300f5ead8516df9590e981b1dda1d491e2b0372..b8225b0c238b948d8111040aff9cd7798e0ea972 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -89,7 +89,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
   private ContentManager myManager;
   private final RunnerLayout myLayoutSettings;
 
-  private final ActionManager myActionManager;
+  @NotNull private final ActionManager myActionManager;
   private final String mySessionName;
   private final MyComponent myComponent = new MyComponent();
 
@@ -164,7 +164,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
                          @NotNull String sessionName) {
     myProject = project;
     myRunnerUi = ui;
-    myLayoutSettings = settings;
+    myLayoutSettings =  settings;
     myActionManager = actionManager;
     mySessionName = sessionName;
     myFocusManager = focusManager;
@@ -299,12 +299,11 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
   }
 
   private void rebuildTabPopup() {
-    if (myTabs == null) return;
+    initUi();
 
     myTabs.setPopupGroup(getCellPopupGroup(TAB_POPUP_PLACE), TAB_POPUP_PLACE, true);
 
-    final ArrayList<GridImpl> grids = getGrids();
-    for (GridImpl each : grids) {
+    for (GridImpl each : getGrids()) {
       each.rebuildTabPopup();
     }
   }
@@ -1394,8 +1393,8 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
       }
     }
 
+    @SuppressWarnings("NullableProblems")
     @Override
-    @NotNull
     public String getName() {
       return RunnerContentUi.this.getName();
     }
@@ -1580,6 +1579,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
     return myManager;
   }
 
+  @NotNull
   @Override
   public ActionManager getActionManager() {
     return myActionManager;
index 80099b35c3d8bfb6374bf0f2dd45ea59068e3599..fd75f4c653812823fd31c62b14a40d28df490931 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -47,8 +47,6 @@ import javax.swing.event.TreeSelectionListener;
 import javax.swing.tree.*;
 import java.awt.*;
 import java.awt.event.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 import java.util.*;
 import java.util.List;
 
@@ -536,9 +534,9 @@ public class MemberChooser<T extends ClassMember> extends DialogWrapper implemen
   protected void doSort() {
     Pair<ElementNode, List<ElementNode>> pair = storeSelection();
 
-    Enumeration<ParentNode> children = getRootNodeChildren();
+    Enumeration<TreeNode> children = getRootNodeChildren();
     while (children.hasMoreElements()) {
-      ParentNode classNode = children.nextElement();
+      ParentNode classNode = (ParentNode)children.nextElement();
       sortNode(classNode, myComparator);
       myTreeModel.nodeStructureChanged(classNode);
     }
@@ -548,9 +546,9 @@ public class MemberChooser<T extends ClassMember> extends DialogWrapper implemen
 
   private static void sortNode(ParentNode node, final Comparator<ElementNode> sortComparator) {
     ArrayList<MemberNode> arrayList = new ArrayList<MemberNode>();
-    Enumeration<MemberNode> children = node.children();
+    Enumeration<TreeNode> children = node.children();
     while (children.hasMoreElements()) {
-      arrayList.add(children.nextElement());
+      arrayList.add((MemberNode)children.nextElement());
     }
 
     Collections.sort(arrayList, sortComparator);
@@ -571,16 +569,16 @@ public class MemberChooser<T extends ClassMember> extends DialogWrapper implemen
     DefaultMutableTreeNode root = getRootNode();
     if (!myShowClasses || myContainerNodes.isEmpty()) {
       List<ParentNode> otherObjects = new ArrayList<ParentNode>();
-      Enumeration<ParentNode> children = getRootNodeChildren();
+      Enumeration<TreeNode> children = getRootNodeChildren();
       ParentNode newRoot = new ParentNode(null, new MemberChooserObjectBase(getAllContainersNodeName()), new Ref<Integer>(0));
       while (children.hasMoreElements()) {
-        final ParentNode nextElement = children.nextElement();
+        final ParentNode nextElement = (ParentNode)children.nextElement();
         if (nextElement instanceof ContainerNode) {
           final ContainerNode containerNode = (ContainerNode)nextElement;
-          Enumeration<MemberNode> memberNodes = containerNode.children();
+          Enumeration<TreeNode> memberNodes = containerNode.children();
           List<MemberNode> memberNodesList = new ArrayList<MemberNode>();
           while (memberNodes.hasMoreElements()) {
-            memberNodesList.add(memberNodes.nextElement());
+            memberNodesList.add((MemberNode)memberNodes.nextElement());
           }
           for (MemberNode memberNode : memberNodesList) {
             newRoot.add(memberNode);
@@ -595,13 +593,13 @@ public class MemberChooser<T extends ClassMember> extends DialogWrapper implemen
       if (newRoot.children().hasMoreElements()) root.add(newRoot);
     }
     else {
-      Enumeration<ParentNode> children = getRootNodeChildren();
+      Enumeration<TreeNode> children = getRootNodeChildren();
       while (children.hasMoreElements()) {
-        ParentNode allClassesNode = children.nextElement();
-        Enumeration<MemberNode> memberNodes = allClassesNode.children();
+        ParentNode allClassesNode = (ParentNode)children.nextElement();
+        Enumeration<TreeNode> memberNodes = allClassesNode.children();
         ArrayList<MemberNode> arrayList = new ArrayList<MemberNode>();
         while (memberNodes.hasMoreElements()) {
-          arrayList.add(memberNodes.nextElement());
+          arrayList.add((MemberNode)memberNodes.nextElement());
         }
         Collections.sort(arrayList, myComparator);
         for (MemberNode memberNode : arrayList) {
@@ -626,7 +624,7 @@ public class MemberChooser<T extends ClassMember> extends DialogWrapper implemen
     return IdeBundle.message("node.memberchooser.all.classes");
   }
 
-  private Enumeration<ParentNode> getRootNodeChildren() {
+  private Enumeration<TreeNode> getRootNodeChildren() {
     return getRootNode().children();
   }
 
index c848939cf39849f680723b344e22fd29d3a21350..478f60eed51aea2c2cd26dc5769b1ca32562cbf7 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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,10 +33,10 @@ import java.util.List;
 
 public abstract class BaseToolManager<T extends Tool> implements ExportableApplicationComponent {
 
-  private final ActionManagerEx myActionManager;
+  @NotNull private final ActionManagerEx myActionManager;
   private final SchemesManager<ToolsGroup<T>, ToolsGroup<T>> mySchemesManager;
 
-  public BaseToolManager(ActionManagerEx actionManagerEx, SchemesManagerFactory factory) {
+  public BaseToolManager(@NotNull ActionManagerEx actionManagerEx, SchemesManagerFactory factory) {
     myActionManager = actionManagerEx;
 
     mySchemesManager = factory.createSchemesManager(
index 3083ffed6de948b0ef6e9012bd77a3c4047a07ab..663dccce5ed8abbe88adf1313b9f01edb0342b96 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 import java.awt.*;
 import java.util.Enumeration;
@@ -84,9 +85,9 @@ public class DuplicateNodeRenderer {
   private static Rectangle getExpandedNodesRect(JTree tree, DefaultMutableTreeNode node, TreePath path) {
     Rectangle rect = tree.getRowBounds(tree.getRowForPath(path));
     if (tree.isExpanded(path)) {
-      Enumeration<DefaultMutableTreeNode> children = node.children();
+      Enumeration<TreeNode> children = node.children();
       while (children.hasMoreElements()) {
-        DefaultMutableTreeNode child = children.nextElement();
+        DefaultMutableTreeNode child = (DefaultMutableTreeNode)children.nextElement();
         TreePath childPath = path.pathByAddingChild(child);
         assert !path.equals(childPath) : path+";"+child;
         rect = union(rect, getExpandedNodesRect(tree, child, childPath));
diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/ListItemDescriptorAdapter.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/ListItemDescriptorAdapter.java
new file mode 100644 (file)
index 0000000..e11e70c
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2000-2009 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.
+ */
+package com.intellij.openapi.ui.popup;
+
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+public abstract class ListItemDescriptorAdapter<T> implements ListItemDescriptor<T> {
+  @Nullable
+  @Override
+  public String getCaptionAboveOf(T value) {
+    return null;
+  }
+
+  @Nullable
+  @Override
+  public String getTooltipFor(T value) {
+    return null;
+  }
+
+  @Override
+  public Icon getIconFor(T value) {
+    return null;
+  }
+
+  @Override
+  public boolean hasSeparatorAboveOf(T value) {
+    return false;
+  }
+}
\ No newline at end of file
index a842f623ac4569e84ec600434b277adf879822f3..43f06bff285005611d77dbd88d6c39a5e17927f4 100644 (file)
@@ -49,7 +49,7 @@ public class JBEditorTabs extends JBTabsImpl {
   private JBEditorTabsPainter myDefaultPainter = new DefaultEditorTabsPainter();
 
 
-  public JBEditorTabs(@Nullable Project project, ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
+  public JBEditorTabs(@Nullable Project project, @NotNull ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
     super(project, actionManager, focusManager, parent);
   }
 
index 7368b757d4568b6c3da358100657e409c38b3be5..347710f50e3aeaceec49a5c30626ba92d0cf4164 100644 (file)
@@ -28,6 +28,7 @@ import com.intellij.openapi.wm.*;
 import com.intellij.ui.*;
 import com.intellij.ui.awt.RelativePoint;
 import com.intellij.ui.awt.RelativeRectangle;
+import com.intellij.ui.components.OrphanGuardian;
 import com.intellij.ui.switcher.QuickActionProvider;
 import com.intellij.ui.switcher.SwitchProvider;
 import com.intellij.ui.switcher.SwitchTarget;
@@ -36,6 +37,7 @@ import com.intellij.ui.tabs.impl.singleRow.SingleRowLayout;
 import com.intellij.ui.tabs.impl.singleRow.SingleRowPassInfo;
 import com.intellij.ui.tabs.impl.table.TableLayout;
 import com.intellij.ui.tabs.impl.table.TablePassInfo;
+import com.intellij.util.Consumer;
 import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.Animator;
@@ -69,7 +71,7 @@ public class JBTabsImpl extends JComponent
 
   public static final Color MAC_AQUA_BG_COLOR = Gray._200;
 
-  final ActionManager myActionManager;
+  @NotNull final ActionManager myActionManager;
   private final List<TabInfo> myVisibleInfos = new ArrayList<TabInfo>();
   private final Map<TabInfo, Integer> myHiddenInfos = new HashMap<TabInfo, Integer>();
 
@@ -153,8 +155,8 @@ public class JBTabsImpl extends JComponent
   private JBTabsPosition myPosition = JBTabsPosition.top;
 
   private final TabsBorder myBorder = new TabsBorder(this);
-  private BaseNavigationAction myNextAction;
-  private BaseNavigationAction myPrevAction;
+  private final BaseNavigationAction myNextAction;
+  private final BaseNavigationAction myPrevAction;
 
   private boolean myTabDraggingEnabled;
   private DragHelper myDragHelper;
@@ -186,7 +188,7 @@ public class JBTabsImpl extends JComponent
     this(project, ActionManager.getInstance(), focusManager, parent);
   }
 
-  public JBTabsImpl(@Nullable Project project, ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
+  public JBTabsImpl(@Nullable Project project, @NotNull ActionManager actionManager, IdeFocusManager focusManager, @NotNull Disposable parent) {
     myProject = project;
     myActionManager = actionManager;
     myFocusManager = focusManager != null ? focusManager : IdeFocusManager.getGlobalInstance();
@@ -198,13 +200,11 @@ public class JBTabsImpl extends JComponent
 
     myNavigationActions = new DefaultActionGroup();
 
-    if (myActionManager != null) {
-      myNextAction = new SelectNextAction(this, myActionManager);
-      myPrevAction = new SelectPreviousAction(this, myActionManager);
+    myNextAction = new SelectNextAction(this, myActionManager);
+    myPrevAction = new SelectPreviousAction(this, myActionManager);
 
-      myNavigationActions.add(myNextAction);
-      myNavigationActions.add(myPrevAction);
-    }
+    myNavigationActions.add(myNextAction);
+    myNavigationActions.add(myPrevAction);
 
     setUiDecorator(null);
 
@@ -316,6 +316,16 @@ public class JBTabsImpl extends JComponent
         }
       }
     };
+    putClientProperty(OrphanGuardian.CLIENT_PROPERTY_KEY, new OrphanGuardian() {
+
+      @Override
+      public void iterateOrphans(Consumer<JComponent> consumer) {
+        for (TabInfo info : getVisibleInfos()) {
+          if (info == mySelectedInfo) continue;
+          consumer.consume(info.getComponent());
+        }
+      }
+    });
   }
 
   protected SingleRowLayout createSingleRowLayout() {
@@ -452,14 +462,14 @@ public class JBTabsImpl extends JComponent
   }
 
   private void addTimerUpdate() {
-    if (myActionManager != null && !myListenerAdded) {
+    if (!myListenerAdded) {
       myActionManager.addTimerListener(500, this);
       myListenerAdded = true;
     }
   }
 
   private void removeTimerUpdate() {
-    if (myActionManager != null && myListenerAdded) {
+    if (myListenerAdded) {
       myActionManager.removeTimerListener(this);
       myListenerAdded = false;
     }
@@ -1408,7 +1418,7 @@ public class JBTabsImpl extends JComponent
       final ActionGroup group = info.getGroup();
       final JComponent side = info.getSideComponent();
 
-      if (group != null && myTabs.myActionManager != null) {
+      if (group != null) {
         final String place = info.getPlace();
         ActionToolbar toolbar =
           myTabs.myActionManager.createActionToolbar(place != null ? place : ActionPlaces.UNKNOWN, group, myTabs.myHorizontalSide);
@@ -2755,8 +2765,7 @@ public class JBTabsImpl extends JComponent
   }
 
   private static boolean isChanged(Object oldObject, Object newObject) {
-    if (oldObject == null && newObject == null) return false;
-    return oldObject != null && !oldObject.equals(newObject) || newObject != null && !newObject.equals(oldObject);
+    return !Comparing.equal(oldObject, newObject);
   }
 
   @Override
@@ -2794,12 +2803,11 @@ public class JBTabsImpl extends JComponent
   }
 
   private abstract static class BaseNavigationAction extends AnAction {
-
     private final ShadowAction myShadow;
-    private final ActionManager myActionManager;
+    @NotNull private final ActionManager myActionManager;
     private final JBTabsImpl myTabs;
 
-    protected BaseNavigationAction(final String copyFromID, JBTabsImpl tabs, ActionManager mgr) {
+    protected BaseNavigationAction(@NotNull String copyFromID, @NotNull JBTabsImpl tabs, @NotNull ActionManager mgr) {
       myActionManager = mgr;
       myTabs = tabs;
       myShadow = new ShadowAction(this, myActionManager.getAction(copyFromID), tabs);
@@ -2867,7 +2875,7 @@ public class JBTabsImpl extends JComponent
 
   private static class SelectNextAction extends BaseNavigationAction {
 
-    private SelectNextAction(JBTabsImpl tabs, ActionManager mgr) {
+    private SelectNextAction(JBTabsImpl tabs, @NotNull ActionManager mgr) {
       super(IdeActions.ACTION_NEXT_TAB, tabs, mgr);
     }
 
@@ -2883,7 +2891,7 @@ public class JBTabsImpl extends JComponent
   }
 
   private static class SelectPreviousAction extends BaseNavigationAction {
-    private SelectPreviousAction(JBTabsImpl tabs, ActionManager mgr) {
+    private SelectPreviousAction(JBTabsImpl tabs, @NotNull ActionManager mgr) {
       super(IdeActions.ACTION_PREVIOUS_TAB, tabs, mgr);
     }
 
index 2b35ebe7a6fc00600939c3f7f43443338a29dbe7..53b215516c09389b9ff752c86f7fe08f8d4bcca5 100644 (file)
@@ -94,6 +94,6 @@ public class CustomizeKeyboardSchemeStepPanel extends AbstractCustomizeWizardSte
 
   @Override
   public String getHTMLFooter() {
-    return "Keymap scheme can be later changed in " + CommonBundle.settingsTitle() + " | Keymap";
+    return "Keymap scheme can be changed later in " + CommonBundle.settingsTitle() + " | Keymap";
   }
 }
index c60ddc44748ddbc87ee380e4ea6641b161608fa2..cc6e16aba6c24e4401090b0dee4f38f43a928aa2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -70,7 +70,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab
     myComponent.myLafComboBox.setModel(new DefaultComboBoxModel(LafManager.getInstance().getInstalledLookAndFeels()));
     myComponent.myLafComboBox.setRenderer(new LafComboBoxRenderer());
 
-    Dictionary<Integer, JLabel> delayDictionary = new Hashtable<Integer, JLabel>();
+    Dictionary<Integer, JComponent> delayDictionary = new Hashtable<Integer, JComponent>();
     delayDictionary.put(new Integer(0), new JLabel("0"));
     delayDictionary.put(new Integer(1200), new JLabel("1200"));
     //delayDictionary.put(new Integer(2400), new JLabel("2400"));
@@ -94,7 +94,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab
 
     myComponent.myAlphaModeRatioSlider.setSize(100, 50);
     @SuppressWarnings({"UseOfObsoleteCollectionType"})
-    Dictionary<Integer, JLabel> dictionary = new Hashtable<Integer, JLabel>();
+    Dictionary<Integer, JComponent> dictionary = new Hashtable<Integer, JComponent>();
     dictionary.put(new Integer(0), new JLabel("0%"));
     dictionary.put(new Integer(50), new JLabel("50%"));
     dictionary.put(new Integer(100), new JLabel("100%"));
index a0b495726f30275da5aa58c23478efb1af77ced7..536ab2e6d71d28e66a468638a744098e39e96669 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -107,7 +107,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
   private final ActionButtonLook myButtonLook = null;
   private final ActionButtonLook myMinimalButtonLook = new InplaceActionButtonLook();
   private final DataManager myDataManager;
-  protected final ActionManagerEx myActionManager;
+  @NotNull protected final ActionManagerEx myActionManager;
 
   private Rectangle myAutoPopupRec;
 
@@ -135,7 +135,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
                            @NotNull final ActionGroup actionGroup,
                            final boolean horizontal,
                            DataManager dataManager,
-                           ActionManagerEx actionManager,
+                           @NotNull ActionManagerEx actionManager,
                            KeymapManagerEx keymapManager) {
     this(place, actionGroup, horizontal, false, dataManager, actionManager, keymapManager, false);
   }
@@ -144,7 +144,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
                            final boolean horizontal,
                            final boolean decorateButtons,
                            DataManager dataManager,
-                           ActionManagerEx actionManager,
+                           @NotNull ActionManagerEx actionManager,
                            KeymapManagerEx keymapManager) {
     this(place, actionGroup, horizontal, decorateButtons, dataManager, actionManager, keymapManager, false);
   }
@@ -154,7 +154,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
                            final boolean horizontal,
                            final boolean decorateButtons,
                            DataManager dataManager,
-                           ActionManagerEx actionManager,
+                           @NotNull ActionManagerEx actionManager,
                            KeymapManagerEx keymapManager,
                            boolean updateActionsNow) {
     super(null);
@@ -1185,7 +1185,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
                         final ActionGroup actionGroup,
                         final boolean horizontal,
                         final DataManager dataManager,
-                        final ActionManagerEx actionManager,
+                        @NotNull ActionManagerEx actionManager,
                         final KeymapManagerEx keymapManager,
                         JComponent parent) {
       super(place, actionGroup, horizontal, false, dataManager, actionManager, keymapManager, true);
index 7859e9047b36ed29c230949c8d957cde603ea05a..46fae517170d659727c83dc7bfd945292f2b5949 100644 (file)
@@ -781,8 +781,8 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App
   }
 
   @Override
-  public void restart(boolean exitConfirmed) {
-    exit(exitConfirmed, exitConfirmed, true, true);
+  public void restart(final boolean exitConfirmed) {
+    exit(false, exitConfirmed, true, true);
   }
 
   /*
@@ -801,7 +801,7 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App
 
     exiting = true;
     try {
-      if (!force && getDefaultModalityState() != ModalityState.NON_MODAL) {
+      if (!force && !exitConfirmed && getDefaultModalityState() != ModalityState.NON_MODAL) {
         return;
       }
 
index 5da1077baf5c6b0c62ab0d28f8bd429fc1333233..71dee99c35142f7165ce17206250e33835fa1216 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -28,7 +28,7 @@ public interface EditorMarkupModel extends MarkupModel {
 
   void setErrorStripeVisible(boolean val);
 
-  void setErrorStripeRenderer(ErrorStripeRenderer renderer);
+  void setErrorStripeRenderer(@NotNull ErrorStripeRenderer renderer);
   ErrorStripeRenderer getErrorStripeRenderer();
 
   void addErrorMarkerListener(@NotNull ErrorStripeListener listener, @NotNull Disposable parent);
index c0ffbd10aca4067e8863840d76877bd93f2c2d55..2a6a62beeefd4bf670b2d5ce10163ca25c1fd2f6 100644 (file)
@@ -6749,10 +6749,17 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
     public Insets getBorderInsets(Component c) {
       Container splitters = SwingUtilities.getAncestorOfClass(EditorsSplitters.class, c);
       boolean thereIsSomethingAbove = !SystemInfo.isMac || UISettings.getInstance().SHOW_MAIN_TOOLBAR || UISettings.getInstance().SHOW_NAVIGATION_BAR ||
-                                      myProject != null && !ToolWindowManagerEx.getInstanceEx(myProject).getIdsOn(ToolWindowAnchor.TOP).isEmpty();
+                                      toolWindowIsNotEmpty();
       return splitters == null ? super.getBorderInsets(c) : new Insets(thereIsSomethingAbove ? 1 : 0, 0, 0, 0);
     }
 
+    public boolean toolWindowIsNotEmpty() {
+      if (myProject == null) return false;
+      ToolWindowManagerEx m = ToolWindowManagerEx.getInstanceEx(myProject);
+      if (m == null) return false;
+      return !m.getIdsOn(ToolWindowAnchor.TOP).isEmpty();
+    }
+
     @Override
     public boolean isBorderOpaque() {
       return true;
index 6ec29e58dc0b0ff59c467a188ada686a6d791ebc..20c08ec4ec99703bfaf971f5860237a6fa4b2483 100644 (file)
@@ -368,7 +368,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark
   }
 
   @Override
-  public void setErrorStripeRenderer(ErrorStripeRenderer renderer) {
+  public void setErrorStripeRenderer(@NotNull ErrorStripeRenderer renderer) {
     assertIsDispatchThread();
     if (myErrorStripeRenderer instanceof Disposable) {
       Disposer.dispose((Disposable)myErrorStripeRenderer);
index 63843a932076edf802050cddc7a5d8349df0d7ee..64f56eb750eb0fc7ba7b24d9ea8210e02231bb15 100644 (file)
@@ -285,7 +285,7 @@ public abstract class FileTextFieldImpl implements FileLookup, Disposable, FileT
       myList = new JBList();
       myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
-      myList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptor() {
+      myList.setCellRenderer(new GroupedItemsListRenderer(new ListItemDescriptorAdapter() {
         public String getTextFor(final Object value) {
           final LookupFile file = (LookupFile)value;
 
@@ -298,10 +298,6 @@ public abstract class FileTextFieldImpl implements FileLookup, Disposable, FileT
 
         }
 
-        public String getTooltipFor(final Object value) {
-          return null;
-        }
-
         public Icon getIconFor(final Object value) {
           final LookupFile file = (LookupFile)value;
           return file.getIcon();
index 091ff1171157562810ffc4eff514f82080d18430..cce6de27545dfc2e68c2a17da5623535e9af0eeb 100644 (file)
@@ -621,6 +621,7 @@ public class FileDocumentManagerImpl extends FileDocumentManager implements Virt
               DocumentEx documentEx = (DocumentEx)document;
               documentEx.setReadOnly(false);
               LoadTextUtil.setCharsetWasDetectedFromBytes(file, null);
+              file.setBOM(null); // reset BOM in case we had one and the external change stripped it away
               documentEx.replaceText(LoadTextUtil.loadText(file), file.getModificationStamp());
               documentEx.setReadOnly(!wasWritable);
             }
index c7fa51f770d148bcfc6bf2fcdd0fab3228606193..bab6d2b2fa4f2d5cbc7ced5004b91fb2a5632c14 100644 (file)
@@ -1636,7 +1636,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
    */
   private final class MyVirtualFileListener extends VirtualFileAdapter {
     @Override
-    public void beforeFileDeletion(VirtualFileEvent e) {
+    public void beforeFileDeletion(@NotNull VirtualFileEvent e) {
       assertDispatchThread();
 
       boolean moveFocus = moveFocusOnDelete();
@@ -1651,7 +1651,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
     }
 
     @Override
-    public void propertyChanged(VirtualFilePropertyEvent e) {
+    public void propertyChanged(@NotNull VirtualFilePropertyEvent e) {
       if (VirtualFile.PROP_NAME.equals(e.getPropertyName())) {
         assertDispatchThread();
         final VirtualFile file = e.getFile();
@@ -1681,7 +1681,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
     }
 
     @Override
-    public void fileMoved(VirtualFileMoveEvent e) {
+    public void fileMoved(@NotNull VirtualFileMoveEvent e) {
       final VirtualFile file = e.getFile();
       final VirtualFile[] openFiles = getOpenFiles();
       for (final VirtualFile openFile : openFiles) {
index 7ae180a8b0f2968372cbfc766fda270f9b177bb3..0924bc4c5f188c1f0ee3c967915c2b79ab422395 100644 (file)
@@ -952,12 +952,14 @@ public class OptionsTree extends JPanel implements Disposable, OptionsEditorColl
         SimpleNode node = myTree.getNodeFor(path);
         if (node instanceof FilteringTreeStructure.FilteringNode) {
           Object delegate = ((FilteringTreeStructure.FilteringNode)node).getDelegate();
-          if (delegate instanceof EditorNode) {
+          while (delegate instanceof EditorNode) {
             EditorNode editor = (EditorNode)delegate;
             ConfigurableGroup group = editor.getGroup();
             if (group != null) {
               name = group.getDisplayName();
+              break;
             }
+            delegate = editor.getParent();
           }
         }
         if (name != null) {
@@ -969,9 +971,18 @@ public class OptionsTree extends JPanel implements Disposable, OptionsEditorColl
             bounds.height = height;
           }
           g.setColor(myTree.getBackground());
-          g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
-          g.setColor(myTree.getForeground());
-          g.drawLine(0, bounds.height, bounds.width, bounds.height);
+          if (g instanceof Graphics2D) {
+            int h = bounds.height / 3;
+            int y = bounds.y + bounds.height - h;
+            g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height - h);
+            ((Graphics2D)g).setPaint(UIUtil.getGradientPaint(
+              0, y, g.getColor(),
+              0, y + h, ColorUtil.toAlpha(g.getColor(), 0)));
+            g.fillRect(bounds.x, y, bounds.width, h);
+          }
+          else {
+            g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
+          }
           mySeparator.setBounds(bounds);
           mySeparator.paint(g);
         }
index b24aa64d930f560a2e47b2916fbe404ff8b833a0..b1b21d4468e8d998c93714a5ad5b09cd9ab5ede7 100644 (file)
@@ -17,7 +17,6 @@ package com.intellij.openapi.progress.impl;
 
 import com.intellij.concurrency.JobScheduler;
 import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.Application;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.application.ModalityState;
 import com.intellij.openapi.application.ex.ApplicationEx;
@@ -46,7 +45,7 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
-public class ProgressManagerImpl extends ProgressManager implements Disposable{
+public class ProgressManagerImpl extends ProgressManager implements Disposable {
   private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.progress.impl.ProgressManagerImpl");
   private final AtomicInteger myCurrentUnsafeProgressCount = new AtomicInteger(0);
   private final AtomicInteger myCurrentModalProgressCount = new AtomicInteger(0);
@@ -55,7 +54,7 @@ public class ProgressManagerImpl extends ProgressManager implements Disposable{
   private static final boolean DISABLED = "disabled".equals(System.getProperty("idea.ProcessCanceledException"));
   private final ScheduledFuture<?> myCheckCancelledFuture;
 
-  public ProgressManagerImpl(Application application) {
+  public ProgressManagerImpl() {
     if (DISABLED) {
       myCheckCancelledFuture = null;
     }
@@ -501,10 +500,6 @@ public class ProgressManagerImpl extends ProgressManager implements Disposable{
 
   @Override
   public void dispose() {
-    stopCheckCanceled();
-  }
-
-  private void stopCheckCanceled() {
     if (myCheckCancelledFuture != null) myCheckCancelledFuture.cancel(false);
   }
 
index 5d657487f6a51e94c5f8b67fd8cc1c0f52703065..1428ffc9b29db099a17a705818609cc9cdb1aac3 100644 (file)
@@ -16,7 +16,7 @@
 package com.intellij.ui.popup.list;
 
 import com.intellij.icons.AllIcons;
-import com.intellij.openapi.ui.popup.ListItemDescriptor;
+import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
 import com.intellij.openapi.ui.popup.ListPopupStep;
 import com.intellij.ui.ColorUtil;
 import com.intellij.util.ui.UIUtil;
@@ -27,17 +27,12 @@ public class PopupListElementRenderer extends GroupedItemsListRenderer {
   private final ListPopupImpl myPopup;
 
   public PopupListElementRenderer(final ListPopupImpl aPopup) {
-    super(new ListItemDescriptor() {
+    super(new ListItemDescriptorAdapter() {
       @Override
       public String getTextFor(Object value) {
         return aPopup.getListStep().getTextFor(value);
       }
 
-      @Override
-      public String getTooltipFor(Object value) {
-        return null;
-      }
-
       @Override
       public Icon getIconFor(Object value) {
         return aPopup.getListStep().getIconFor(value);
index 5d539357ca3d284ab2850462bfdfe9d364666e07..75d0f242e38c6b6f66caf0a949d208fe2aafb094 100644 (file)
@@ -360,7 +360,7 @@ label.collapse.by.default=Collapse by default:
 checkbox.show.code.folding.outline=Show code folding outline
 group.tab.appearance=Tab Appearance
 editbox.tab.limit=Tab limit:
-editbox.tab.title.limit=Tab title limit:
+editbox.tab.title.limit=Tab title limit (characters):
 combobox.editor.tab.placement=Placement:
 checkbox.editor.tabs.in.single.row=Show tabs in single row
 checkbox.editor.tabs.show.close.button=Show "close" button on editor tabs
index 155e2b6c6d743bc4d4019a4ffad69c91f18bf052..183dda3d52b8c89e57d248a0de087f82d3529fef 100644 (file)
@@ -171,6 +171,7 @@ terminating.process.progress.kill=Kill process
 waiting.for.vm.detach.progress.text=Waiting for process detach
 restart.error.message.title=Restart Error
 rerun.configuration.action.name=Rerun ''{0}''
+stop.configuration.action.name=Stop ''{0}''
 rerun.singleton.confirmation.message=''{0}'' is single-instance run configuration.\nAre you sure you want to stop {1, choice, 1#the running one|2#{1, number} running instances}?
 rerun.confirmation.button.text=Stop and Rerun
 rerun.confirmation.checkbox=Confirm rerun with process termination
index 40940d68747152dc3caa6ade9ed797dd2199538e..a339716f031efa2491f6e5fb6755e695c4e832d7 100644 (file)
@@ -667,7 +667,7 @@ unused.library.roots.problem.descriptor=Unused roots {0} from library ''{1}''
 unused.library.backward.analysis.job.description=Perform backward analysis
 inspection.duplicates.option.report.propertykey.expressions=&Ignore @PropertyKey expressions
 inspection.same.parameter.fix.name=Inline value ''{1}'' for parameter ''{0}''
-fix.all.inspection.problems.in.file=Fix all ''{0}'' problems
+fix.all.inspection.problems.in.file=Fix all ''{0}'' problems in file
 cleanup.in.file=Cleanup code
 cleanup.in.scope=Cleanup code on...
 severities.default.settings.message=Edit Settings|Colors \\& Fonts
index 65fa309fe3b9b891abb1371db3a3557aaa2d14c4..e57e0cf0f70ee491c633187f7f088401e42f90c0 100644 (file)
     </group>
 
     <group id="XDebugger.ToolWindow.LeftToolbar">
+      <reference ref="Rerun"/>
       <reference ref="Resume"/>
       <reference ref="Pause"/>
       <reference ref="Stop"/>
index 6ba1e4aa12de3e0a8596f55924194226608d6ae4..bbcbe9b4c2f24999ef3531e8d98753381ddefc01 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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,11 +20,7 @@ import com.intellij.history.integration.TestVirtualFile;
 import com.intellij.history.integration.ui.actions.LocalHistoryAction;
 import com.intellij.history.integration.ui.actions.ShowHistoryAction;
 import com.intellij.history.integration.ui.actions.ShowSelectionHistoryAction;
-import com.intellij.openapi.actionSystem.AnAction;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.actionSystem.CommonDataKeys;
-import com.intellij.openapi.actionSystem.DataContext;
-import com.intellij.openapi.actionSystem.PlatformDataKeys;
+import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.editor.Document;
 import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.editor.EditorFactory;
@@ -135,6 +131,6 @@ public class LocalHistoryActionsTest extends LocalHistoryUITestCase {
         return null;
       }
     };
-    return new AnActionEvent(null, dc, "", a.getTemplatePresentation(), null, -1);
+    return new AnActionEvent(null, dc, "", a.getTemplatePresentation(), ActionManager.getInstance(), -1);
   }
 }
index 4544a7e547f11bdb139e20b26e766dbeddcce28c..1f3f1a8a248d05fa431d3791322114ace15470fc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -16,6 +16,7 @@
 package com.intellij.ui.tabs.impl;
 
 import com.intellij.icons.AllIcons;
+import com.intellij.openapi.actionSystem.ActionManager;
 import com.intellij.openapi.actionSystem.DefaultActionGroup;
 import com.intellij.openapi.util.Disposer;
 import com.intellij.openapi.util.IconLoader;
@@ -46,7 +47,7 @@ public class JBTabsDemo {
     final JFrame frame = new JFrame();
     frame.getContentPane().setLayout(new BorderLayout(0, 0));
     final int[] count = new int[1];
-    final JBTabsImpl tabs = new JBTabsImpl(null, null, null, Disposer.newDisposable());
+    final JBTabsImpl tabs = new JBTabsImpl(null, ActionManager.getInstance(), null, Disposer.newDisposable());
     tabs.setTestMode(true);
 
 
index d1b3d6c818b65ba6bb41090e208c45267de9ad8e..e6ffe43ca59a36d7048b80eedbcf15d374a6fc04 100644 (file)
@@ -481,12 +481,7 @@ public abstract class StructuralSearchProfileBase extends StructuralSearchProfil
     private void visitLiteral(PsiElement literal) {
       String value = literal.getText();
 
-      if (value.length() <= 2) {
-        return;
-      }
-      if ((value.charAt(0) == '"' && value.charAt(value.length() - 1) == '"') ||
-          (value.charAt(0) == '\'' && value.charAt(value.length() - 1) == '\'')) {
-
+      if (value.length() > 2 && StringUtil.isQuotedString(value)) {
         if (mySubstitutionPatterns == null) {
           final String[] prefixes = myGlobalVisitor.getContext().getPattern().getTypedVarPrefixes();
           mySubstitutionPatterns = createPatterns(prefixes);
index 2a5473a7cfb314a84644978bd830ace63b654dd1..735147b85bfbda0370c77f4e40543dcd71ff918c 100644 (file)
@@ -2963,5 +2963,15 @@ public class StructuralSearchTest extends StructuralSearchTestCase {
       ex = e;
     }
     assertNotNull(ex);
+
+    String pattern3 = "class $Class$ { \n" +
+                      "  class $n$$FieldType$ $FieldName$ = $Init$;\n" +
+                      "}";
+    try {
+      findMatchesCount(source, pattern3);
+    } catch (MalformedPatternException e) {
+      ex = e;
+    }
+    assertNotNull(ex);
   }
 }
index f000733e888110416367aa6d4d742c8c6062421e..46b3adca7557cb7449f8701414f3372f23328862 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -89,7 +89,7 @@ public abstract class ParsingTestCase extends PlatformLiteFixture {
       getApplication().getPicoContainer().registerComponent(new AbstractComponentAdapter(ProgressManager.class.getName(), Object.class) {
         @Override
         public Object getComponentInstance(PicoContainer container) throws PicoInitializationException, PicoIntrospectionException {
-          return new ProgressManagerImpl(getApplication());
+          return new ProgressManagerImpl();
         }
 
         @Override
index e418e553fb6b87c09f62ace62551fbf6b9c6ed4a..d41ea08161b33a1d79036c8296a3d26dc71ef0a0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -18,6 +18,7 @@ package com.intellij.openapi.util.registry;
 import com.intellij.util.containers.HashMap;
 import org.jdom.Element;
 import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.PropertyKey;
 
 import java.awt.*;
@@ -33,30 +34,29 @@ public class Registry  {
   @NonNls
   private static final String REGISTRY_BUNDLE = "misc.registry";
 
-  private final LinkedHashMap<String, String> myUserProperties = new LinkedHashMap<String, String>();
+  private final Map<String, String> myUserProperties = new LinkedHashMap<String, String>();
   private final Map<String, String> myLoadedUserProperties = new HashMap<String, String>();
   private final Map<String, RegistryValue> myValues = new ConcurrentHashMap<String, RegistryValue>();
 
   private static final Registry ourInstance = new Registry();
 
-  public static RegistryValue get(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key) {
+  @NotNull
+  public static RegistryValue get(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key) {
     final Registry registry = getInstance();
 
-    if (registry.myValues.containsKey(key)) {
-      return registry.myValues.get(key);
-    }
-    else {
-      final RegistryValue value = new RegistryValue(registry, key);
+    RegistryValue value = registry.myValues.get(key);
+    if (value == null) {
+      value = new RegistryValue(registry, key);
       registry.myValues.put(key, value);
-      return value;
     }
+    return value;
   }
 
-  public static boolean is(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key) {
+  public static boolean is(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key) throws MissingResourceException {
     return get(key).asBoolean();
   }
 
-  public static boolean is(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key, boolean defaultValue) {
+  public static boolean is(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key, boolean defaultValue) {
     try {
       return get(key).asBoolean();
     }
@@ -65,11 +65,11 @@ public class Registry  {
     }
   }
 
-  public static int intValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key) {
+  public static int intValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key) throws MissingResourceException {
     return get(key).asInteger();
   }
 
-  public static int intValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key, int defaultValue) {
+  public static int intValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key, int defaultValue) {
     try {
       return get(key).asInteger();
     }
@@ -78,18 +78,20 @@ public class Registry  {
     }
   }
 
-  public static double doubleValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key) {
+  public static double doubleValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key) throws MissingResourceException {
     return get(key).asDouble();
   }
 
-  public static String stringValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key) {
+  @NotNull
+  public static String stringValue(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key) throws MissingResourceException {
     return get(key).asString();
   }
 
-  public static Color getColor(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) String key, Color defaultValue) {
+  public static Color getColor(@PropertyKey(resourceBundle = REGISTRY_BUNDLE) @NotNull String key, Color defaultValue) throws MissingResourceException {
     return get(key).asColor(defaultValue);
   }
 
+  @NotNull
   static ResourceBundle getBundle() {
     ResourceBundle bundle = com.intellij.reference.SoftReference.dereference(ourBundle);
     if (bundle == null) {
@@ -104,6 +106,7 @@ public class Registry  {
     return ourInstance;
   }
 
+  @NotNull
   public Element getState() {
     final Element state = new Element("registry");
     for (String eachKey : myUserProperties.keySet()) {
@@ -115,7 +118,7 @@ public class Registry  {
     return state;
   }
 
-  public void loadState(Element state) {
+  public void loadState(@NotNull Element state) {
     final List entries = state.getChildren("entry");
     for (Object each : entries) {
       final Element eachEntry = (Element) each;
@@ -132,15 +135,17 @@ public class Registry  {
     }
   }
 
+  @NotNull
   Map<String, String> getUserProperties() {
     return myUserProperties;
   }
 
+  @NotNull
   public static List<RegistryValue> getAll() {
     final ResourceBundle bundle = getBundle();
     final Enumeration<String> keys = bundle.getKeys();
 
-    final ArrayList<RegistryValue> result = new ArrayList<RegistryValue>();
+    List<RegistryValue> result = new ArrayList<RegistryValue>();
 
     while (keys.hasMoreElements()) {
       final String each = keys.nextElement();
@@ -152,7 +157,7 @@ public class Registry  {
   }
 
   public void restoreDefaults() {
-    final HashMap<String, String> old = new HashMap<String, String>();
+    Map<String, String> old = new HashMap<String, String>();
     old.putAll(myUserProperties);
     for (String each : old.keySet()) {
       get(each).resetToDefault();      
@@ -167,7 +172,7 @@ public class Registry  {
     return isRestartNeeded(myUserProperties) || isRestartNeeded(myLoadedUserProperties);
   }
 
-  private static boolean isRestartNeeded(Map<String, String> map) {
+  private static boolean isRestartNeeded(@NotNull Map<String, String> map) {
     for (String s : map.keySet()) {
       final RegistryValue eachValue = get(s);
       if (eachValue.isRestartRequired() && eachValue.isChangedSinceAppStart()) return true;
index 6c89311457f469deb341d6da3030123449511fb0..ae3873b8744f534535d906d731819bdc7627243c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -42,16 +42,18 @@ public class RegistryValue {
   private Double myDoubleCachedValue;
   private Boolean myBooleanCachedValue;
 
-  RegistryValue(Registry registry, String key) {
+  RegistryValue(@NotNull Registry registry, @NotNull String key) {
     myRegistry = registry;
     myKey = key;
   }
 
+  @NotNull
   public String getKey() {
     return myKey;
   }
 
 
+  @NotNull
   public String asString() {
     final String value = get(myKey, null, true);
     assert value != null : myKey;
@@ -97,6 +99,7 @@ public class RegistryValue {
     return defaultValue;
   }
 
+  @NotNull
   public String getDescription() {
     return get(myKey + ".description", "", false);
   }
@@ -109,42 +112,36 @@ public class RegistryValue {
     return !asString().equals(getBundleValue(myKey, false));
   }
 
-  private String get(String key, String defaultValue, boolean isValue) {
+  private String get(@NotNull String key, String defaultValue, boolean isValue) throws MissingResourceException {
     if (isValue) {
       if (myStringCachedValue == null) {
         myStringCachedValue = _get(key, defaultValue, isValue);
-      }
-      if (isBoolean()) {
-        myStringCachedValue = Boolean.valueOf(myStringCachedValue).toString();
+        if (isBoolean()) {
+          myStringCachedValue = Boolean.valueOf(myStringCachedValue).toString();
+        }
       }
       return myStringCachedValue;
     }
-    else {
-      return _get(key, defaultValue, isValue);
-    }
+    return _get(key, defaultValue, isValue);
   }
 
-  private String _get(String key, String defaultValue, boolean mustExistInBundle) {
+  private String _get(@NotNull String key, String defaultValue, boolean mustExistInBundle) throws MissingResourceException {
     final String userValue = myRegistry.getUserProperties().get(key);
-    if (userValue == null) {
-      String systemProperty = System.getProperty(key);
-      if (systemProperty != null) {
-        return systemProperty;
-      }
-      final String bundleValue = getBundleValue(key, mustExistInBundle);
-      if (bundleValue != null) {
-        return bundleValue;
-      }
-      else {
-        return defaultValue;
-      }
-    }
-    else {
+    if (userValue != null) {
       return userValue;
     }
+    String systemProperty = System.getProperty(key);
+    if (systemProperty != null) {
+      return systemProperty;
+    }
+    final String bundleValue = getBundleValue(key, mustExistInBundle);
+    if (bundleValue != null) {
+      return bundleValue;
+    }
+    return defaultValue;
   }
 
-  private String getBundleValue(String key, boolean mustExist) {
+  private static String getBundleValue(@NotNull String key, boolean mustExist) throws MissingResourceException {
     try {
       return Registry.getBundle().getString(key);
     }
index df33a80d4cba223b34fd9fc0e21b2a4068ec2df3..d5f6a58dc9516ec108b2572ee0169e26aabd6690 100644 (file)
@@ -95,6 +95,7 @@ public class ReflectionUtil {
            + " loaded by " + ((Class)anInterface).getClassLoader();
   }
 
+  @NotNull
   public static Class<?> getRawType(@NotNull Type type) {
     if (type instanceof Class) {
       return (Class)type;
@@ -288,15 +289,18 @@ public class ReflectionUtil {
     });
   }
 
+  @NotNull
   public static List<Method> getClassPublicMethods(@NotNull Class aClass) {
     return getClassPublicMethods(aClass, false);
   }
-  
+
+  @NotNull
   public static List<Method> getClassPublicMethods(@NotNull Class aClass, boolean includeSynthetic) {
     Method[] methods = aClass.getMethods();
     return includeSynthetic ? Arrays.asList(methods) : filterRealMethods(methods);
   }
 
+  @NotNull
   public static List<Method> getClassDeclaredMethods(@NotNull Class aClass) {
     return getClassDeclaredMethods(aClass, false);
   }
@@ -306,13 +310,15 @@ public class ReflectionUtil {
     Method[] methods = aClass.getDeclaredMethods();
     return includeSynthetic ? Arrays.asList(methods) : filterRealMethods(methods);
   }
+
   @NotNull
   public static List<Field> getClassDeclaredFields(@NotNull Class aClass) {
     Field[] fields = aClass.getDeclaredFields();
     return Arrays.asList(fields);
   }
 
-  private static List<Method> filterRealMethods(Method[] methods) {
+  @NotNull
+  private static List<Method> filterRealMethods(@NotNull Method[] methods) {
     List<Method> result = ContainerUtil.newArrayList();
     for (Method method : methods) {
       if (!method.isSynthetic()) {
@@ -323,8 +329,8 @@ public class ReflectionUtil {
   }
 
   @Nullable
-  public static Class getMethodDeclaringClass(@NotNull Class<?> instanceClass, @NonNls @NotNull String name, @NotNull Class... parameters) {
-    Method method = getMethod(instanceClass, name, parameters);
+  public static Class getMethodDeclaringClass(@NotNull Class<?> instanceClass, @NonNls @NotNull String methodName, @NotNull Class... parameters) {
+    Method method = getMethod(instanceClass, methodName, parameters);
     return method == null ? null : method.getDeclaringClass();
   }
 
index 787ebc3204903b4b54a8ab30cd273fbe5258cd9d..5db4de22b401e4279a17bd3bada90f6122ec1ba5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -147,6 +147,12 @@ public class TransferToEDTQueue<T> {
     }
   }
 
+  public int size() {
+    synchronized (myQueue) {
+      return myQueue.size();
+    }
+  }
+
   // process all queue in current thread
   public void drain() {
     int processed = 0;
index b17fc6cc5c6cf476202355cca45e96cabdcd1b00..475f3cb67a944937f5419a09d2e20b86c24efc95 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -30,7 +30,7 @@ import java.util.Arrays;
 * Date: 7/12/11
 * Time: 1:34 PM
 */
-class IntToIntBtree {
+public class IntToIntBtree {
   public static int version() {
     return 4 + (IOUtil.ourByteBuffersUseNativeByteOrder ? 0xFF : 0);
   }
@@ -55,10 +55,10 @@ class IntToIntBtree {
   private boolean hasZeroKey;
   private int zeroKeyValue;
 
-  private boolean isLarge = true;
+  private final boolean isLarge = true;
   private final ResizeableMappedFile storage;
   private final boolean offloadToSiblingsBeforeSplit = false;
-  private boolean indexNodeIsHashTable = true;
+  private final boolean indexNodeIsHashTable = true;
   final int metaDataLeafPageLength;
   final int hashPageCapacity;
 
@@ -66,8 +66,8 @@ class IntToIntBtree {
   private TIntIntHashMap myCachedMappings;
   private final int myCachedMappingsSize;
 
-  public IntToIntBtree(int _pageSize, File file, PagedFileStorage.StorageLockContext storageLockContext, boolean initial) throws IOException {
-    pageSize = _pageSize;
+  public IntToIntBtree(int pageSize, @NotNull File file, @NotNull PagedFileStorage.StorageLockContext storageLockContext, boolean initial) throws IOException {
+    this.pageSize = pageSize;
 
     if (initial) {
       FileUtil.delete(file);
@@ -82,13 +82,12 @@ class IntToIntBtree {
       root.setIndexLeaf(true);
     }
 
-    int i = (pageSize - BtreePage.RESERVED_META_PAGE_LEN) / BtreeIndexNodeView.INTERIOR_SIZE - 1;
+    int i = (this.pageSize - BtreePage.RESERVED_META_PAGE_LEN) / BtreeIndexNodeView.INTERIOR_SIZE - 1;
     assert i < Short.MAX_VALUE && i % 2 == 0;
     maxInteriorNodes = (short)i;
     maxLeafNodes = (short)i;
 
-    int metaPageLen = BtreePage.RESERVED_META_PAGE_LEN;
-
+    int metaPageLen;
     if (indexNodeIsHashTable) {
       ++i;
       while(!isPrime(i)) i -= 2;
@@ -97,8 +96,10 @@ class IntToIntBtree {
       metaPageLen = BtreePage.RESERVED_META_PAGE_LEN;
       i = (int)(hashPageCapacity * 0.9);
       if ((i & 1) == 1) ++i;
-    } else {
+    }
+    else {
       hashPageCapacity = -1;
+      metaPageLen = BtreePage.RESERVED_META_PAGE_LEN;
     }
 
     metaDataLeafPageLength = metaPageLen;
@@ -108,20 +109,18 @@ class IntToIntBtree {
 
     if (hasCachedMappings) {
       myCachedMappings = new TIntIntHashMap(myCachedMappingsSize = 4 * maxLeafNodes);
-    } else {
+    }
+    else {
       myCachedMappings = null;
       myCachedMappingsSize = -1;
     }
   }
 
-  public void persistVars(BtreeDataStorage storage, boolean toDisk) {
-    if (toDisk) {
-      storage.persistInt(0, height | (hasZeroKey ? HAS_ZERO_KEY_MASK :0), true);
-    } else {
-      int i = storage.persistInt(0, 0, false);
-      hasZeroKey = (i & HAS_ZERO_KEY_MASK) != 0;
-      height = i & ~HAS_ZERO_KEY_MASK;
-    }
+  // return total number of bytes needed for storing information
+  public int persistVars(@NotNull BtreeDataStorage storage, boolean toDisk) {
+    int i = storage.persistInt(0, height | (hasZeroKey ? HAS_ZERO_KEY_MASK :0), toDisk);
+    hasZeroKey = (i & HAS_ZERO_KEY_MASK) != 0;
+    height = i & ~HAS_ZERO_KEY_MASK;
 
     pagesCount = storage.persistInt(4, pagesCount, toDisk);
     movedMembersCount = storage.persistInt(8, movedMembersCount, toDisk);
@@ -132,9 +131,10 @@ class IntToIntBtree {
     hashedPagesCount = storage.persistInt(28, hashedPagesCount, toDisk);
     root.setAddress(storage.persistInt(32, root.address, toDisk));
     zeroKeyValue = storage.persistInt(36, zeroKeyValue, toDisk);
+    return 40;
   }
 
-  interface BtreeDataStorage {
+  public interface BtreeDataStorage {
     int persistInt(int offset, int value, boolean toDisk);
   }
 
@@ -155,10 +155,11 @@ class IntToIntBtree {
   }
 
   private BtreeIndexNodeView myAccessNodeView;
-  private int myLastGetKey, myOptimizedInserts;
+  private int myLastGetKey;
+  private int myOptimizedInserts;
   private boolean myCanUseLastKey;
 
-  public boolean get(int key, int[] result) {
+  public boolean get(int key, @NotNull int[] result) {
     if (key == 0) {
       if (hasZeroKey) {
         result[0] = zeroKeyValue;
@@ -199,7 +200,8 @@ class IntToIntBtree {
     if (hasCachedMappings) {
       myCachedMappings.put(key, value);
       if (myCachedMappings.size() == myCachedMappingsSize) flushCachedMappings();
-    } else {
+    }
+    else {
       boolean canUseLastKey = myCanUseLastKey;
       if (canUseLastKey) {
         myCanUseLastKey = false;
@@ -256,12 +258,12 @@ class IntToIntBtree {
     }
   }
 
-  void doClose() throws IOException {
+  public void doClose() throws IOException {
     myCachedMappings = null;
     storage.close();
   }
 
-  void doFlush() {
+  public void doFlush() {
     flushCachedMappings();
     storage.force();
   }
@@ -445,11 +447,11 @@ class IntToIntBtree {
       putInt(offset, value);
     }
 
-    private final int indexToOffset(int i) {
+    private int indexToOffset(int i) {
       return i * INTERIOR_SIZE + (isHashedLeaf() ? btree.metaDataLeafPageLength:RESERVED_META_PAGE_LEN);
     }
 
-    private final int keyAt(int i) {
+    private int keyAt(int i) {
       if (doSanityCheck) {
         if (isHashedLeaf()) myAssert(i < btree.hashPageCapacity);
         else myAssert(i < getChildrenCount());
@@ -495,7 +497,7 @@ class IntToIntBtree {
       setFlag(INDEX_LEAF_MASK, value);
     }
 
-    private final boolean isHashedLeaf() {
+    private boolean isHashedLeaf() {
       return isHashedLeaf;
     }
 
@@ -608,7 +610,8 @@ class IntToIntBtree {
           if (hashedLeaf) {
             hashLeafData = new HashLeafData(this, recordCount);
             if (doOffloadToSiblingsWhenHashed(parent, hashLeafData)) return parentAddress;
-          } else {
+          }
+          else {
             if (doOffloadToSiblingsSorted(parent)) return parentAddress;
           }
         }
@@ -1074,16 +1077,14 @@ class IntToIntBtree {
 
     private static final boolean useDoubleHash = true;
     private int hashIndex(int value) {
-      int hash, index;
-
       final int length = btree.hashPageCapacity;
-      hash = value & 0x7fffffff;
-      index = hash % length;
+      int hash = value & 0x7fffffff;
+      int index = hash % length;
       int keyAtIndex = keyAt(index);
-      int total = 0;
 
       btree.hashSearchRequests++;
 
+      int total = 0;
       if (useDoubleHash) {
         if (keyAtIndex != value && keyAtIndex != HASH_FREE) {
           // see Knuth, p. 529
@@ -1148,11 +1149,21 @@ class IntToIntBtree {
     if (childrenAddresses.length > 0) {
       BtreeIndexNodeView child = new BtreeIndexNodeView(this);
 
-      for(int i = 0; i < childrenAddresses.length; ++i) {
-        child.setAddress(childrenAddresses[i]);
-        if (!processLeafPages(child, processor))  return false;
+      for (int childrenAddress : childrenAddresses) {
+        child.setAddress(childrenAddress);
+        if (!processLeafPages(child, processor)) return false;
       }
     }
     return true;
   }
+
+  public void withStorageLock(@NotNull Runnable runnable) {
+    storage.getPagedFileStorage().lock();
+    try {
+      runnable.run();
+    }
+    finally {
+      storage.getPagedFileStorage().unlock();
+    }
+  }
 }
index 69315f1b376468e0f52bef3a55b3d6992a448cad..1fca8e063394f8d5c1f1eaa55c62806109d1df76 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -88,11 +88,11 @@ public class PagedFileStorage implements Forceable {
   private static final ByteOrder ourNativeByteOrder = ByteOrder.nativeOrder();
 
   public void lock() {
-    myStorageLockContext.myLock.lock();
+    myStorageLockContext.lock();
   }
 
   public void unlock() {
-    myStorageLockContext.myLock.unlock();
+    myStorageLockContext.unlock();
   }
 
   public StorageLockContext getStorageLockContext() {
@@ -510,11 +510,11 @@ public class PagedFileStorage implements Forceable {
     }
 
     public void lock() {
-      myDefaultStorageLockContext.myLock.lock();
+      myDefaultStorageLockContext.lock();
     }
 
     public void unlock() {
-      myDefaultStorageLockContext.myLock.unlock();
+      myDefaultStorageLockContext.unlock();
     }
 
     private int registerPagedFileStorage(@NotNull PagedFileStorage storage) {
@@ -658,7 +658,9 @@ public class PagedFileStorage implements Forceable {
                 LOG.info("Max memory:"+maxMemory.get(null) + ", reserved memory:" + reservedMemory.get(null));
               }
             }
-            catch (Throwable t) {}
+            catch (Throwable t) {
+
+            }
             throw new MappingFailedException(
               "Cannot recover from OOME in memory mapping: -Xmx=" + Runtime.getRuntime().maxMemory() / MB + "MB " +
               "new size limit: " + mySizeLimit / MB + "MB " +
@@ -669,7 +671,7 @@ public class PagedFileStorage implements Forceable {
       }
     }
 
-    private void checkThreadAccess(StorageLockContext storageLockContext) {
+    private static void checkThreadAccess(StorageLockContext storageLockContext) {
       if (storageLockContext.myCheckThreadAccess && !storageLockContext.myLock.isHeldByCurrentThread()) {
         throw new IllegalStateException("Must hold StorageLock lock to access PagedFileStorage");
       }
@@ -776,5 +778,12 @@ public class PagedFileStorage implements Forceable {
     public StorageLockContext(boolean checkAccess) {
       this(ourLock, checkAccess);
     }
+
+    public void lock() {
+      myLock.lock();
+    }
+    public void unlock() {
+      myLock.unlock();
+    }
   }
 }
index 9a297bcef6d1ed64ece14231e185ea6f47353024..d4383a55d03ee0d6f9c35e2b44a3357e8c96526d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -47,11 +47,11 @@ public class RandomAccessDataFile implements Forceable, Closeable {
 
   private static final boolean DEBUG = false;
 
-  public RandomAccessDataFile(final File file) throws IOException {
+  public RandomAccessDataFile(@NotNull File file) throws IOException {
     this(file, PagePool.SHARED);
   }
 
-  public RandomAccessDataFile(final File file, final PagePool pool) throws IOException {
+  public RandomAccessDataFile(@NotNull File file, @NotNull PagePool pool) throws IOException {
     myPool = pool;
     myFile = file;
     if (!file.exists()) {
@@ -201,6 +201,9 @@ public class RandomAccessDataFile implements Forceable, Closeable {
     dispose();
   }
 
+  /**
+   * Flushes dirty pages to underlying buffers
+   */
   @Override
   public void force() {
     assertNotDisposed();
@@ -210,6 +213,23 @@ public class RandomAccessDataFile implements Forceable, Closeable {
     }
   }
 
+  /**
+   * Flushes dirty pages to buffers and saves them to disk
+   */
+  public void sync() {
+    force();
+    try {
+      RandomAccessFile file = getRandomAccessFile();
+      file.getChannel().force(true);
+    }
+    catch (IOException ignored) {
+
+    }
+    finally {
+      releaseFile();
+    }
+  }
+
   public void flushSomePages(int maxPagesToFlush) {
     assertNotDisposed();
     if (isDirty()) {
@@ -229,7 +249,7 @@ public class RandomAccessDataFile implements Forceable, Closeable {
 
   private void assertNotDisposed() {
     if (myIsDisposed) {
-      LOG.assertTrue(false, "storage file is disposed: " + myFile);
+      LOG.error("storage file is disposed: " + myFile);
     }
   }
 
@@ -316,6 +336,7 @@ public class RandomAccessDataFile implements Forceable, Closeable {
     file.seek(fileOffset);
   }
 
+  @Override
   public int hashCode() {
     return myCount;
   }
index d5bc95f99cefdb5f24b3c8b3f029bc2bbf45a6d7..f9517ad09ade44f4c122a3e48545642a46d363a6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -123,7 +123,7 @@ public class StringSearcher {
           }
         }
 
-        int step = 0 <= lastChar && lastChar < 128 ? mySearchTable[lastChar] : 1;
+        int step = lastChar < 128 ? mySearchTable[lastChar] : 1;
 
         if (step <= 0) {
           int index;
@@ -160,7 +160,7 @@ public class StringSearcher {
           if (i < 0) return end - start - myPatternLength + 1;
         }
 
-        int step = 0 <= lastChar && lastChar < 128 ? mySearchTable[lastChar] : 1;
+        int step = lastChar < 128 ? mySearchTable[lastChar] : 1;
 
         if (step <= 0) {
           int index;
index 025795eb08ed502c36d7bcc65d322fae9a391a61..731634b850809cdf3d0b267eaedc47dea508ed89 100644 (file)
@@ -549,7 +549,7 @@ public class ChangesFragmentedDiffPanel implements Disposable {
   }
 
   private static final int[] ourMarks = {1,2,4,8,-1};
-  public static final Hashtable<Integer,JLabel> LABELS = new Hashtable<Integer, JLabel>();
+  public static final Hashtable<Integer, JComponent> LABELS = new Hashtable<Integer, JComponent>();
   public static final int ALL_VALUE = 5;
 
   static {
index 7d73fc54b004ceaf4e1d4c581f190ab8424d4e3b..6ff63601d06a8c0dc82aa5f9d48f845a50ea515d 100644 (file)
@@ -109,7 +109,7 @@ public class XDebugSessionImpl implements XDebugSession {
   private final @Nullable ExecutionEnvironment myEnvironment;
   private boolean myStopped;
   private boolean myPauseActionSupported;
-  private boolean myShowTabOnSuspend;
+  private final AtomicBoolean myShowTabOnSuspend;
   private final List<AnAction> myRestartActions = new SmartList<AnAction>();
   private final List<AnAction> myExtraStopActions = new SmartList<AnAction>();
   private final List<AnAction> myExtraActions = new SmartList<AnAction>();
@@ -131,7 +131,7 @@ public class XDebugSessionImpl implements XDebugSession {
     myEnvironment = environment;
     mySessionName = sessionName;
     myDebuggerManager = debuggerManager;
-    myShowTabOnSuspend = showTabOnSuspend;
+    myShowTabOnSuspend = new AtomicBoolean(showTabOnSuspend);
     myProject = debuggerManager.getProject();
     ValueLookupManager.getInstance(myProject).startListening();
     myIcon = icon;
@@ -152,7 +152,7 @@ public class XDebugSessionImpl implements XDebugSession {
   }
 
   private void assertSessionTabInitialized() {
-    if (myShowTabOnSuspend) {
+    if (myShowTabOnSuspend.get()) {
       LOG.error("Debug tool window isn't shown yet because debug process isn't suspended");
     }
     else {
@@ -202,7 +202,7 @@ public class XDebugSessionImpl implements XDebugSession {
 
   @Override
   public void rebuildViews() {
-    if (!myShowTabOnSuspend && mySessionTab != null) {
+    if (!myShowTabOnSuspend.get() && mySessionTab != null) {
       mySessionTab.rebuildViews();
     }
   }
@@ -273,7 +273,7 @@ public class XDebugSessionImpl implements XDebugSession {
     });
     //todo[nik] make 'createConsole()' method return ConsoleView
     myConsoleView = (ConsoleView)myDebugProcess.createConsole();
-    if (!myShowTabOnSuspend) {
+    if (!myShowTabOnSuspend.get()) {
       initSessionTab(contentToReuse);
     }
 
@@ -310,6 +310,7 @@ public class XDebugSessionImpl implements XDebugSession {
   @Override
   public RunnerLayoutUi getUI() {
     assertSessionTabInitialized();
+    assert mySessionTab != null;
     return mySessionTab.getUi();
   }
 
@@ -787,15 +788,12 @@ public class XDebugSessionImpl implements XDebugSession {
     }
     adjustMouseTrackingCounter(myCurrentPosition, 1);
 
-    if (myShowTabOnSuspend) {
+    if (myShowTabOnSuspend.compareAndSet(true, false)) {
       UIUtil.invokeLaterIfNeeded(new Runnable() {
         @Override
         public void run() {
-          if (myShowTabOnSuspend) {
-            myShowTabOnSuspend = false;
-            initSessionTab(null);
-            showSessionTab();
-          }
+          initSessionTab(null);
+          showSessionTab();
         }
       });
     }
index a6191984beb4d4a5cce5e5cb3c3320f8f03d0e14..6734edd3e8385e7c58cc11a1f859f3135eede03a 100644 (file)
@@ -20,7 +20,6 @@ import com.intellij.execution.Executor;
 import com.intellij.execution.configurations.RunProfile;
 import com.intellij.execution.executors.DefaultDebugExecutor;
 import com.intellij.execution.runners.ExecutionEnvironment;
-import com.intellij.execution.runners.RestartAction;
 import com.intellij.execution.runners.RunContentBuilder;
 import com.intellij.execution.ui.ExecutionConsole;
 import com.intellij.execution.ui.RunContentDescriptor;
@@ -149,12 +148,19 @@ public class XDebugSessionTab extends DebuggerSessionTabBase implements DataProv
     else if (TAB_KEY.is(dataId)) {
       return this;
     }
-    else if (SESSION_KEY.is(dataId)) {
-      return session;
+    else if (LangDataKeys.RUN_PROFILE.is(dataId)) {
+      ExecutionEnvironment environment = getEnvironment();
+      return environment == null ? null : environment.getRunProfile();
+    }
+    else if (LangDataKeys.EXECUTION_ENVIRONMENT.is(dataId)) {
+      return getEnvironment();
     }
 
     if (session != null) {
-      if (LangDataKeys.CONSOLE_VIEW.is(dataId)) {
+      if (SESSION_KEY.is(dataId)) {
+        return session;
+      }
+      else if (LangDataKeys.CONSOLE_VIEW.is(dataId)) {
         return session.getConsoleView();
       }
       else if (XDebugSessionData.DATA_KEY.is(dataId)) {
@@ -237,18 +243,14 @@ public class XDebugSessionTab extends DebuggerSessionTabBase implements DataProv
     DefaultActionGroup leftToolbar = new DefaultActionGroup();
     final Executor debugExecutor = DefaultDebugExecutor.getDebugExecutorInstance();
     ExecutionEnvironment environment = getEnvironment();
-    final Executor executor = environment != null ? environment.getExecutor() : debugExecutor;
     if (environment != null) {
-      RestartAction restartAction = new RestartAction(executor, myRunContentDescriptor, environment);
-      leftToolbar.add(restartAction);
-      restartAction.registerShortcut(myUi.getComponent());
-
       List<AnAction> additionalRestartActions = session.getRestartActions();
-      leftToolbar.addAll(additionalRestartActions);
-      if (!additionalRestartActions.isEmpty()) leftToolbar.addSeparator();
+      if (!additionalRestartActions.isEmpty()) {
+        leftToolbar.addAll(additionalRestartActions);
+        leftToolbar.addSeparator();
+      }
       leftToolbar.addAll(session.getExtraActions());
     }
-
     leftToolbar.addAll(getCustomizedActionGroup(XDebuggerActions.TOOL_WINDOW_LEFT_TOOLBAR_GROUP));
 
     for (AnAction action : session.getExtraStopActions()) {
@@ -290,7 +292,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase implements DataProv
     leftToolbar.addSeparator();
 
     leftToolbar.add(PinToolwindowTabAction.getPinAction());
-    leftToolbar.add(new CloseAction(executor, myRunContentDescriptor, getProject()));
+    leftToolbar.add(new CloseAction(environment != null ? environment.getExecutor() : debugExecutor, myRunContentDescriptor, getProject()));
     leftToolbar.add(new ContextHelpAction(debugExecutor.getHelpId()));
 
     DefaultActionGroup topToolbar = new DefaultActionGroup();
index 17ae6b5ce551e64efc6d425de8aee11f66e40d90..364906460fe63d8de7ab55d7b9a4d86fa9301993 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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,10 +17,7 @@ package org.jetbrains.idea;
 
 import com.intellij.execution.process.ProcessOutput;
 import com.intellij.ide.startup.impl.StartupManagerImpl;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.actionSystem.CommonDataKeys;
-import com.intellij.openapi.actionSystem.DataContext;
-import com.intellij.openapi.actionSystem.Presentation;
+import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.application.PathManager;
 import com.intellij.openapi.application.PluginPathManager;
@@ -506,7 +503,7 @@ public abstract class SvnTestCase extends AbstractJunitVcsTestCase  {
                                                  }
                                                  return null;
                                                }
-                                             }, "test", new Presentation(), null, 0));
+                                             }, "test", new Presentation(), ActionManager.getInstance(), 0));
 
     final ChangeListManager clManager = ChangeListManager.getInstance(project);
     clManager.ensureUpToDate(false);
index f29b5d0bc45b00a920979c4e6eeb6705be610ae9..73000a14880e973f1ac00d878988aca3f597e225 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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 org.jetbrains.idea.svn;
 
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.actionSystem.CommonDataKeys;
-import com.intellij.openapi.actionSystem.DataContext;
-import com.intellij.openapi.actionSystem.Presentation;
+import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.vcs.ProjectLevelVcsManager;
 import com.intellij.openapi.vcs.VcsConfiguration;
 import com.intellij.openapi.vcs.VcsException;
@@ -144,7 +141,7 @@ public class SvnAnnotationIsClosedTest extends Svn17TestCase {
                                                  }
                                                  return null;
                                                }
-                                             }, "test", new Presentation(), null, 0));
+                                             }, "test", new Presentation(), ActionManager.getInstance(), 0));
 
     myChangeListManager.ensureUpToDate(false);
     myChangeListManager.ensureUpToDate(false);  // wait for after-events like annotations recalculation
@@ -191,7 +188,7 @@ public class SvnAnnotationIsClosedTest extends Svn17TestCase {
                                                  }
                                                  return null;
                                                }
-                                             }, "test", new Presentation(), null, 0));
+                                             }, "test", new Presentation(), ActionManager.getInstance(), 0));
 
     myChangeListManager.ensureUpToDate(false);
     myChangeListManager.ensureUpToDate(false);  // wait for after-events like annotations recalculation
index 7b62252c3ac9d79599acfffb89cd23b57dce6228..d33e97c1e7f94cac731723499bad202effbf7d9c 100644 (file)
@@ -74,8 +74,7 @@ public class AddImportHelper {
 
   @Nullable
   public static PsiElement getLocalInsertPosition(@NotNull PyElement anchor) {
-    final PyStatement enclosingStatement = PsiTreeUtil.getParentOfType(anchor, PyStatement.class, false);
-    return enclosingStatement != null ? enclosingStatement.getFirstChild() : null;
+    return PsiTreeUtil.getParentOfType(anchor, PyStatement.class, false);
   }
 
   public enum ImportPriority {
index 12515fe260c664d6021db029ccd7578058125480..e75df5b9a0d0026bd2129f5fb6db4a033df59367 100644 (file)
@@ -52,7 +52,7 @@ class ImportCandidateHolder implements Comparable<ImportCandidateHolder> {
    * Creates new instance.
    *
    * @param importable    an element that could be imported either from import element or from file.
-   * @param file          the file which is the source of the importable
+   * @param file          the file which is the source of the importable (module for symbols, containing directory for modules and packages)
    * @param importElement an existing import element that can be a source for the importable.
    * @param path          import path for the file, as a qualified name (a.b.c)
    *                      For top-level imported symbols it's <em>qualified name of containing module</em> (or package for __init__.py).
index f73b9c3ba83e00c7aab05b51c2ed203551075aa0..92920f79cf9f8f09cc1293e82f2db8171509e12e 100644 (file)
@@ -1,5 +1,6 @@
 def func():
     for _ range(10):
         from package.module import foo
+
         foo
 #       <ref>
\ No newline at end of file
index 5b67e0d6dd2ae8a5694f4afff74385028cc70f2b..883e080132c96877b6ef4247dad4049564091bb6 100644 (file)
@@ -1,6 +1,7 @@
 def func():
     try:
         import module
+
         module
 #       <ref>
     except:
diff --git a/python/testData/addImport/localImportInlineBranch.after.py b/python/testData/addImport/localImportInlineBranch.after.py
new file mode 100644 (file)
index 0000000..c7f7d38
--- /dev/null
@@ -0,0 +1,6 @@
+def func():
+    if True:
+        import module
+
+        module
+#            <ref>
\ No newline at end of file
diff --git a/python/testData/addImport/localImportInlineBranch.py b/python/testData/addImport/localImportInlineBranch.py
new file mode 100644 (file)
index 0000000..89d4935
--- /dev/null
@@ -0,0 +1,3 @@
+def func():
+    if True: module
+#            <ref>
\ No newline at end of file
diff --git a/python/testData/addImport/localImportInlineFunctionBody.after.py b/python/testData/addImport/localImportInlineFunctionBody.after.py
new file mode 100644 (file)
index 0000000..13d2a1e
--- /dev/null
@@ -0,0 +1,5 @@
+def func():
+    import module
+
+    module
+#           <ref>
\ No newline at end of file
diff --git a/python/testData/addImport/localImportInlineFunctionBody.py b/python/testData/addImport/localImportInlineFunctionBody.py
new file mode 100644 (file)
index 0000000..b76c830
--- /dev/null
@@ -0,0 +1,2 @@
+def func(): module
+#           <ref>
\ No newline at end of file
index 0122b6762da959834a5eef4567452621f8859f41..f95187aff819bfca744bfd6af385da6448d088ce 100644 (file)
@@ -69,6 +69,16 @@ public class PyAddImportTest extends PyTestCase {
     doAddLocalImport("module", null);
   }
 
+  // PY-13668
+  public void testLocalImportInlineFunctionBody() {
+    testLocalImport();
+  }
+
+  // PY-13668
+  public void testLocalImportInlineBranch() {
+    testLocalImport();
+  }
+
   /**
    * Add local import statement
    * @param name      reference name in corresponding import element