From e6d905b28a4ab5614f4b5728cfc92d224218f514 Mon Sep 17 00:00:00 2001
From: Sergey Malenkov
Date: Fri, 31 Oct 2014 15:26:49 +0300
Subject: [PATCH 01/34] 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 02/34] 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 03/34] 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 04/34] 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 05/34] 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 06/34] 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 07/34] 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 08/34] 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 09/34] 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 10/34] =?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 11/34] 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 12/34] =?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 13/34] 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 14/34] 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 15/34] 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 16/34] 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 17/34] 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 18/34] 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 19/34] 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 20/34] 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 21/34] 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 22/34] 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

-
-