From ae52588d2bda3750203fb7f38c3add64f2d4b981 Mon Sep 17 00:00:00 2001
From: Dmitry Trofimov
Date: Tue, 30 Sep 2014 14:27:25 +0200
Subject: [PATCH 01/79] Don't show initial configuration in EDU.
---
.../python/edu/PyCharmEduInitialConfigurator.java | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java b/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java
index 7bee168b7573..652e25c20eec 100644
--- a/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java
+++ b/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java
@@ -16,7 +16,6 @@
package com.jetbrains.python.edu;
import com.google.common.collect.Sets;
-import com.intellij.application.options.InitialConfigurationDialog;
import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.intention.IntentionActionBean;
import com.intellij.codeInsight.intention.IntentionManager;
@@ -57,7 +56,6 @@ import com.jetbrains.python.codeInsight.PyCodeInsightSettings;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
-import javax.swing.*;
import java.util.Set;
/**
@@ -135,7 +133,6 @@ public class PyCharmEduInitialConfigurator {
if (!propertiesComponent.isValueSet(DISPLAYED_PROPERTY)) {
GeneralSettings.getInstance().setShowTipsOnStartup(false);
propertiesComponent.setValue(DISPLAYED_PROPERTY, "true");
- showInitialConfigurationDialog();
patchKeymap();
}
@@ -239,14 +236,4 @@ public class PyCharmEduInitialConfigurator {
}
}
}
-
- private static void showInitialConfigurationDialog() {
- final JFrame frame = WindowManager.getInstance().findVisibleFrame();
- new InitialConfigurationDialog(frame, "Python") {
- @Override
- protected boolean canCreateLauncherScript() {
- return false;
- }
- }.show();
- }
}
From b20dd0c2d12645119643fcd4b1caf0a0e64d8d0b Mon Sep 17 00:00:00 2001
From: Roman Shevchenko
Date: Fri, 31 Oct 2014 12:53:51 +0100
Subject: [PATCH 02/79] Cleanup (formatting; typos)
---
.../ide/customize/CustomizeIDEWizardDialog.java | 16 +++++++++-------
.../src/com/intellij/spellchecker/jetbrains.dic | 1 +
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java
index aa152326a759..11f17f95a299 100644
--- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java
+++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java
@@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.ui.JBCardLayout;
import com.intellij.util.PlatformUtils;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -33,7 +34,8 @@ import java.util.List;
public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionListener {
private static final String BUTTONS = "BUTTONS";
- private static final String NOBUTTONS = "NOBUTTONS";
+ private static final String NO_BUTTONS = "NO_BUTTONS";
+
private final JButton mySkipButton = new JButton("Skip All and Set Defaults");
private final JButton myBackButton = new JButton("Back");
private final JButton myNextButton = new JButton("Next");
@@ -68,11 +70,11 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis
final CustomizeIDEWizardStepsProvider provider;
try {
- Class providerClass = (Class)Class.forName(stepsProviderName);
- provider = providerClass.newInstance();
+ Class> providerClass = Class.forName(stepsProviderName);
+ provider = (CustomizeIDEWizardStepsProvider)providerClass.newInstance();
}
catch (Throwable e) {
- Main.showMessage("Start Failed", e);
+ Main.showMessage("Configuration Wizard Failed", e);
return;
}
@@ -148,17 +150,17 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis
buttonPanel.add(myNextButton, gbc);
buttonPanel.setBorder(BorderFactory.createEmptyBorder(8, 0, 0, 0));
myButtonWrapper.add(buttonPanel, BUTTONS);
- myButtonWrapper.add(new JLabel(), NOBUTTONS);
+ myButtonWrapper.add(new JLabel(), NO_BUTTONS);
myButtonWrapperLayout.show(myButtonWrapper, BUTTONS);
return myButtonWrapper;
}
void setButtonsVisible(boolean visible) {
- myButtonWrapperLayout.show(myButtonWrapper, visible ? BUTTONS : NOBUTTONS);
+ myButtonWrapperLayout.show(myButtonWrapper, visible ? BUTTONS : NO_BUTTONS);
}
@Override
- public void actionPerformed(ActionEvent e) {
+ public void actionPerformed(@NotNull ActionEvent e) {
if (e.getSource() == mySkipButton) {
doOKAction();
return;
diff --git a/spellchecker/src/com/intellij/spellchecker/jetbrains.dic b/spellchecker/src/com/intellij/spellchecker/jetbrains.dic
index 50c45c80bbc6..28e88f5dd3f2 100644
--- a/spellchecker/src/com/intellij/spellchecker/jetbrains.dic
+++ b/spellchecker/src/com/intellij/spellchecker/jetbrains.dic
@@ -577,6 +577,7 @@ twitter
typedef
typedefs
typeof
+ubuntu
unary
unboxing
unbuffered
From 333ea2d2825c02e34a34b1b9fb5c88ed77577d8c Mon Sep 17 00:00:00 2001
From: nik
Date: Fri, 31 Oct 2014 15:19:25 +0300
Subject: [PATCH 03/79] XmlNSDescriptor: always check 'instanceof' before
casting to implementation (IDEA-132191)
---
.../TypeOrElementOrAttributeReference.java | 11 +++++------
.../impl/schema/XmlElementDescriptorImpl.java | 17 ++++++++++-------
.../xml/impl/schema/XmlNSDescriptorImpl.java | 6 +++---
3 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/TypeOrElementOrAttributeReference.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/TypeOrElementOrAttributeReference.java
index 47a77fef37a9..89f2a61197c9 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/TypeOrElementOrAttributeReference.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/TypeOrElementOrAttributeReference.java
@@ -334,16 +334,16 @@ public class TypeOrElementOrAttributeReference implements PsiReference {
final XmlNSDescriptor nsDescriptor = tag.getNSDescriptor(namespace, true);
if (nsDescriptor instanceof XmlNSDescriptorImpl) {
- processNamespace(namespace, processor, nsDescriptor, tagNames);
+ processNamespace(namespace, processor, (XmlNSDescriptorImpl)nsDescriptor, tagNames);
}
}
XmlNSDescriptor nsDescriptor = (XmlNSDescriptor)document.getMetaData();
- if (nsDescriptor != null) {
+ if (nsDescriptor instanceof XmlNSDescriptorImpl) {
processNamespace(
ourNamespace,
processor,
- nsDescriptor,
+ (XmlNSDescriptorImpl)nsDescriptor,
tagNames
);
}
@@ -353,13 +353,12 @@ public class TypeOrElementOrAttributeReference implements PsiReference {
private static void processNamespace(final String namespace,
final CompletionProcessor processor,
- final XmlNSDescriptor nsDescriptor,
+ final XmlNSDescriptorImpl nsDescriptor,
final String[] tagNames) {
processor.namespace = namespace;
- final XmlNSDescriptorImpl xmlNSDescriptor = ((XmlNSDescriptorImpl)nsDescriptor);
XmlNSDescriptorImpl.processTagsInNamespace(
- xmlNSDescriptor.getTag(),
+ nsDescriptor.getTag(),
tagNames,
processor
);
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java
index 49d3c4c12245..6f996852ef8c 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java
@@ -117,11 +117,10 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
public String getNamespace(){
String name = getName();
if (name == null) return XmlUtil.EMPTY_URI;
- final XmlNSDescriptorImpl xmlNSDescriptor = (XmlNSDescriptorImpl)getNSDescriptor();
- if (xmlNSDescriptor == null || myDescriptorTag == null) return XmlUtil.EMPTY_URI;
+ if (getNSDescriptor() == null || myDescriptorTag == null) return XmlUtil.EMPTY_URI;
final String namespacePrefix = XmlUtil.findPrefixByQualifiedName(name);
return namespacePrefix.isEmpty() ?
- xmlNSDescriptor.getDefaultNamespace() :
+ getDefaultNamespace() :
myDescriptorTag.getNamespaceByPrefix(namespacePrefix);
}
@@ -192,7 +191,7 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
if (substAttr != null) {
final String namespacePrefix = XmlUtil.findPrefixByQualifiedName(substAttr);
final String namespace = namespacePrefix.isEmpty() ?
- ((XmlNSDescriptorImpl)getNSDescriptor()).getDefaultNamespace() :
+ getDefaultNamespace() :
myDescriptorTag.getNamespaceByPrefix(namespacePrefix);
final String local = XmlUtil.findLocalNameByQualifiedName(substAttr);
final XmlElementDescriptorImpl originalElement = (XmlElementDescriptorImpl)((XmlNSDescriptorImpl)getNSDescriptor()).getElementDescriptor(local, namespace);
@@ -335,9 +334,8 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
private XmlAttributeDescriptor getAttributeDescriptorImpl(final String attributeName, XmlTag context) {
final String localName = XmlUtil.findLocalNameByQualifiedName(attributeName);
final String namespacePrefix = XmlUtil.findPrefixByQualifiedName(attributeName);
- final XmlNSDescriptorImpl xmlNSDescriptor = (XmlNSDescriptorImpl)getNSDescriptor();
final String namespace = namespacePrefix.isEmpty() ?
- ((xmlNSDescriptor != null)?xmlNSDescriptor.getDefaultNamespace():"") :
+ getDefaultNamespace() :
context.getNamespaceByPrefix(namespacePrefix);
XmlAttributeDescriptor attribute = getAttribute(localName, namespace, context, attributeName);
@@ -364,6 +362,11 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
return attribute;
}
+ private String getDefaultNamespace() {
+ XmlNSDescriptor nsDescriptor = getNSDescriptor();
+ return nsDescriptor instanceof XmlNSDescriptorImpl ? ((XmlNSDescriptorImpl)nsDescriptor).getDefaultNamespace() : "";
+ }
+
@Override
public XmlAttributeDescriptor getAttributeDescriptor(XmlAttribute attribute){
return getAttributeDescriptorImpl(attribute.getName(),attribute.getParent());
@@ -410,7 +413,7 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
final String localName = XmlUtil.findLocalNameByQualifiedName(name);
final String namespacePrefix = XmlUtil.findPrefixByQualifiedName(name);
final String namespace = namespacePrefix.isEmpty() ?
- ((XmlNSDescriptorImpl)getNSDescriptor()).getDefaultNamespace() :
+ getDefaultNamespace() :
myDescriptorTag.getNamespaceByPrefix(namespacePrefix);
return getElementDescriptor(localName, namespace, null, name);
}
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlNSDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlNSDescriptorImpl.java
index 17c6f1ab37ae..820c0a992859 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlNSDescriptorImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlNSDescriptorImpl.java
@@ -477,10 +477,10 @@ public class XmlNSDescriptorImpl implements XmlNSDescriptorEx,Validator visited) {
if (myTag == null) return null;
- XmlNSDescriptorImpl nsDescriptor = (XmlNSDescriptorImpl)myTag.getNSDescriptor(namespace, true);
+ XmlNSDescriptor nsDescriptor = myTag.getNSDescriptor(namespace, true);
- if (nsDescriptor != this && nsDescriptor != null) {
- return nsDescriptor.getAttributeImpl(
+ if (nsDescriptor != this && nsDescriptor instanceof XmlNSDescriptorImpl) {
+ return ((XmlNSDescriptorImpl)nsDescriptor).getAttributeImpl(
localName,
namespace,
visited
From c1284be71db22592b2c03b1af0eb9c283a515687 Mon Sep 17 00:00:00 2001
From: Konstantin Bulenkov
Date: Fri, 31 Oct 2014 13:22:19 +0100
Subject: [PATCH 04/79] missing retina icons for action popups
---
platform/icons/src/icons/ide/nextStep@2x.png | Bin 0 -> 504 bytes
.../icons/src/icons/ide/nextStepGrayed@2x.png | Bin 0 -> 249 bytes
.../icons/src/icons/ide/nextStepInverted@2x.png | Bin 0 -> 235 bytes
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 platform/icons/src/icons/ide/nextStep@2x.png
create mode 100644 platform/icons/src/icons/ide/nextStepGrayed@2x.png
create mode 100644 platform/icons/src/icons/ide/nextStepInverted@2x.png
diff --git a/platform/icons/src/icons/ide/nextStep@2x.png b/platform/icons/src/icons/ide/nextStep@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..8968229a6f5871a3bbc5328d7998eb1b67d900ed
GIT binary patch
literal 504
zcmVH3*wtkAm4od3HQyZuIN`}_~1XoA0!O&4J#WfFmAXR
zgoOCOzG7!*1^R~ZvT4Z@oW5bfCGqF~KcKg~ayig9tgH;Yyi99=@sYi+F6b5MJ^;G@Hx?g2!D~?1FHNyqMJSSSTY%dK
zYySQFm%S>@o~UF>N*sV)y*Axp6)71Frv<>G0i2SMUA-~OiR7XJPaJ@gC)m|nvYl3u
uTi7w-@xhuufBx!FV)$s4IXEl;2rvNlVr5ryu$9@^U!SN*RSZ
z-yX-AGiR#&R^aJa&rqnL+w8&95$?EALiaJllkU?`ezZ;TP&;k@WQo$G8s|JC)m!FM
zo-sG=Tj=JN+>&(3NNQpNuRuEUNA0ZN3{!R=Ug-F_Yt5o2q43GCnHR}1{rdmko>|vWn7Q}hhiwU}0^OG`H5n-EV>+^M
z3y+eaLLBSSq%A$n6ZG{aKb8(snyGVt!sITGPrN%%PRY0*FpHn#SDTb%uVB|kCNVDF
zc;+KF9sYFPva8@d^6
Date: Thu, 30 Oct 2014 20:38:39 +0100
Subject: [PATCH 05/79] new inference: unchecked conversion detection in case
of inference variables (IDEA-122932)
---
.../constraints/TypeCompatibilityConstraint.java | 8 +++++++-
.../UncheckedConversionWithRecursiveTypeParams.java | 13 +++++++++++++
.../lambda/GraphInferenceHighlightingTest.java | 4 ++++
3 files changed, 24 insertions(+), 1 deletion(-)
create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/UncheckedConversionWithRecursiveTypeParams.java
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java
index f01c82cae769..7b76a68ab5d3 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java
@@ -17,6 +17,7 @@ package com.intellij.psi.impl.source.resolve.graphInference.constraints;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
+import com.intellij.psi.impl.source.resolve.graphInference.InferenceVariable;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import org.jetbrains.annotations.NotNull;
@@ -72,7 +73,12 @@ public class TypeCompatibilityConstraint implements ConstraintFormula {
final PsiClass sClass = sResult.getElement();
if (tClass != null && sClass != null) {
final PsiSubstitutor sSubstitutor = TypeConversionUtil.getClassSubstitutor(tClass, sClass, sResult.getSubstitutor());
- if (sSubstitutor != null && PsiUtil.isRawSubstitutor(tClass, sSubstitutor)) {
+ if (sSubstitutor != null) {
+ if (PsiUtil.isRawSubstitutor(tClass, sSubstitutor)) {
+ return true;
+ }
+ }
+ else if (tClass instanceof InferenceVariable && ((PsiClassType)s).isRaw() && tClass.isInheritor(sClass, true)) {
return true;
}
}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/UncheckedConversionWithRecursiveTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/UncheckedConversionWithRecursiveTypeParams.java
new file mode 100644
index 000000000000..f9fc707a2924
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/UncheckedConversionWithRecursiveTypeParams.java
@@ -0,0 +1,13 @@
+
+import java.util.List;
+
+class Foo {
+
+ public void test(Foo parent) {
+ Foo foo = getElements(parent).get(0);
+ }
+
+ public static > List getElements(E parent) {
+ return null;
+ }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java
index 122e776fda9d..acec098d6a5b 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java
@@ -255,6 +255,10 @@ public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase
doTest();
}
+ public void testUncheckedConversionWithRecursiveTypeParams() throws Exception {
+ doTest(false);
+ }
+
private void doTest() throws Exception {
doTest(false);
}
From 6e4595e7bdf87c4880442378e21973750476cb72 Mon Sep 17 00:00:00 2001
From: Anna Kozlova
Date: Fri, 31 Oct 2014 13:20:24 +0100
Subject: [PATCH 06/79] capture getClass() method type (IDEA-130973)
---
.../src/com/intellij/psi/util/PsiTypesUtil.java | 5 +----
.../advHighlighting7/ClassLiteral.java | 15 +++++++++++++++
.../advHighlighting7/MultiCatch.java | 4 ++--
3 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java
index 906b576e3369..e7f6d5706b9c 100644
--- a/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java
@@ -166,10 +166,7 @@ public class PsiTypesUtil {
qualifierType = JavaPsiFacade.getInstance(project).getElementFactory().createType((PsiClass)parent.getPsi());
}
}
- PsiElement parent = call.getParent();
- boolean captureTopLevelWildcards = parent instanceof PsiReferenceExpression && parent.getParent() instanceof PsiMethodCallExpression ||
- parent instanceof PsiExpressionList;
- return createJavaLangClassType(methodExpression, qualifierType, captureTopLevelWildcards);
+ return createJavaLangClassType(methodExpression, qualifierType, true);
}
return null;
}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java
index 97673a5f25ee..659f721faa69 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java
@@ -11,3 +11,18 @@ class Example {
return getClass() == obj.getClass();
}
}
+
+class Foo {
+
+ public static Class extends Foo>> fFoo(final Foo> foo) {
+ Class extends Foo>> fooClass = foo.getClass();
+ fooClass = foo.getClass();
+ return foo.getClass();
+ }
+
+ public static Class extends Foo extends String>> fFoo1(final Foo extends String> foo) {
+ Class extends Foo extends String>> fooClass = foo.getClass();
+ fooClass = foo.getClass();
+ return foo.getClass();
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java
index 83b2d4976ffd..a7a73af4b45a 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java
@@ -60,8 +60,8 @@ abstract class C {
try { g(); }
catch (IE1 | IE2 e) {
Class extends E> clazz1 = e.getClass();
- Class extends IE1> clazz2 = e.getClass();
- Class extends I> clazz3 = e.getClass();
+ Class extends IE1> clazz2 = e.getClass();
+ Class extends I> clazz3 = e.getClass();
}
try { f(); }
From 38766016544b613c6339a27b7c6246d16cf47e2e Mon Sep 17 00:00:00 2001
From: Roman Shevchenko
Date: Fri, 31 Oct 2014 13:32:13 +0100
Subject: [PATCH 07/79] ui: startup wizard in CE
---
.../src/com/intellij/idea/StartupUtil.java | 38 +++++++++++++++++--
.../src/com/intellij/idea/MainImpl.java | 8 +++-
2 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java
index fdf11dc54e4d..155389da46bf 100644
--- a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java
+++ b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java
@@ -15,10 +15,14 @@
*/
package com.intellij.idea;
+import com.intellij.ide.customize.CustomizeIDEWizardDialog;
+import com.intellij.ide.plugins.PluginManagerCore;
+import com.intellij.ide.startupWizard.StartupWizard;
import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.application.ConfigImportHelper;
import com.intellij.openapi.application.PathManager;
+import com.intellij.openapi.application.ex.ApplicationInfoEx;
import com.intellij.openapi.application.impl.ApplicationInfoImpl;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.SystemInfo;
@@ -30,6 +34,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.AppUIUtil;
import com.intellij.util.Consumer;
import com.intellij.util.EnvironmentUtil;
+import com.intellij.util.PlatformUtils;
import com.intellij.util.lang.UrlClassLoader;
import com.sun.jna.Native;
import org.jetbrains.annotations.NonNls;
@@ -66,14 +71,14 @@ public class StartupUtil {
ourLock.setActivateListener(consumer);
}
- interface AppStarter {
- void start(boolean newConfigFolder);
- }
-
public synchronized static int getAcquiredPort() {
return ourLock.getAcquiredPort();
}
+ interface AppStarter {
+ void start(boolean newConfigFolder);
+ }
+
static void prepareAndStart(String[] args, AppStarter appStarter) {
boolean newConfigFolder = false;
@@ -294,4 +299,29 @@ public class StartupUtil {
log.info("JVM Args: " + StringUtil.join(arguments, " "));
}
}
+
+ static void runStartupWizard() {
+ ApplicationInfoEx appInfo = ApplicationInfoImpl.getShadowInstance();
+
+ String stepsProvider = appInfo.getCustomizeIDEWizardStepsProvider();
+ if (stepsProvider != null) {
+ CustomizeIDEWizardDialog.showCustomSteps(stepsProvider);
+ PluginManagerCore.invalidatePlugins();
+ return;
+ }
+
+ if (PlatformUtils.isIntelliJ()) {
+ new CustomizeIDEWizardDialog().show();
+ PluginManagerCore.invalidatePlugins();
+ return;
+ }
+
+ List pages = appInfo.getPluginChooserPages();
+ if (!pages.isEmpty()) {
+ StartupWizard startupWizard = new StartupWizard(pages);
+ startupWizard.setCancelText("Skip");
+ startupWizard.show();
+ PluginManagerCore.invalidatePlugins();
+ }
+ }
}
diff --git a/platform/platform-main/src/com/intellij/idea/MainImpl.java b/platform/platform-main/src/com/intellij/idea/MainImpl.java
index 32a41d49d02f..88ce048d3b0d 100644
--- a/platform/platform-main/src/com/intellij/idea/MainImpl.java
+++ b/platform/platform-main/src/com/intellij/idea/MainImpl.java
@@ -16,6 +16,7 @@
package com.intellij.idea;
import com.intellij.ide.plugins.PluginManager;
+import com.intellij.openapi.application.ConfigImportHelper;
import com.intellij.util.PlatformUtils;
import javax.swing.*;
@@ -32,12 +33,17 @@ public class MainImpl {
StartupUtil.prepareAndStart(args, new StartupUtil.AppStarter() {
@Override
- public void start(boolean newConfigFolder) {
+ public void start(final boolean newConfigFolder) {
//noinspection SSBasedInspection
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
PluginManager.installExceptionHandler();
+
+ if (newConfigFolder && !Boolean.getBoolean(ConfigImportHelper.CONFIG_IMPORTED_IN_CURRENT_SESSION_KEY)) {
+ StartupUtil.runStartupWizard();
+ }
+
final IdeaApplication app = new IdeaApplication(args);
//noinspection SSBasedInspection
SwingUtilities.invokeLater(new Runnable() {
From e6d905b28a4ab5614f4b5728cfc92d224218f514 Mon Sep 17 00:00:00 2001
From: Sergey Malenkov
Date: Fri, 31 Oct 2014 15:26:49 +0300
Subject: [PATCH 08/79] IDEA-132185 Focus switches on expansion hint
---
.../ui/AbstractExpandableItemsHandler.java | 26 ++++++++++---------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java
index d9ebeefa7acc..a3e5e199a9ec 100644
--- a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java
+++ b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java
@@ -19,8 +19,8 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.registry.Registry;
-import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.popup.AbstractPopup;
+import com.intellij.ui.popup.OurHeavyWeightPopup;
import com.intellij.util.Alarm;
import com.intellij.util.JBHiDPIScaledImage;
import com.intellij.util.ui.UIUtil;
@@ -42,7 +42,7 @@ public abstract class AbstractExpandableItemsHandler
Date: Fri, 31 Oct 2014 13:17:17 +0100
Subject: [PATCH 09/79] hanging pre-loaded processes problem: additional
logging
---
.../src/com/intellij/compiler/server/BuildManager.java | 5 +++++
.../intellij/compiler/server/BuildMessageDispatcher.java | 8 ++++++++
2 files changed, 13 insertions(+)
diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java
index d516d5b2f74e..76ceac6ee380 100644
--- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java
+++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java
@@ -546,9 +546,11 @@ public class BuildManager implements ApplicationComponent{
runCommand(new Runnable() {
@Override
public void run() {
+ LOG.info("Cancelling preloaded process for project " + projectPath);
Pair, OSProcessHandler> pair = takePreloadedProcess(projectPath);
if (pair != null) {
final RequestFuture future = pair.first;
+ LOG.info("Cancelling preloaded process, sessionID=" + future.getRequestID());
myMessageDispatcher.cancelSession(future.getRequestID());
// waiting for preloaded process from project's task queue guarantees no build is started for this project
// until this one gracefully exits and closes all its storages
@@ -559,6 +561,9 @@ public class BuildManager implements ApplicationComponent{
}
});
}
+ else {
+ LOG.info("takePreloadedProcess() returned null");
+ }
}
});
}
diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildMessageDispatcher.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildMessageDispatcher.java
index 59c19f0ad7fe..8bf11a9302e2 100644
--- a/java/compiler/impl/src/com/intellij/compiler/server/BuildMessageDispatcher.java
+++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildMessageDispatcher.java
@@ -75,11 +75,19 @@ class BuildMessageDispatcher extends SimpleChannelInboundHandlerAdapter
Date: Fri, 31 Oct 2014 09:18:24 +0100
Subject: [PATCH 10/79] cleanup
---
.../application/ApplicationConfiguration.java | 4 ++--
.../application/ApplicationConfigurationType.java | 11 +++++++----
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java
index b736d9f0b127..de8bcbb84ae6 100644
--- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java
+++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java
@@ -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.
@@ -56,7 +56,7 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration myEnvs = new LinkedHashMap();
+ private final Map myEnvs = new LinkedHashMap();
public boolean PASS_PARENT_ENVS = true;
public ApplicationConfiguration(final String name, final Project project, ApplicationConfigurationType applicationConfigurationType) {
diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java
index fba68e43f396..e6e6a0037cee 100644
--- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java
+++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java
@@ -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.
@@ -33,10 +33,9 @@ import javax.swing.*;
public class ApplicationConfigurationType implements ConfigurationType {
private final ConfigurationFactory myFactory;
-
- /**reflection*/
public ApplicationConfigurationType() {
myFactory = new ConfigurationFactoryEx(this) {
+ @Override
public RunConfiguration createTemplateConfiguration(Project project) {
return new ApplicationConfiguration("", project, ApplicationConfigurationType.this);
}
@@ -48,18 +47,22 @@ public class ApplicationConfigurationType implements ConfigurationType {
};
}
+ @Override
public String getDisplayName() {
return ExecutionBundle.message("application.configuration.name");
}
+ @Override
public String getConfigurationTypeDescription() {
return ExecutionBundle.message("application.configuration.description");
}
+ @Override
public Icon getIcon() {
return AllIcons.RunConfigurations.Application;
}
+ @Override
public ConfigurationFactory[] getConfigurationFactories() {
return new ConfigurationFactory[]{myFactory};
}
@@ -87,6 +90,7 @@ public class ApplicationConfigurationType implements ConfigurationType {
}
+ @Override
@NotNull
@NonNls
public String getId() {
@@ -97,5 +101,4 @@ public class ApplicationConfigurationType implements ConfigurationType {
public static ApplicationConfigurationType getInstance() {
return ConfigurationTypeUtil.findConfigurationType(ApplicationConfigurationType.class);
}
-
}
From 404fb21af508a047d7a15858ac5ebb5ec98ef505 Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 09:46:05 +0100
Subject: [PATCH 11/79] cleanup
---
.../RunConfigurationExtensionsManager.java | 45 +++++++++----------
.../configurations/LogFileOptions.java | 5 +--
.../ModuleBasedConfiguration.java | 9 ----
.../configurations/RunConfigurationBase.java | 4 +-
4 files changed, 26 insertions(+), 37 deletions(-)
diff --git a/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java b/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java
index af28f681420b..9929e8064fc5 100644
--- a/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java
+++ b/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java
@@ -14,9 +14,11 @@ import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.WriteExternalException;
+import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.StringInterner;
import com.intellij.util.containers.WeakStringInterner;
+import gnu.trove.THashMap;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -33,6 +35,7 @@ public class RunConfigurationExtensionsManager> RUN_EXTENSIONS = Key.create("run.extension.elements");
private static final String EXT_ID_ATTR = "ID";
private static final String EXTENSION_ROOT_ATTR = "EXTENSION";
+
protected final ExtensionPointName myExtensionPointName;
private final StringInterner myInterner = new WeakStringInterner();
@@ -40,21 +43,18 @@ public class RunConfigurationExtensionsManager children = parentNode.getChildren(getExtensionRootAttr());
- final Map extensions = ContainerUtil.newHashMap();
+ public void readExternal(@NotNull U configuration, @NotNull Element parentNode) throws InvalidDataException {
+ Map extensions = new THashMap();
for (T extension : getApplicableExtensions(configuration)) {
extensions.put(extension.getSerializationId(), extension);
}
+ List children = parentNode.getChildren(getExtensionRootAttr());
// if some of extensions settings weren't found we should just keep it because some plugin with extension
// may be turned off
boolean found = true;
- for (Object o : children) {
- final Element element = (Element)o;
- final String extensionName = element.getAttributeValue(getIdAttrName());
- final T extension = extensions.remove(extensionName);
+ for (Element element : children) {
+ final T extension = extensions.remove(element.getAttributeValue(getIdAttrName()));
if (extension != null) {
extension.readExternal(configuration, element);
}
@@ -81,31 +81,30 @@ public class RunConfigurationExtensionsManager map = ContainerUtil.newTreeMap();
final List elements = configuration.getCopyableUserData(RUN_EXTENSIONS);
if (elements != null) {
- for (Element el : elements) {
- map.put(el.getAttributeValue(getIdAttrName()), el.clone());
+ for (Element element : elements) {
+ map.put(element.getAttributeValue(getIdAttrName()), element.clone());
}
}
for (T extension : getApplicableExtensions(configuration)) {
- Element el = new Element(getExtensionRootAttr());
- el.setAttribute(getIdAttrName(), extension.getSerializationId());
+ Element element = new Element(getExtensionRootAttr());
+ element.setAttribute(getIdAttrName(), extension.getSerializationId());
try {
- extension.writeExternal(configuration, el);
+ extension.writeExternal(configuration, element);
}
- catch (WriteExternalException e) {
+ catch (WriteExternalException ignored) {
map.remove(extension.getSerializationId());
continue;
}
- map.put(extension.getSerializationId(), el);
+ map.put(extension.getSerializationId(), element);
}
- for (Element val : map.values()) {
- parentNode.addContent(val);
+ for (Element values : map.values()) {
+ parentNode.addContent(values);
}
}
@@ -160,8 +159,8 @@ public class RunConfigurationExtensionsManager getApplicableExtensions(@NotNull final U configuration) {
- final List extensions = new ArrayList();
+ protected List getApplicableExtensions(@NotNull U configuration) {
+ List extensions = new SmartList();
for (T extension : Extensions.getExtensions(myExtensionPointName)) {
if (extension.isApplicableFor(configuration)) {
extensions.add(extension);
@@ -170,8 +169,8 @@ public class RunConfigurationExtensionsManager getEnabledExtensions(@NotNull final U configuration, @Nullable RunnerSettings runnerSettings) {
- final List extensions = new ArrayList();
+ protected List getEnabledExtensions(@NotNull U configuration, @Nullable RunnerSettings runnerSettings) {
+ List extensions = new SmartList();
for (T extension : Extensions.getExtensions(myExtensionPointName)) {
if (extension.isApplicableFor(configuration) && extension.isEnabledFor(configuration, runnerSettings)) {
extensions.add(extension);
diff --git a/platform/lang-api/src/com/intellij/execution/configurations/LogFileOptions.java b/platform/lang-api/src/com/intellij/execution/configurations/LogFileOptions.java
index 0a4132d83a52..a3f212da4e1e 100644
--- a/platform/lang-api/src/com/intellij/execution/configurations/LogFileOptions.java
+++ b/platform/lang-api/src/com/intellij/execution/configurations/LogFileOptions.java
@@ -18,7 +18,6 @@ package com.intellij.execution.configurations;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMExternalizable;
-import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.SmartList;
import com.intellij.util.containers.SmartHashSet;
@@ -204,13 +203,13 @@ public class LogFileOptions implements JDOMExternalizable {
try {
setCharset(Charset.forName(charsetStr));
}
- catch (Exception e) {
+ catch (Exception ignored) {
setCharset(Charset.defaultCharset());
}
}
@Override
- public void writeExternal(Element element) throws WriteExternalException {
+ public void writeExternal(Element element) {
element.setAttribute(PATH, FileUtil.toSystemIndependentName(getPathPattern()));
element.setAttribute(CHECKED, String.valueOf(isEnabled()));
element.setAttribute(SKIPPED, String.valueOf(isSkipContent()));
diff --git a/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java b/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java
index 2180f7d24edd..16b4d3a18c9b 100644
--- a/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java
+++ b/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java
@@ -64,15 +64,6 @@ public abstract class ModuleBasedConfiguration
Date: Fri, 31 Oct 2014 09:46:56 +0100
Subject: [PATCH 12/79] element is already interned
---
.../configuration/RunConfigurationExtensionsManager.java | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java b/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java
index 9929e8064fc5..fc443ffd0385 100644
--- a/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java
+++ b/platform/lang-api/src/com/intellij/execution/configuration/RunConfigurationExtensionsManager.java
@@ -11,13 +11,10 @@ import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.SettingsEditorGroup;
import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.containers.StringInterner;
-import com.intellij.util.containers.WeakStringInterner;
import gnu.trove.THashMap;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -37,7 +34,6 @@ public class RunConfigurationExtensionsManager myExtensionPointName;
- private final StringInterner myInterner = new WeakStringInterner();
public RunConfigurationExtensionsManager(ExtensionPointName extensionPointName) {
myExtensionPointName = extensionPointName;
@@ -65,9 +61,7 @@ public class RunConfigurationExtensionsManager copy = new ArrayList(children.size());
for (Element child : children) {
- Element clone = child.clone();
- JDOMUtil.internElement(clone, myInterner);
- copy.add(clone);
+ copy.add(child.clone());
}
configuration.putCopyableUserData(RUN_EXTENSIONS, copy);
}
From dc17d10516f8a7e1f2e82ce1987bd21a025088ce Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 09:50:03 +0100
Subject: [PATCH 13/79] cleanup
---
.../execution/JavaRunConfigurationExtensionManager.java | 7 +++----
.../configuration/EnvironmentVariablesComponent.java | 2 +-
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java b/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java
index 556027008efd..9ea8e4058f13 100644
--- a/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java
+++ b/java/execution/impl/src/com/intellij/execution/JavaRunConfigurationExtensionManager.java
@@ -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.
@@ -17,7 +17,6 @@ package com.intellij.execution;
import com.intellij.execution.configuration.RunConfigurationExtensionsManager;
import com.intellij.execution.configurations.RunConfigurationBase;
-import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -26,7 +25,7 @@ import com.intellij.openapi.diagnostic.Logger;
* Date: 10/4/11
*/
public class JavaRunConfigurationExtensionManager extends RunConfigurationExtensionsManager {
- private static final Logger LOG = Logger.getInstance("#" + RunConfigurationExtension.class.getName());
+ private static final Logger LOG = Logger.getInstance(RunConfigurationExtension.class);
public JavaRunConfigurationExtensionManager() {
super(RunConfigurationExtension.EP_NAME);
@@ -36,7 +35,7 @@ public class JavaRunConfigurationExtensionManager extends RunConfigurationExtens
return ServiceManager.getService(JavaRunConfigurationExtensionManager.class);
}
- public static void checkConfigurationIsValid(RunConfigurationBase configuration) throws RuntimeConfigurationException {
+ public static void checkConfigurationIsValid(RunConfigurationBase configuration) {
try {
getInstance().validateConfiguration(configuration, false);
}
diff --git a/platform/lang-impl/src/com/intellij/execution/configuration/EnvironmentVariablesComponent.java b/platform/lang-impl/src/com/intellij/execution/configuration/EnvironmentVariablesComponent.java
index 4375e164fed4..fa4630b6124a 100644
--- a/platform/lang-impl/src/com/intellij/execution/configuration/EnvironmentVariablesComponent.java
+++ b/platform/lang-impl/src/com/intellij/execution/configuration/EnvironmentVariablesComponent.java
@@ -102,7 +102,7 @@ public class EnvironmentVariablesComponent extends LabeledComponent envs) {
+ public static void writeExternal(@NotNull Element element, @NotNull Map envs) {
final Element envsElement = new Element(ENVS);
for (String envName : envs.keySet()) {
final Element envElement = new Element(ENV);
From f965244fc35d329470fdbc1350183ee3e5cd76a0 Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 09:56:49 +0100
Subject: [PATCH 14/79] cleanup
---
.../RunnerAndConfigurationSettingsImpl.java | 42 ++++++++++---------
1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
index da69c0db290a..27e8e456d96b 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
@@ -57,7 +57,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
//@NonNls
//public static final String UNIQUE_ID = "id";
@NonNls
- protected static final String DUMMY_ELEMENT_NANE = "dummy";
+ protected static final String DUMMY_ELEMENT_NAME = "dummy";
@NonNls
private static final String TEMPORARY_ATTRIBUTE = "temporary";
@NonNls
@@ -146,6 +146,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
@Override
public String getUniqueID() {
+ //noinspection deprecation
return myConfiguration.getType().getDisplayName() + "." + myConfiguration.getName() +
(myConfiguration instanceof UnknownRunConfiguration ? myConfiguration.getUniqueID() : "");
//if (myID == null) {
@@ -220,18 +221,17 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
if (myIsTemplate) {
myConfiguration = myManager.getConfigurationTemplate(factory).getConfiguration();
- } else {
- final String name = element.getAttributeValue(NAME_ATTR);
+ }
+ else {
// shouldn't call createConfiguration since it calls StepBeforeRunProviders that
// may not be loaded yet. This creates initialization order issue.
- myConfiguration = myManager.doCreateConfiguration(name, factory, false);
+ myConfiguration = myManager.doCreateConfiguration(element.getAttributeValue(NAME_ATTR), factory, false);
}
myConfiguration.readExternal(element);
- List runners = element.getChildren(RUNNER_ELEMENT);
myUnloadedRunnerSettings = null;
StringInterner interner = new StringInterner();
- for (final Element runnerElement : runners) {
+ for (Element runnerElement : element.getChildren(RUNNER_ELEMENT)) {
String id = runnerElement.getAttributeValue(RUNNER_ID);
ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id);
if (runner != null) {
@@ -242,16 +242,16 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
myRunnerSettings.put(runner, settings);
}
else {
- if (myUnloadedRunnerSettings == null) myUnloadedRunnerSettings = new SmartList();
+ if (myUnloadedRunnerSettings == null) {
+ myUnloadedRunnerSettings = new SmartList();
+ }
JDOMUtil.internElement(runnerElement, interner);
myUnloadedRunnerSettings.add(runnerElement);
}
}
- List configurations = element.getChildren(CONFIGURATION_ELEMENT);
myUnloadedConfigurationPerRunnerSettings = null;
- for (final Object configuration : configurations) {
- Element configurationElement = (Element) configuration;
+ for (Element configurationElement : element.getChildren(CONFIGURATION_ELEMENT)) {
String id = configurationElement.getAttributeValue(RUNNER_ID);
ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id);
if (runner != null) {
@@ -260,9 +260,11 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
settings.readExternal(configurationElement);
}
myConfigurationPerRunnerSettings.put(runner, settings);
- } else {
- if (myUnloadedConfigurationPerRunnerSettings == null)
- myUnloadedConfigurationPerRunnerSettings = new ArrayList(1);
+ }
+ else {
+ if (myUnloadedConfigurationPerRunnerSettings == null) {
+ myUnloadedConfigurationPerRunnerSettings = new SmartList();
+ }
myUnloadedConfigurationPerRunnerSettings.add(configurationElement);
}
}
@@ -289,14 +291,14 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
element.setAttribute(SINGLETON, String.valueOf(mySingleton));
}
if (myTemporary) {
- element.setAttribute(TEMPORARY_ATTRIBUTE, Boolean.toString(myTemporary));
+ element.setAttribute(TEMPORARY_ATTRIBUTE, Boolean.toString(true));
}
}
myConfiguration.writeExternal(element);
if (!(myConfiguration instanceof UnknownRunConfiguration)) {
- final Comparator runnerComparator = createRunnerComparator();
+ Comparator runnerComparator = createRunnerComparator();
writeRunnerSettings(runnerComparator, element);
writeConfigurationPerRunnerSettings(runnerComparator, element);
}
@@ -382,7 +384,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
private static Comparator createRunnerComparator() {
return new Comparator() {
@Override
- public int compare(final Element o1, final Element o2) {
+ public int compare(@NotNull Element o1, @NotNull Element o2) {
final String attributeValue1 = o1.getAttributeValue(RUNNER_ID);
if (attributeValue1 == null) {
return 1;
@@ -405,7 +407,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
myRunnerSettings.put(runner, runnerSettings);
return runnerSettings;
}
- catch (AbstractMethodError e) {
+ catch (AbstractMethodError ignored) {
LOG.error("Update failed for: " + myConfiguration.getType().getDisplayName() + ", runner: " + runner.getRunnerId(), new ExtensionException(runner.getClass()));
}
}
@@ -442,7 +444,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
RunnerSettings data = createRunnerSettings(runner);
myRunnerSettings.put(runner, data);
if (data != null) {
- Element temp = new Element(DUMMY_ELEMENT_NANE);
+ Element temp = new Element(DUMMY_ELEMENT_NAME);
RunnerSettings templateSettings = template.myRunnerSettings.get(runner);
if (templateSettings != null) {
templateSettings.writeExternal(temp);
@@ -455,7 +457,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
ConfigurationPerRunnerSettings data = myConfiguration.createRunnerSettings(new InfoProvider(runner));
myConfigurationPerRunnerSettings.put(runner, data);
if (data != null) {
- Element temp = new Element(DUMMY_ELEMENT_NANE);
+ Element temp = new Element(DUMMY_ELEMENT_NAME);
ConfigurationPerRunnerSettings templateSettings = template.myConfigurationPerRunnerSettings.get(runner);
if (templateSettings != null) {
templateSettings.writeExternal(temp);
@@ -479,7 +481,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
}
@Override
- public int compareTo(final Object o) {
+ public int compareTo(@NotNull final Object o) {
if (o instanceof RunnerAndConfigurationSettings) {
return getName().compareTo(((RunnerAndConfigurationSettings) o).getName());
}
From 98a538f4a28c7fdf2b1eaf32ac232b2eabbf632c Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 10:01:44 +0100
Subject: [PATCH 15/79] cleanup
---
.../RunnerAndConfigurationSettingsImpl.java | 35 ++++++++-----------
1 file changed, 14 insertions(+), 21 deletions(-)
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
index 27e8e456d96b..c59bb2cde8e0 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
@@ -44,6 +44,18 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
private static final String CONFIGURATION_ELEMENT = "ConfigurationWrapper";
@NonNls
private static final String RUNNER_ID = "RunnerId";
+
+ private static final Comparator RUNNER_COMPARATOR = new Comparator() {
+ @Override
+ public int compare(@NotNull Element o1, @NotNull Element o2) {
+ String attributeValue1 = o1.getAttributeValue(RUNNER_ID);
+ if (attributeValue1 == null) {
+ return 1;
+ }
+ return StringUtil.compare(attributeValue1, o2.getAttributeValue(RUNNER_ID), false);
+ }
+ };
+
@NonNls
private static final String CONFIGURATION_TYPE_ATTRIBUTE = "type";
@NonNls
@@ -298,9 +310,8 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
myConfiguration.writeExternal(element);
if (!(myConfiguration instanceof UnknownRunConfiguration)) {
- Comparator runnerComparator = createRunnerComparator();
- writeRunnerSettings(runnerComparator, element);
- writeConfigurationPerRunnerSettings(runnerComparator, element);
+ writeRunnerSettings(RUNNER_COMPARATOR, element);
+ writeConfigurationPerRunnerSettings(RUNNER_COMPARATOR, element);
}
}
@@ -381,24 +392,6 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
return true;
}
- private static Comparator createRunnerComparator() {
- return new Comparator() {
- @Override
- public int compare(@NotNull Element o1, @NotNull Element o2) {
- final String attributeValue1 = o1.getAttributeValue(RUNNER_ID);
- if (attributeValue1 == null) {
- return 1;
-
- }
- final String attributeValue2 = o2.getAttributeValue(RUNNER_ID);
- if (attributeValue2 == null) {
- return -1;
- }
- return attributeValue1.compareTo(attributeValue2);
- }
- };
- }
-
@Override
public RunnerSettings getRunnerSettings(@NotNull ProgramRunner runner) {
if (!myRunnerSettings.containsKey(runner)) {
From 020a6407214171b4ca7bf09aa1abba02e774ea2a Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 10:03:07 +0100
Subject: [PATCH 16/79] element is already interned
---
.../impl/RunnerAndConfigurationSettingsImpl.java | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
index c59bb2cde8e0..d0434b84c493 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
@@ -21,10 +21,12 @@ import com.intellij.execution.configurations.*;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.ExtensionException;
-import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.Factory;
+import com.intellij.openapi.util.InvalidDataException;
+import com.intellij.openapi.util.JDOMExternalizable;
+import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.SmartList;
-import com.intellij.util.containers.StringInterner;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -77,7 +79,6 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
@NonNls
public static final String SINGLETON = "singleton";
-
/** for compatibility */
@NonNls
private static final String TEMP_CONFIGURATION = "tempConfiguration";
@@ -242,7 +243,6 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
myConfiguration.readExternal(element);
myUnloadedRunnerSettings = null;
- StringInterner interner = new StringInterner();
for (Element runnerElement : element.getChildren(RUNNER_ELEMENT)) {
String id = runnerElement.getAttributeValue(RUNNER_ID);
ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id);
@@ -257,7 +257,6 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
if (myUnloadedRunnerSettings == null) {
myUnloadedRunnerSettings = new SmartList();
}
- JDOMUtil.internElement(runnerElement, interner);
myUnloadedRunnerSettings.add(runnerElement);
}
}
From b568b55f45db78343a3220c00b0000fd621618fb Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 12:34:52 +0100
Subject: [PATCH 17/79] =?UTF-8?q?GenericDebuggerRunnerSettings=20=E2=80=94?=
=?UTF-8?q?=20don't=20save=20defaults?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../debugger/impl/DebuggerManagerImpl.java | 2 +-
.../debugger/impl/GenericDebuggerRunner.java | 2 +-
.../impl/GenericDebuggerRunnerSettings.java | 51 +++++++------------
.../intellij/debugger/DebuggerTestCase.java | 2 +-
.../configurations/RunnerSettings.java | 2 +-
.../configurations/RunnerSettingsEx.java | 35 +++++++++++++
.../RunnerAndConfigurationSettingsImpl.java | 15 +++---
.../com/intellij/util/xmlb/BeanBinding.java | 11 ++--
.../com/intellij/util/xmlb/XmlSerializer.java | 7 ++-
9 files changed, 80 insertions(+), 47 deletions(-)
create mode 100644 platform/lang-api/src/com/intellij/execution/configurations/RunnerSettingsEx.java
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
index 392a14b78bbf..9c094e255ca9 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java
@@ -582,7 +582,7 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent
GenericDebuggerRunnerSettings settings,
boolean checkValidity)
throws ExecutionException {
- return createDebugParameters(parameters, settings.LOCAL, settings.getTransport(), settings.DEBUG_PORT, checkValidity);
+ return createDebugParameters(parameters, settings.LOCAL, settings.getTransport(), settings.getDebugPort(), checkValidity);
}
private static class MyDebuggerStateManager extends DebuggerStateManager {
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java
index 06408ce2a27a..cba2d3ef9b67 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java
@@ -134,7 +134,7 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner mySerializedAccessorNameTracker = new THashSet();
+ private final SkipDefaultValuesSerializationFilters mySerializationFilter = new SkipDefaultValuesSerializationFilters() {
+ @Override
+ protected boolean accepts(@NotNull Accessor accessor, @NotNull Object bean, @Nullable Object beanValue) {
+ if (mySerializedAccessorNameTracker.contains(accessor.getName())) {
+ return true;
+ }
+ return super.accepts(accessor, bean, beanValue);
+ }
+ };
+
+ @Override
+ public final void readExternal(Element element) {
+ mySerializedAccessorNameTracker.clear();
+ XmlSerializer.deserializeInto(this, element, mySerializedAccessorNameTracker);
+ }
+
+ @Override
+ public final void writeExternal(Element element) {
+ XmlSerializer.serializeInto(this, element, mySerializationFilter);
+ }
+}
\ No newline at end of file
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
index d0434b84c493..f979668495c4 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
@@ -262,9 +262,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
}
myUnloadedConfigurationPerRunnerSettings = null;
- for (Element configurationElement : element.getChildren(CONFIGURATION_ELEMENT)) {
- String id = configurationElement.getAttributeValue(RUNNER_ID);
- ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id);
+ for (Iterator iterator = element.getChildren(CONFIGURATION_ELEMENT).iterator(); iterator.hasNext(); ) {
+ Element configurationElement = iterator.next();
+ ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(configurationElement.getAttributeValue(RUNNER_ID));
if (runner != null) {
ConfigurationPerRunnerSettings settings = myConfiguration.createRunnerSettings(new InfoProvider(runner));
if (settings != null) {
@@ -276,15 +276,16 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
if (myUnloadedConfigurationPerRunnerSettings == null) {
myUnloadedConfigurationPerRunnerSettings = new SmartList();
}
+
+ iterator.remove();
myUnloadedConfigurationPerRunnerSettings.add(configurationElement);
}
}
}
@Override
- public void writeExternal(final Element element) throws WriteExternalException {
+ public void writeExternal(Element element) throws WriteExternalException {
final ConfigurationFactory factory = myConfiguration.getFactory();
-
if (!(myConfiguration instanceof UnknownRunConfiguration)) {
element.setAttribute(TEMPLATE_FLAG_ATTRIBUTE, String.valueOf(myIsTemplate));
if (!myIsTemplate) {
@@ -297,7 +298,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
}
//element.setAttribute(UNIQUE_ID, getUniqueID());
- if (isEditBeforeRun()) element.setAttribute(EDIT_BEFORE_RUN, String.valueOf(true));
+ if (isEditBeforeRun()) {
+ element.setAttribute(EDIT_BEFORE_RUN, String.valueOf(true));
+ }
if (myWasSingletonSpecifiedExplicitly || mySingleton != factory.isConfigurationSingletonByDefault()) {
element.setAttribute(SINGLETON, String.valueOf(mySingleton));
}
diff --git a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java
index 28d23331d090..57a13fe0e6d2 100644
--- a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java
+++ b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java
@@ -129,10 +129,12 @@ class BeanBinding implements Binding {
if (element == null) {
return o;
}
- return deserializeInto(XmlSerializerImpl.newInstance(myBeanClass), element);
+ Object instance = XmlSerializerImpl.newInstance(myBeanClass);
+ deserializeInto(instance, element, null);
+ return instance;
}
- public Object deserializeInto(@NotNull Object result, @NotNull Element element) {
+ public void deserializeInto(@NotNull Object result, @NotNull Element element, @Nullable Set accessorNameTracker) {
Set bindings = myPropertyBindings.keySet();
MultiMap data = MultiMap.createSmartList();
nextNode:
@@ -155,10 +157,11 @@ class BeanBinding implements Binding {
}
for (Binding binding : data.keySet()) {
+ if (accessorNameTracker != null) {
+ accessorNameTracker.add(myPropertyBindings.get(binding).getName());
+ }
binding.deserialize(result, ArrayUtil.toObjectArray(data.get(binding)));
}
-
- return result;
}
@Override
diff --git a/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java b/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java
index 7dd7f6856cae..76fa9d08c0e1 100644
--- a/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java
+++ b/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java
@@ -26,6 +26,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URL;
+import java.util.Set;
public class XmlSerializer {
private static final SerializationFilter TRUE_FILTER = new SerializationFilter() {
@@ -101,8 +102,12 @@ public class XmlSerializer {
}
public static void deserializeInto(@NotNull Object bean, @NotNull Element element) {
+ deserializeInto(bean, element, null);
+ }
+
+ public static void deserializeInto(@NotNull Object bean, @NotNull Element element, @Nullable Set accessorNameTracker) {
try {
- ((BeanBinding)XmlSerializerImpl.getBinding(bean.getClass())).deserializeInto(bean, element);
+ ((BeanBinding)XmlSerializerImpl.getBinding(bean.getClass())).deserializeInto(bean, element, accessorNameTracker);
}
catch (XmlSerializationException e) {
throw e;
From 6f64152699289506a7138f5d9686cb424cd39cc6 Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 13:14:13 +0100
Subject: [PATCH 18/79] cleanup
---
.../impl/GenericDebuggerParametersRunnerConfigurable.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java
index 9d5d48146b62..2d07226a7229 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java
@@ -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.
@@ -132,7 +132,7 @@ public class GenericDebuggerParametersRunnerConfigurable extends SettingsEditor<
}
private int getTransport() {
- if(myIsLocal) {
+ if (myIsLocal) {
return DebuggerSettings.getInstance().DEBUGGER_TRANSPORT;
}
else {
From b6ac8a108339b6a50acc1d1c5abcc4b2c371bcbf Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 13:42:11 +0100
Subject: [PATCH 19/79] =?UTF-8?q?RunnerAndConfigurationSettingsImpl=20?=
=?UTF-8?q?=E2=80=94=20don't=20save=20defaults?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../RunnerAndConfigurationSettingsImpl.java | 40 ++++++++++++-------
1 file changed, 26 insertions(+), 14 deletions(-)
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
index f979668495c4..59e2ac7622a4 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java
@@ -21,12 +21,11 @@ import com.intellij.execution.configurations.*;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.ExtensionException;
-import com.intellij.openapi.util.Factory;
-import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.JDOMExternalizable;
-import com.intellij.openapi.util.WriteExternalException;
+import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.SmartList;
+import gnu.trove.THashMap;
+import gnu.trove.THashSet;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -87,11 +86,13 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
private RunConfiguration myConfiguration;
private boolean myIsTemplate;
- private final Map myRunnerSettings = new HashMap();
- private List myUnloadedRunnerSettings = null;
+ private final Map myRunnerSettings = new THashMap();
+ private List myUnloadedRunnerSettings;
+ // to avoid changed files
+ private final Set myLoadedRunnerSettings = new THashSet();
- private final Map myConfigurationPerRunnerSettings = new HashMap();
- private List myUnloadedConfigurationPerRunnerSettings = null;
+ private final Map myConfigurationPerRunnerSettings = new THashMap();
+ private List myUnloadedConfigurationPerRunnerSettings;
private boolean myTemporary;
private boolean myEditBeforeRun;
@@ -242,11 +243,15 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
}
myConfiguration.readExternal(element);
- myUnloadedRunnerSettings = null;
+ if (myUnloadedRunnerSettings != null) {
+ myUnloadedRunnerSettings.clear();
+ }
+ myLoadedRunnerSettings.clear();
for (Element runnerElement : element.getChildren(RUNNER_ELEMENT)) {
String id = runnerElement.getAttributeValue(RUNNER_ID);
ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id);
if (runner != null) {
+ myLoadedRunnerSettings.add(id);
RunnerSettings settings = createRunnerSettings(runner);
if (settings != null) {
settings.readExternal(runnerElement);
@@ -340,16 +345,23 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
}
}
- private void writeRunnerSettings(final Comparator runnerComparator, final Element element) throws WriteExternalException {
- final ArrayList runnerSettings = new ArrayList();
+ private void writeRunnerSettings(@NotNull Comparator runnerComparator, @NotNull Element element) throws WriteExternalException {
+ List runnerSettings = new SmartList();
for (ProgramRunner runner : myRunnerSettings.keySet()) {
RunnerSettings settings = myRunnerSettings.get(runner);
+ boolean wasLoaded = myLoadedRunnerSettings.contains(runner.getRunnerId());
+ if (settings == null && !wasLoaded) {
+ continue;
+ }
+
Element runnerElement = new Element(RUNNER_ELEMENT);
if (settings != null) {
settings.writeExternal(runnerElement);
}
- runnerElement.setAttribute(RUNNER_ID, runner.getRunnerId());
- runnerSettings.add(runnerElement);
+ if (wasLoaded || !JDOMUtil.isEmpty(runnerElement)) {
+ runnerElement.setAttribute(RUNNER_ID, runner.getRunnerId());
+ runnerSettings.add(runnerElement);
+ }
}
if (myUnloadedRunnerSettings != null) {
for (Element unloadedRunnerSetting : myUnloadedRunnerSettings) {
@@ -372,7 +384,7 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
myConfiguration.checkConfiguration();
if (myConfiguration instanceof RunConfigurationBase) {
final RunConfigurationBase runConfigurationBase = (RunConfigurationBase) myConfiguration;
- Set runners = new HashSet();
+ Set runners = new THashSet();
runners.addAll(myRunnerSettings.keySet());
runners.addAll(myConfigurationPerRunnerSettings.keySet());
for (ProgramRunner runner : runners) {
From 4b07366a041940a3e63ba72d66c10ddc284dbee8 Mon Sep 17 00:00:00 2001
From: Dmitry Avdeev
Date: Fri, 31 Oct 2014 11:55:44 +0300
Subject: [PATCH 20/79] better proportion
---
.../ide/fileTemplates/impl/AllFileTemplatesConfigurable.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java
index 3ac590e5fb38..668089855d7a 100644
--- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java
+++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java
@@ -327,7 +327,7 @@ public class AllFileTemplatesConfigurable implements SearchableConfigurable, Con
});
myMainPanel = new JPanel(new BorderLayout());
- Splitter splitter = new Splitter();
+ Splitter splitter = new Splitter(false, 0.3f);
JPanel leftPanel = new JPanel(new BorderLayout());
leftPanel.add(myToolBar, BorderLayout.NORTH);
leftPanel.add(myTabbedPane.getComponent(), BorderLayout.CENTER);
From d54bb82c0b33470708c94379094c5618cef0eead Mon Sep 17 00:00:00 2001
From: Dmitry Avdeev
Date: Fri, 31 Oct 2014 13:27:54 +0300
Subject: [PATCH 21/79] cleanup
---
.../intellij/openapi/fileTypes/impl/AbstractFileType.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/AbstractFileType.java b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/AbstractFileType.java
index 7b43dfdff4f3..de74d6760915 100644
--- a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/AbstractFileType.java
+++ b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/AbstractFileType.java
@@ -26,6 +26,7 @@ import com.intellij.openapi.options.ExternalInfo;
import com.intellij.openapi.options.ExternalizableScheme;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.util.*;
+import com.intellij.util.ArrayUtil;
import com.intellij.util.text.StringTokenizer;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
@@ -279,12 +280,12 @@ public class AbstractFileType extends UserFileType implements
private static Element writeKeywords(Set keywords, String tagName, Element highlightingElement) {
if (keywords.size() == 0 && !ELEMENT_KEYWORDS.equals(tagName)) return null;
Element keywordsElement = new Element(tagName);
- String[] strings = keywords.toArray(new String[keywords.size()]);
+ String[] strings = ArrayUtil.toStringArray(keywords);
Arrays.sort(strings);
StringBuilder keywordsAttribute = new StringBuilder();
for (final String keyword : strings) {
- if (keyword.indexOf(SEMICOLON) == -1) {
+ if (!keyword.contains(SEMICOLON)) {
if (keywordsAttribute.length() != 0) keywordsAttribute.append(SEMICOLON);
keywordsAttribute.append(keyword);
} else {
From 80df9373bd7a43abedeb519afb4c869091ff1a03 Mon Sep 17 00:00:00 2001
From: Dmitry Avdeev
Date: Fri, 31 Oct 2014 16:02:29 +0300
Subject: [PATCH 22/79] IDEA-84417 Using File Templates without need to
register them at File Types
---
.../ide/fileTemplates/impl/FileTemplateConfigurable.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateConfigurable.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateConfigurable.java
index 199e6b4b1544..01d65df6952b 100644
--- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateConfigurable.java
+++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateConfigurable.java
@@ -42,6 +42,7 @@ import com.intellij.openapi.editor.ex.util.LayeredLexerEditorHighlighter;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory;
import com.intellij.openapi.fileTypes.*;
+import com.intellij.openapi.fileTypes.ex.FileTypeChooser;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
@@ -316,9 +317,14 @@ public class FileTemplateConfigurable implements Configurable, Configurable.NoSc
myTemplate.setText(myTemplateEditor.getDocument().getText());
String name = myNameField.getText();
String extension = myExtensionField.getText();
- if (name.length() == 0 || !isValidFilename(name + "." + extension)) {
+ String filename = name + "." + extension;
+ if (name.length() == 0 || !isValidFilename(filename)) {
throw new ConfigurationException(IdeBundle.message("error.invalid.template.file.name.or.extension"));
}
+ FileType fileType = FileTypeManager.getInstance().getFileTypeByFileName(filename);
+ if (fileType == UnknownFileType.INSTANCE) {
+ FileTypeChooser.associateFileType(filename);
+ }
myTemplate.setName(name);
myTemplate.setExtension(extension);
myTemplate.setReformatCode(myAdjustBox.isSelected());
From e00ed3fbd2f212ba18205271090da6554cbef1d9 Mon Sep 17 00:00:00 2001
From: Vladimir Krivosheev
Date: Fri, 31 Oct 2014 14:13:08 +0100
Subject: [PATCH 23/79] quick fix MapBinding assert
---
platform/util/src/com/intellij/util/xmlb/BeanBinding.java | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java
index 57a13fe0e6d2..c9078e63b009 100644
--- a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java
+++ b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java
@@ -100,11 +100,12 @@ class BeanBinding implements Binding {
}
}
+ if (element == null) {
+ element = new Element(myTagName);
+ }
+
Object node = binding.serialize(o, element, filter);
if (node != null) {
- if (element == null) {
- element = new Element(myTagName);
- }
if (node instanceof org.jdom.Attribute) {
element.setAttribute((org.jdom.Attribute)node);
}
From 5f147eff7e9a567fc6ade262cf1f3f816fa9a4f3 Mon Sep 17 00:00:00 2001
From: Anna Kozlova
Date: Fri, 31 Oct 2014 14:23:41 +0100
Subject: [PATCH 24/79] fix comparison level when checking type arguments
applicability (IDEA-132063)
---
.../src/com/intellij/psi/util/TypeConversionUtil.java | 2 +-
.../NestedLevelsToCheckTypeArguments.java | 5 +++++
.../codeInsight/daemon/GenericsHighlightingTest.java | 4 ++++
3 files changed, 10 insertions(+), 1 deletion(-)
create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/NestedLevelsToCheckTypeArguments.java
diff --git a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java
index b75d6687f8ac..78d3e73e7ea3 100644
--- a/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/TypeConversionUtil.java
@@ -384,7 +384,7 @@ public class TypeConversionUtil {
return aClass != null &&
bClass != null &&
aClass.getManager().areElementsEquivalent(aClass, bClass) &&
- areSameArgumentTypes(aClass, resolveResult1.getSubstitutor(), resolveResult2.getSubstitutor());
+ areSameArgumentTypes(aClass, resolveResult1.getSubstitutor(), resolveResult2.getSubstitutor(), 1);
}
private static boolean areSameArgumentTypes(@NotNull PsiClass aClass, @NotNull PsiSubstitutor substitutor1, @NotNull PsiSubstitutor substitutor2) {
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/NestedLevelsToCheckTypeArguments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/NestedLevelsToCheckTypeArguments.java
new file mode 100644
index 000000000000..d82c192ffb68
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/NestedLevelsToCheckTypeArguments.java
@@ -0,0 +1,5 @@
+class ImmutableSet {
+ void foo(final ImmutableSet> of) {
+ Object types = (ImmutableSet>) of;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
index dececea84471..cc02f8e523be 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
@@ -430,6 +430,10 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false);
}
+ public void testNestedLevelsToCheckTypeArguments() throws Exception {
+ doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false);
+ }
+
public void testJavaUtilCollections_NoVerify() throws Exception {
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));
assertNotNull(collectionsClass);
From e56797617f5e98e1479a1e93010f80e7d47c76b6 Mon Sep 17 00:00:00 2001
From: Michael Golubev
Date: Fri, 31 Oct 2014 13:54:29 +0100
Subject: [PATCH 25/79] IDEA-128789 - Heroku: in ApplicationServers tool window
focus always jumps on attempt to select externally deployed applications
nodes
---
.../remoteServer/impl/runtime/ServerConnectionImpl.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java
index 5c0e27634041..1d57dd28b915 100644
--- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java
+++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/ServerConnectionImpl.java
@@ -165,6 +165,15 @@ public class ServerConnectionImpl implements
@Override
public void succeeded() {
synchronized (myRemoteDeployments) {
+ for (DeploymentImpl deployment : new ArrayList(myDeployments)) {
+ DeploymentImpl oldDeployment = myRemoteDeployments.get(deployment.getName());
+ if (oldDeployment != null) {
+ oldDeployment.changeState(oldDeployment.getStatus(),
+ deployment.getStatus(), deployment.getStatusText(), deployment.getRuntime());
+ myDeployments.remove(deployment);
+ myDeployments.add(oldDeployment);
+ }
+ }
myRemoteDeployments.clear();
for (DeploymentImpl deployment : myDeployments) {
myRemoteDeployments.put(deployment.getName(), deployment);
From ba173b8bf099c5f7a7381e8095b93dcae3eb2557 Mon Sep 17 00:00:00 2001
From: Michael Golubev
Date: Fri, 31 Oct 2014 13:59:05 +0100
Subject: [PATCH 26/79] IDEA-126627 - Throwable at
com.intellij.openapi.editor.impl.EditorImpl.
---
.../remoteServer/impl/runtime/log/LoggingHandlerImpl.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/LoggingHandlerImpl.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/LoggingHandlerImpl.java
index 7434b10c453e..0637a2f43bb7 100644
--- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/LoggingHandlerImpl.java
+++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/runtime/log/LoggingHandlerImpl.java
@@ -7,6 +7,7 @@ import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Disposer;
import com.intellij.remoteServer.runtime.log.LoggingHandler;
import org.jetbrains.annotations.NotNull;
@@ -18,6 +19,7 @@ public class LoggingHandlerImpl implements LoggingHandler {
public LoggingHandlerImpl(@NotNull Project project) {
myConsole = TextConsoleBuilderFactory.getInstance().createBuilder(project).getConsole();
+ Disposer.register(project, myConsole);
}
@NotNull
From c6c10cdab5c95dac38278301b42f9ea9c2e7c0ca Mon Sep 17 00:00:00 2001
From: Michael Golubev
Date: Fri, 31 Oct 2014 14:06:02 +0100
Subject: [PATCH 27/79] CR-IC-6007 - IDEA-127974 - Allow to choose
artifact-only clouds in the Clouds module builder
---
.../impl/module/CloudModuleBuilderContributionFactory.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/java/remote-servers/impl/src/com/intellij/remoteServer/impl/module/CloudModuleBuilderContributionFactory.java b/java/remote-servers/impl/src/com/intellij/remoteServer/impl/module/CloudModuleBuilderContributionFactory.java
index 20ebc29fe148..5745d04bf988 100644
--- a/java/remote-servers/impl/src/com/intellij/remoteServer/impl/module/CloudModuleBuilderContributionFactory.java
+++ b/java/remote-servers/impl/src/com/intellij/remoteServer/impl/module/CloudModuleBuilderContributionFactory.java
@@ -30,7 +30,7 @@ public abstract class CloudModuleBuilderContributionFactory {
public static CloudModuleBuilderContributionFactory getInstanceByType(ServerType> cloudType) {
for (CloudModuleBuilderContributionFactory contribution : EP_NAME.getExtensions()) {
- if (contribution.getCloudType() == cloudType) {
+ if (contribution.getCloudType().equals(cloudType)) {
return contribution;
}
}
From cee1453146af25e3fe388276cddd3c8c9d9769fe Mon Sep 17 00:00:00 2001
From: Alexander Doroshko
Date: Fri, 31 Oct 2014 16:58:55 +0300
Subject: [PATCH 28/79] VfsRootAccess.allowRootAccess() for test data (actual
for 3rd party developers who work with a separate plugin module)
---
.../codeInsight/CodeInsightTestCase.java | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/java/testFramework/src/com/intellij/codeInsight/CodeInsightTestCase.java b/java/testFramework/src/com/intellij/codeInsight/CodeInsightTestCase.java
index e86257d8e36f..8fcd8c52a493 100644
--- a/java/testFramework/src/com/intellij/codeInsight/CodeInsightTestCase.java
+++ b/java/testFramework/src/com/intellij/codeInsight/CodeInsightTestCase.java
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.codeInsight.highlighting.HighlightUsagesHandler;
import com.intellij.ide.DataManager;
import com.intellij.injected.editor.EditorWindow;
+import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.Result;
@@ -40,9 +41,11 @@ import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.*;
+import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
@@ -119,6 +122,7 @@ public abstract class CodeInsightTestCase extends PsiTestCase {
for (int i = 0; i < files.length; i++) {
String path = files[i];
final String fullPath = FileUtil.toSystemIndependentName(getTestDataPath() + path);
+ allowRootAccess(fullPath);
VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fullPath);
vFiles[i] = vFile;
assertNotNull("file " + fullPath + " not found", vFile);
@@ -129,8 +133,19 @@ public abstract class CodeInsightTestCase extends PsiTestCase {
return configureByFiles(projectFile, vFiles);
}
+ private void allowRootAccess(final String filePath) {
+ VfsRootAccess.allowRootAccess(filePath);
+ Disposer.register(myTestRootDisposable, new Disposable() {
+ @Override
+ public void dispose() {
+ VfsRootAccess.disallowRootAccess(filePath);
+ }
+ });
+ }
+
protected VirtualFile configureByFile(@NonNls String filePath, @Nullable String projectRoot) throws Exception {
String fullPath = getTestDataPath() + filePath;
+ allowRootAccess(fullPath);
final VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fullPath.replace(File.separatorChar, '/'));
assertNotNull("file " + fullPath + " not found", vFile);
@@ -475,6 +490,7 @@ public abstract class CodeInsightTestCase extends PsiTestCase {
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
String fullPath = getTestDataPath() + filePath;
+ allowRootAccess(fullPath);
final VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fullPath.replace(File.separatorChar, '/'));
assertNotNull("Cannot find file " + fullPath, vFile);
@@ -549,6 +565,7 @@ public abstract class CodeInsightTestCase extends PsiTestCase {
protected VirtualFile getVirtualFile(@NonNls @NotNull String filePath) {
String fullPath = getTestDataPath() + filePath;
+ allowRootAccess(fullPath);
final VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(fullPath.replace(File.separatorChar, '/'));
assertNotNull("file " + fullPath + " not found", vFile);
From ddcccb0085a586860f13f86a637921a6359efebe Mon Sep 17 00:00:00 2001
From: peter
Date: Fri, 31 Oct 2014 15:02:49 +0400
Subject: [PATCH 29/79] IDEA-132163 Symbol search: LiBo.paBo should find
LineBorder.paintBorder from JDK
---
.../DefaultSymbolNavigationContributor.java | 42 +++++++++++--------
.../navigation/ChooseByNameTest.groovy | 8 ++++
2 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java
index a2256a79b850..24ada216c0d9 100644
--- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java
+++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java
@@ -62,9 +62,11 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut
GlobalSearchScope scope = includeNonProjectItems ? GlobalSearchScope.allScope(project) : GlobalSearchScope.projectScope(project);
PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project);
+ Condition qualifiedMatcher = getQualifiedNameMatcher(pattern);
+
List result = new ArrayList();
for (PsiMethod method : cache.getMethodsByName(name, scope)) {
- if (!method.isConstructor() && isOpenable(method) && !hasSuperMethod(method, scope)) {
+ if (!method.isConstructor() && isOpenable(method) && !hasSuperMethod(method, scope, qualifiedMatcher)) {
result.add(method);
}
}
@@ -87,13 +89,14 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut
return member.getContainingFile().getVirtualFile() != null;
}
- private static boolean hasSuperMethod(PsiMethod method, GlobalSearchScope scope) {
+ private static boolean hasSuperMethod(PsiMethod method, GlobalSearchScope scope, Condition qualifiedMatcher) {
PsiClass containingClass = method.getContainingClass();
if (containingClass == null) return false;
for (PsiMethod candidate : containingClass.findMethodsByName(method.getName(), true)) {
if (candidate.getContainingClass() != containingClass &&
PsiSearchScopeUtil.isInScope(scope, candidate) &&
+ qualifiedMatcher.value(candidate) &&
PsiSuperMethodImplUtil.isSuperMethodSmart(method, candidate)) {
return true;
}
@@ -118,20 +121,7 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut
PsiShortNamesCache cache = PsiShortNamesCache.getInstance(scope.getProject());
String completePattern = parameters.getCompletePattern();
- final Condition qualifiedMatcher;
- if (completePattern.contains(".")) {
- final MinusculeMatcher matcher = new MinusculeMatcher("*" + StringUtil.replace(completePattern, ".", ".*"), NameUtil.MatchingCaseSensitivity.NONE);
- qualifiedMatcher = new Condition() {
- @Override
- public boolean value(PsiMember member) {
- String qualifiedName = PsiUtil.getMemberQualifiedName(member);
- return qualifiedName != null && matcher.matches(qualifiedName);
- }
- };
- } else {
- //noinspection unchecked
- qualifiedMatcher = Condition.TRUE;
- }
+ final Condition qualifiedMatcher = getQualifiedNameMatcher(completePattern);
//noinspection UnusedDeclaration
final Set collectedMethods = new THashSet();
@@ -163,13 +153,31 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut
Iterator iterator = collectedMethods.iterator();
while(iterator.hasNext()) {
PsiMethod method = iterator.next();
- if (!hasSuperMethod(method, scope) && !processor.process(method)) return;
+ if (!hasSuperMethod(method, scope, qualifiedMatcher) && !processor.process(method)) return;
ProgressManager.checkCanceled();
iterator.remove();
}
}
}
+ private static Condition getQualifiedNameMatcher(String completePattern) {
+ final Condition qualifiedMatcher;
+ if (completePattern.contains(".")) {
+ final MinusculeMatcher matcher = new MinusculeMatcher("*" + StringUtil.replace(completePattern, ".", ".*"), NameUtil.MatchingCaseSensitivity.NONE);
+ qualifiedMatcher = new Condition() {
+ @Override
+ public boolean value(PsiMember member) {
+ String qualifiedName = PsiUtil.getMemberQualifiedName(member);
+ return qualifiedName != null && matcher.matches(qualifiedName);
+ }
+ };
+ } else {
+ //noinspection unchecked
+ qualifiedMatcher = Condition.TRUE;
+ }
+ return qualifiedMatcher;
+ }
+
private static class MyComparator implements Comparator{
public static final MyComparator INSTANCE = new MyComparator();
diff --git a/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy b/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy
index 0a5b65deb372..cbe18110f49a 100644
--- a/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy
@@ -239,6 +239,14 @@ class Intf {
assert !(sdkRun in noLibs)
}
+ public void "test super method not matching query qualifier"() {
+ def base = myFixture.addClass("class Base { void xpaint() {} }").methods[0]
+ def sub = myFixture.addClass("class Sub extends Base { void xpaint() {} }").methods[0]
+
+ assert getPopupElements(new GotoSymbolModel2(project), 'Ba.xpai', false) == [base]
+ assert getPopupElements(new GotoSymbolModel2(project), 'Su.xpai', false) == [sub]
+ }
+
private List

-
-