diff --git a/.idea/libraries/Ant.xml b/.idea/libraries/Ant.xml
index dfdd147fd7bc..4d69c6899db3 100644
--- a/.idea/libraries/Ant.xml
+++ b/.idea/libraries/Ant.xml
@@ -28,7 +28,6 @@
-
diff --git a/.idea/libraries/CGLIB.xml b/.idea/libraries/CGLIB.xml
index 061f6f213744..b7e692fa647e 100644
--- a/.idea/libraries/CGLIB.xml
+++ b/.idea/libraries/CGLIB.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/DTDParser.xml b/.idea/libraries/DTDParser.xml
index dcc82b44e627..c40d012406c8 100644
--- a/.idea/libraries/DTDParser.xml
+++ b/.idea/libraries/DTDParser.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/EasyMock.xml b/.idea/libraries/EasyMock.xml
index 05648438f07a..cc51a3eea9a6 100644
--- a/.idea/libraries/EasyMock.xml
+++ b/.idea/libraries/EasyMock.xml
@@ -4,7 +4,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Eclipse.xml b/.idea/libraries/Eclipse.xml
index 09b7e2c73bd4..7fa7c6724800 100644
--- a/.idea/libraries/Eclipse.xml
+++ b/.idea/libraries/Eclipse.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/Gant.xml b/.idea/libraries/Gant.xml
index ec46297abec3..ccd8bf04bef7 100644
--- a/.idea/libraries/Gant.xml
+++ b/.idea/libraries/Gant.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/Groovy.xml b/.idea/libraries/Groovy.xml
index 82c7bd9c0740..39ef164c7fa7 100644
--- a/.idea/libraries/Groovy.xml
+++ b/.idea/libraries/Groovy.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/JDOM.xml b/.idea/libraries/JDOM.xml
index 17d2e7336796..bce78cc5489e 100644
--- a/.idea/libraries/JDOM.xml
+++ b/.idea/libraries/JDOM.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/JMock1.xml b/.idea/libraries/JMock1.xml
index ca4dac06d5e2..28bec95a2700 100644
--- a/.idea/libraries/JMock1.xml
+++ b/.idea/libraries/JMock1.xml
@@ -4,7 +4,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/JUnit3.xml b/.idea/libraries/JUnit3.xml
index c8e5da0d1ec9..c1b662d9bfb0 100644
--- a/.idea/libraries/JUnit3.xml
+++ b/.idea/libraries/JUnit3.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/JUnit4.xml b/.idea/libraries/JUnit4.xml
index 6e7ba44fb1d0..3293fe32308b 100644
--- a/.idea/libraries/JUnit4.xml
+++ b/.idea/libraries/JUnit4.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/JavaHelp.xml b/.idea/libraries/JavaHelp.xml
index 458f03548750..a581fbd1d42b 100644
--- a/.idea/libraries/JavaHelp.xml
+++ b/.idea/libraries/JavaHelp.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/Jaxen.xml b/.idea/libraries/Jaxen.xml
index dd17c6df93a6..8c9fa7adb99c 100644
--- a/.idea/libraries/Jaxen.xml
+++ b/.idea/libraries/Jaxen.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Log4J.xml b/.idea/libraries/Log4J.xml
index 6e3948c15fc9..3179b1470772 100644
--- a/.idea/libraries/Log4J.xml
+++ b/.idea/libraries/Log4J.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/Mac.xml b/.idea/libraries/Mac.xml
index 256d4c9e54a9..a12291d435e5 100644
--- a/.idea/libraries/Mac.xml
+++ b/.idea/libraries/Mac.xml
@@ -4,7 +4,6 @@
-
diff --git a/.idea/libraries/Mocks.xml b/.idea/libraries/Mocks.xml
index 5a52b9d16391..e4bf218554bf 100644
--- a/.idea/libraries/Mocks.xml
+++ b/.idea/libraries/Mocks.xml
@@ -12,7 +12,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/NanoXML.xml b/.idea/libraries/NanoXML.xml
index b189c1aeccf4..0bb733ed7323 100644
--- a/.idea/libraries/NanoXML.xml
+++ b/.idea/libraries/NanoXML.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/OroMatcher.xml b/.idea/libraries/OroMatcher.xml
index 11cae893cfea..91713b2ea1e2 100644
--- a/.idea/libraries/OroMatcher.xml
+++ b/.idea/libraries/OroMatcher.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/TestNG.xml b/.idea/libraries/TestNG.xml
index 5ab2412b1a6e..a5778213fdef 100644
--- a/.idea/libraries/TestNG.xml
+++ b/.idea/libraries/TestNG.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Trove4j.xml b/.idea/libraries/Trove4j.xml
index ffb447bb506b..3f41197d62e8 100644
--- a/.idea/libraries/Trove4j.xml
+++ b/.idea/libraries/Trove4j.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/Velocity.xml b/.idea/libraries/Velocity.xml
index 6af932840678..3d7e67090faf 100644
--- a/.idea/libraries/Velocity.xml
+++ b/.idea/libraries/Velocity.xml
@@ -4,7 +4,6 @@
-
diff --git a/.idea/libraries/XStream.xml b/.idea/libraries/XStream.xml
index 1ae2bba6df3e..d910ea261e1e 100644
--- a/.idea/libraries/XStream.xml
+++ b/.idea/libraries/XStream.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Xerces.xml b/.idea/libraries/Xerces.xml
index 70f9b6a585a0..c5dbcdcf4e97 100644
--- a/.idea/libraries/Xerces.xml
+++ b/.idea/libraries/Xerces.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/XmlBeans.xml b/.idea/libraries/XmlBeans.xml
index 9ba2a85a0698..77058a249a98 100644
--- a/.idea/libraries/XmlBeans.xml
+++ b/.idea/libraries/XmlBeans.xml
@@ -5,7 +5,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/XmlRPC.xml b/.idea/libraries/XmlRPC.xml
index 4dc45f5b4c27..ac9c9a5dbc94 100644
--- a/.idea/libraries/XmlRPC.xml
+++ b/.idea/libraries/XmlRPC.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/asm.xml b/.idea/libraries/asm.xml
index 449c600c9d8d..183a1bb65b08 100644
--- a/.idea/libraries/asm.xml
+++ b/.idea/libraries/asm.xml
@@ -4,7 +4,6 @@
-
diff --git a/.idea/libraries/commons_codec.xml b/.idea/libraries/commons_codec.xml
index 3921ae1a3395..edbee5956ef0 100644
--- a/.idea/libraries/commons_codec.xml
+++ b/.idea/libraries/commons_codec.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/commons_collections.xml b/.idea/libraries/commons_collections.xml
index 489c3f067ebf..346eec1cf896 100644
--- a/.idea/libraries/commons_collections.xml
+++ b/.idea/libraries/commons_collections.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/commons_lang.xml b/.idea/libraries/commons_lang.xml
index ba16df792f70..735f56f94f1e 100644
--- a/.idea/libraries/commons_lang.xml
+++ b/.idea/libraries/commons_lang.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/commons_net.xml b/.idea/libraries/commons_net.xml
index 73d5abb5afc1..a67717822b3e 100644
--- a/.idea/libraries/commons_net.xml
+++ b/.idea/libraries/commons_net.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/jcip.xml b/.idea/libraries/jcip.xml
index 5109f151a699..1a6bfae9c4c1 100644
--- a/.idea/libraries/jcip.xml
+++ b/.idea/libraries/jcip.xml
@@ -3,7 +3,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/jgoodies_forms.xml b/.idea/libraries/jgoodies_forms.xml
index 0acd33f16bd7..6d2c19a1d4c8 100644
--- a/.idea/libraries/jgoodies_forms.xml
+++ b/.idea/libraries/jgoodies_forms.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/jna.xml b/.idea/libraries/jna.xml
index 8c0751775e1e..9fbb37eb48fc 100644
--- a/.idea/libraries/jna.xml
+++ b/.idea/libraries/jna.xml
@@ -4,7 +4,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/microba.xml b/.idea/libraries/microba.xml
index 893e0dcc7f2a..771a1df5a98f 100644
--- a/.idea/libraries/microba.xml
+++ b/.idea/libraries/microba.xml
@@ -4,7 +4,5 @@
-
-
\ No newline at end of file
diff --git a/.idea/libraries/picocontainer.xml b/.idea/libraries/picocontainer.xml
index 0850ebb24085..e07ed90f94b5 100644
--- a/.idea/libraries/picocontainer.xml
+++ b/.idea/libraries/picocontainer.xml
@@ -3,7 +3,6 @@
-
diff --git a/.idea/libraries/tcServiceMessages.xml b/.idea/libraries/tcServiceMessages.xml
index e3cc93f1d751..2117ae66d481 100644
--- a/.idea/libraries/tcServiceMessages.xml
+++ b/.idea/libraries/tcServiceMessages.xml
@@ -3,7 +3,6 @@
-
diff --git a/java/compiler/impl/compiler-impl.iml b/java/compiler/impl/compiler-impl.iml
index 4f7473c9ff2a..381f3496886b 100644
--- a/java/compiler/impl/compiler-impl.iml
+++ b/java/compiler/impl/compiler-impl.iml
@@ -23,8 +23,6 @@
-
-
diff --git a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java
index 3a833f51f11c..b4f6f769e207 100644
--- a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java
+++ b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java
@@ -48,6 +48,7 @@ public abstract class RunConfigurationExtension {
public static final ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.runConfigurationExtension");
public static final Key RUN_EXTENSIONS = Key.create("run.extension.elemnts");
public abstract void handleStartProcess(final ModuleBasedConfiguration configuration, final OSProcessHandler handler);
+ @Nullable
public abstract SettingsEditor createEditor(T configuration);
public abstract String getEditorTitle();
public abstract String getName();
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java
index 729972d24cdf..64018fe883de 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java
@@ -285,7 +285,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
String underlyingFrameworkId = provider.getUnderlyingFrameworkId();
FrameworkSupportNode parentNode = null;
if (underlyingFrameworkId != null) {
- FrameworkSupportProvider parentProvider = findProvider(underlyingFrameworkId);
+ FrameworkSupportProvider parentProvider = findProvider(underlyingFrameworkId, myProviders);
if (parentProvider == null) {
LOG.info("Cannot find id = " + underlyingFrameworkId);
return null;
@@ -300,8 +300,8 @@ public class AddSupportForFrameworksPanel implements Disposable {
}
@Nullable
- private FrameworkSupportProvider findProvider(@NotNull String id) {
- for (FrameworkSupportProvider provider : myProviders) {
+ private static FrameworkSupportProvider findProvider(@NotNull String id, final List providers) {
+ for (FrameworkSupportProvider provider : providers) {
if (id.equals(provider.getId())) {
return provider;
}
@@ -362,13 +362,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
}
private void sortFrameworks(final List nodes) {
- DFSTBuilder builder = new DFSTBuilder(GraphGenerator.create(CachingSemiGraph.create(new ProvidersGraph(myProviders))));
- if (!builder.isAcyclic()) {
- Pair pair = builder.getCircularDependency();
- LOG.error("Circular dependency between providers '" + pair.getFirst().getId() + "' and '" + pair.getSecond().getId() + "' was found.");
- }
-
- final Comparator comparator = builder.comparator();
+ final Comparator comparator = getFrameworkSupportProvidersComparator(myProviders);
Collections.sort(nodes, new Comparator() {
public int compare(final FrameworkSupportNode o1, final FrameworkSupportNode o2) {
return comparator.compare(o1.getProvider(), o2.getProvider());
@@ -376,7 +370,19 @@ public class AddSupportForFrameworksPanel implements Disposable {
});
}
- private class ProvidersGraph implements GraphGenerator.SemiGraph {
+ public static Comparator getFrameworkSupportProvidersComparator(final List providers) {
+ DFSTBuilder
+ builder = new DFSTBuilder(GraphGenerator.create(CachingSemiGraph.create(
+ new ProvidersGraph(providers))));
+ if (!builder.isAcyclic()) {
+ Pair pair = builder.getCircularDependency();
+ LOG.error("Circular dependency between providers '" + pair.getFirst().getId() + "' and '" + pair.getSecond().getId() + "' was found.");
+ }
+
+ return builder.comparator();
+ }
+
+ private static class ProvidersGraph implements GraphGenerator.SemiGraph {
private final List myFrameworkSupportProviders;
public ProvidersGraph(final List frameworkSupportProviders) {
@@ -392,13 +398,13 @@ public class AddSupportForFrameworksPanel implements Disposable {
List dependencies = new ArrayList();
String underlyingId = provider.getUnderlyingFrameworkId();
if (underlyingId != null) {
- FrameworkSupportProvider underlyingProvider = findProvider(underlyingId);
+ FrameworkSupportProvider underlyingProvider = findProvider(underlyingId, myFrameworkSupportProviders);
if (underlyingProvider != null) {
dependencies.add(underlyingProvider);
}
}
for (String id : ids) {
- FrameworkSupportProvider dependency = findProvider(id);
+ FrameworkSupportProvider dependency = findProvider(id, myFrameworkSupportProviders);
if (dependency != null) {
dependencies.add(dependency);
}
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java
index 14865f42312a..8a831a5077be 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworksTree.java
@@ -17,6 +17,8 @@ package com.intellij.ide.util.newProjectWizard;
import com.intellij.ui.CheckboxTree;
import com.intellij.ui.CheckedTreeNode;
+import com.intellij.ui.TreeSpeedSearch;
+import com.intellij.util.containers.Convertor;
import com.intellij.util.ui.tree.TreeUtil;
import javax.swing.*;
@@ -63,6 +65,20 @@ public class FrameworksTree extends CheckboxTree {
super.processMouseEvent(e);
}
+ @Override
+ protected void installSpeedSearch() {
+ new TreeSpeedSearch(this, new Convertor() {
+ @Override
+ public String convert(TreePath path) {
+ final Object node = path.getLastPathComponent();
+ if (node instanceof FrameworkSupportNode) {
+ return ((FrameworkSupportNode)node).getTitle();
+ }
+ return "";
+ }
+ });
+ }
+
public boolean isProcessingMouseEventOnCheckbox() {
return myProcessingMouseEventOnCheckbox;
}
diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/StepSequence.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/StepSequence.java
index 26ab9a35bf03..87dd1330a927 100644
--- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/StepSequence.java
+++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/StepSequence.java
@@ -23,6 +23,7 @@ package com.intellij.ide.util.newProjectWizard;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.openapi.module.ModuleType;
import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -41,7 +42,7 @@ public class StepSequence {
myParentSequence = stepSequence;
}
- public void addCommonStep(ModuleWizardStep step){
+ public void addCommonStep(@NotNull ModuleWizardStep step){
myCommonSteps.add(step);
}
diff --git a/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java b/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java
index b2a8c3692d6f..32d08259fbcf 100644
--- a/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java
+++ b/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java
@@ -34,7 +34,7 @@ import org.jetbrains.annotations.NotNull;
*
* @since 5.1
*/
-public class CreateClassAction extends CreateTemplateInPackageAction {
+public class CreateClassAction extends JavaCreateTemplateInPackageAction {
public CreateClassAction() {
super(IdeBundle.message("action.create.new.class"), IdeBundle.message("action.create.new.class"), Icons.CLASS_ICON, true);
}
diff --git a/java/java-impl/src/com/intellij/ide/actions/JavaCreateTemplateInPackageAction.java b/java/java-impl/src/com/intellij/ide/actions/JavaCreateTemplateInPackageAction.java
new file mode 100644
index 000000000000..9171a14b36e6
--- /dev/null
+++ b/java/java-impl/src/com/intellij/ide/actions/JavaCreateTemplateInPackageAction.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.ide.actions;
+
+import com.intellij.psi.JavaDirectoryService;
+import com.intellij.psi.PsiDirectory;
+import com.intellij.psi.PsiElement;
+import com.intellij.util.IncorrectOperationException;
+
+import javax.swing.*;
+
+public abstract class JavaCreateTemplateInPackageAction extends CreateTemplateInPackageAction {
+
+ protected JavaCreateTemplateInPackageAction(String text, String description, Icon icon, boolean inSourceOnly) {
+ super(text, description, icon, inSourceOnly);
+ }
+
+ @Override
+ protected boolean checkPackageExists(PsiDirectory directory) {
+ return JavaDirectoryService.getInstance().getPackage(directory) != null;
+ }
+
+ protected void doCheckCreate(PsiDirectory dir, String className, String templateName) throws IncorrectOperationException {
+ JavaDirectoryService.getInstance().checkCreateClass(dir, className);
+ }
+
+}
diff --git a/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java b/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java
index d203f7aa8d85..ec37e90cb4e1 100644
--- a/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java
+++ b/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java
@@ -29,8 +29,10 @@ import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessTerminatedListener;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.ide.BrowserUtil;
+import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
+import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.JavaSdkType;
@@ -38,6 +40,7 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.ex.PathUtilEx;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.util.PathUtil;
@@ -49,8 +52,12 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.regex.Pattern;
/**
* @author Eugene Zhuravlev
@@ -75,6 +82,7 @@ public class JavadocConfiguration implements ModuleRunProfile, JDOMExternalizabl
private final Project myProject;
private AnalysisScope myGenerationScope;
+ private static final Logger LOGGER = Logger.getInstance("#" + JavadocConfiguration.class.getName());
public void setGenerationScope(AnalysisScope generationScope) {
myGenerationScope = generationScope;
@@ -236,22 +244,42 @@ public class JavadocConfiguration implements ModuleRunProfile, JDOMExternalizabl
parameters.add(classPathString);
}
- parameters.add("-sourcepath");
- parameters.add(OrderEnumerator.orderEntries(myProject).withoutSdk().withoutLibraries().getSourcePathsList().getPathsString());
-
if (OUTPUT_DIRECTORY != null) {
parameters.add("-d");
parameters.add(OUTPUT_DIRECTORY.replace('/', File.separatorChar));
}
- final Collection packages = new HashSet();
- final Collection sources = new HashSet();
- myGenerationOptions.accept(new MyContentIterator(myProject, packages, sources));
- if (packages.size() + sources.size() == 0) {
- throw new CantRunException(JavadocBundle.message("javadoc.generate.no.classes.in.selected.packages.error"));
+ try {
+ File sourcepathTempFile = File.createTempFile("javadoc", "args.txt");
+ sourcepathTempFile.deleteOnExit();
+ parameters.add("@" + sourcepathTempFile.getCanonicalPath());
+ final PrintWriter writer = new PrintWriter(new FileWriter(sourcepathTempFile));
+ try {
+ writer.println("-sourcepath");
+ writer.println(OrderEnumerator.orderEntries(myProject).withoutSdk().withoutLibraries().getSourcePathsList().getPathsString());
+ final Collection packages = new HashSet();
+ final Collection sources = new HashSet();
+ final Runnable findRunnable = new Runnable() {
+ public void run() {
+ myGenerationOptions.accept(new MyContentIterator(myProject, packages, sources));
+ }
+ };
+ if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(findRunnable, "Search for sources to generate javadoc in...", false, myProject)) {
+ return;
+ }
+ if (packages.size() + sources.size() == 0) {
+ throw new CantRunException(JavadocBundle.message("javadoc.generate.no.classes.in.selected.packages.error"));
+ }
+ writer.println(StringUtil.join(packages, " "));
+ writer.println(StringUtil.join(sources, " "));
+ }
+ finally {
+ writer.close();
+ }
+ }
+ catch (IOException e) {
+ LOGGER.error(e);
}
- parameters.addAll(new ArrayList(packages));
- parameters.addAll(new ArrayList(sources));
}
protected OSProcessHandler startProcess() throws ExecutionException {
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
index 67abae3ba884..a674ea013098 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
@@ -185,6 +185,9 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
if (wildcardToCapture != null) {
if (lowerBound != PsiType.NULL) {
if (!wildcardToCapture.isAssignableFrom(lowerBound)) return getFailedInferenceConstraint(typeParameter);
+ if (wildcardToCapture.isSuper()) {
+ return new Pair(wildcardToCapture, ConstraintType.SUPERTYPE);
+ }
lowerBound = GenericsUtil.getLeastUpperBound(lowerBound, wildcardToCapture, typeParameter.getManager());
}
else {
diff --git a/java/java-impl/src/com/intellij/refactoring/OptimizeImportsRefactoringHelper.java b/java/java-impl/src/com/intellij/refactoring/OptimizeImportsRefactoringHelper.java
index b615d96b6693..08719452aab8 100644
--- a/java/java-impl/src/com/intellij/refactoring/OptimizeImportsRefactoringHelper.java
+++ b/java/java-impl/src/com/intellij/refactoring/OptimizeImportsRefactoringHelper.java
@@ -48,7 +48,11 @@ public class OptimizeImportsRefactoringHelper implements RefactoringHelper javaFiles) {
- PsiDocumentManager.getInstance(project).commitAllDocuments();
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ public void run() {
+ PsiDocumentManager.getInstance(project).commitAllDocuments();
+ }
+ });
final Set> redundants = new HashSet>();
final Runnable findRedundantImports = new Runnable() {
public void run() {
diff --git a/java/java-impl/src/com/intellij/refactoring/RefactorJBundle.properties b/java/java-impl/src/com/intellij/refactoring/RefactorJBundle.properties
index 178a50c038f1..f01ed4fc2c82 100644
--- a/java/java-impl/src/com/intellij/refactoring/RefactorJBundle.properties
+++ b/java/java-impl/src/com/intellij/refactoring/RefactorJBundle.properties
@@ -190,7 +190,7 @@ the.refactoring.is.not.supported.on.non.static.inner.classes=The refactoring is
the.selected.class.has.no.members.to.extract=The selected class has no members to extract.
references.to.extract=References to extract
extracting.from.class=Extracting from class:
-extracted.class.command.name=Extracted class {0}
+extracted.class.command.name=Extracted delegate {0}
method.to.extract.parameters.from.label=Method to extract parameters from:
name.for.new.parameter.label=Name for new parameter:
method.selected.has.no.parameters=Method selected has no parameters.
diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java
index 9901f3a6dbd2..2122580a4488 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java
@@ -229,6 +229,11 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
if (canBeVarargs) {
myCbMakeVarargs = new NonFocusableCheckBox(RefactoringBundle.message("declare.varargs.checkbox"));
updateVarargsEnabled();
+ myCbMakeVarargs.addItemListener(new ItemListener() {
+ public void itemStateChanged(ItemEvent e) {
+ updateSignature();
+ }
+ });
myCbMakeVarargs.setSelected(false);
panel.add(myCbMakeVarargs);
}
diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassHandler.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassHandler.java
index 574899db05d0..a0df14bbc042 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassHandler.java
@@ -31,10 +31,6 @@ import org.jetbrains.annotations.NotNull;
public class ExtractClassHandler implements RefactoringActionHandler {
- protected static String getRefactoringName() {
- return RefactorJBundle.message("extract.class");
- }
-
protected static String getHelpID() {
return HelpID.ExtractClass;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java
index 967b5054fd2d..69f89f7678b0 100644
--- a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java
@@ -65,9 +65,13 @@ public class IntroduceFieldHandler extends BaseExpressionToFieldHandler {
protected Settings showRefactoringDialog(Project project, Editor editor, PsiClass parentClass, PsiExpression expr,
PsiType type,
PsiExpression[] occurences, PsiElement anchorElement, PsiElement anchorElementIfAll) {
- final PsiMethod containingMethod = PsiTreeUtil.getParentOfType(expr, PsiMethod.class);
- PsiElement element = expr.getUserData(ElementToWorkOn.PARENT);
- if (element == null) element = expr;
+ final PsiMethod containingMethod = PsiTreeUtil.getParentOfType(expr != null ? expr : anchorElement, PsiMethod.class);
+ PsiElement element = null;
+ if (expr != null) {
+ element = expr.getUserData(ElementToWorkOn.PARENT);
+ if (element == null) element = expr;
+ }
+ if (element == null) element = anchorElement;
final PsiModifierListOwner staticParentElement = PsiUtil.getEnclosingStaticElement(element, parentClass);
boolean declareStatic = staticParentElement != null;
diff --git a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java
index d2252ddb0632..e9c123c3d693 100644
--- a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java
@@ -233,7 +233,9 @@ public class InvertBooleanProcessor extends BaseRefactoringProcessor {
((PsiPrefixExpression)expression.getParent()).getOperationSign().getTokenType() == JavaTokenType.EXCL) {
expression = (PsiExpression)expression.getParent();
}
- expression.replace(CodeInsightServicesUtil.invertCondition(expression));
+ if (!(expression.getParent() instanceof PsiExpressionStatement)) {
+ expression.replace(CodeInsightServicesUtil.invertCondition(expression));
+ }
}
catch (IncorrectOperationException e) {
LOG.error(e);
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java
index 59df4a4a9f39..fd26092d74cb 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java
@@ -63,9 +63,9 @@ public class PullUpConflictsUtil {
}
public static MultiMap checkConflicts(final MemberInfo[] infos,
- PsiClass subclass,
+ final PsiClass subclass,
@Nullable PsiClass superClass,
- PsiPackage targetPackage,
+ final PsiPackage targetPackage,
PsiDirectory targetDirectory,
final InterfaceContainmentVerifier interfaceContainmentVerifier,
boolean movedMembers2Super) {
@@ -143,6 +143,39 @@ public class PullUpConflictsUtil {
}
RefactoringConflictsUtil.analyzeModuleConflicts(subclass.getProject(), checkModuleConflictsList,
new UsageInfo[0], targetRepresentativeElement, conflicts);
+ for (final PsiMethod abstractMethod : abstractMethods) {
+ final boolean toDifferentPackage =
+ !Comparing.strEqual(targetPackage.getQualifiedName(), StringUtil.getPackageName(subclass.getQualifiedName()));
+ abstractMethod.accept(new ClassMemberReferencesVisitor(subclass) {
+ @Override
+ protected void visitClassMemberReferenceElement(PsiMember classMember, PsiJavaCodeReferenceElement classMemberReference) {
+ if (classMember != null && willBeMoved(classMember, movedMembers)) {
+ boolean isAccessible = false;
+ if (classMember.hasModifierProperty(PsiModifier.PRIVATE)) {
+ isAccessible = true;
+ }
+ else if (classMember.hasModifierProperty(PsiModifier.PACKAGE_LOCAL) &&
+ toDifferentPackage) {
+ isAccessible = true;
+ }
+ if (isAccessible) {
+ String message = RefactoringUIUtil.getDescription(abstractMethod, false) +
+ " uses " +
+ RefactoringUIUtil.getDescription(classMember, true) +
+ " which won't be accessible from the subclass.";
+ message = CommonRefactoringUtil.capitalize(message);
+ conflicts.putValue(classMember, message);
+ }
+ }
+ }
+ });
+ if (abstractMethod.hasModifierProperty(PsiModifier.PACKAGE_LOCAL) && toDifferentPackage) {
+ String message = "Can't make " + RefactoringUIUtil.getDescription(abstractMethod, false) +
+ " abstract as it won't be accessible from the subclass.";
+ message = CommonRefactoringUtil.capitalize(message);
+ conflicts.putValue(abstractMethod, message);
+ }
+ }
return conflicts;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java
index 6ddce912fa95..bc6d43828c3b 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java
@@ -156,19 +156,21 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor {
protected void performRefactoring(final UsageInfo[] usages) {
try {
// correct references to moved members from the outside
- LanguageExtension extension=new LanguageExtension("com.intellij.refactoring.moveMemberHandler");
PsiClass targetClass = JavaPsiFacade.getInstance(myProject)
.findClass(myOptions.getTargetClassName(), GlobalSearchScope.projectScope(myProject));
if (targetClass == null) return;
final Map anchors = new HashMap();
for (PsiMember member : myMembersToMove) {
- anchors.put(member, extension.forLanguage(member.getLanguage()).getAnchor(member, targetClass));
+ final MoveMemberHandler handler = MoveMemberHandler.EP_NAME.forLanguage(member.getLanguage());
+ if (handler != null) {
+ anchors.put(member, handler.getAnchor(member, targetClass));
+ }
}
ArrayList otherUsages = new ArrayList();
for (UsageInfo usageInfo : usages) {
MoveMembersUsageInfo usage = (MoveMembersUsageInfo)usageInfo;
if (!usage.reference.isValid()) continue;
- final MoveMemberHandler handler = extension.forLanguage(usageInfo.getElement().getLanguage());
+ final MoveMemberHandler handler = MoveMemberHandler.EP_NAME.forLanguage(usageInfo.getElement().getLanguage());
if (handler!=null) {
if (handler.changeExternalUsage(myOptions, usage)) continue;
}
@@ -189,13 +191,15 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor {
}
}
final RefactoringElementListener elementListener = getTransaction().getElementListener(member);
- final MoveMemberHandler handler = extension.forLanguage(member.getLanguage());
- PsiMember newMember=handler.doMove(myOptions, member, anchors.get(member), targetClass);
- elementListener.elementMoved(newMember);
+ final MoveMemberHandler handler = MoveMemberHandler.EP_NAME.forLanguage(member.getLanguage());
+ if (handler != null) {
+ PsiMember newMember=handler.doMove(myOptions, member, anchors.get(member), targetClass);
+ elementListener.elementMoved(newMember);
- fixModifierList(newMember, usages);
- for (PsiReference reference : refsToBeRebind) {
- reference.bindToElement(newMember);
+ fixModifierList(newMember, usages);
+ for (PsiReference reference : refsToBeRebind) {
+ reference.bindToElement(newMember);
+ }
}
}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithSuperBounds.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithSuperBounds.java
new file mode 100644
index 000000000000..d68f90786e9b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/InferenceWithSuperBounds.java
@@ -0,0 +1,16 @@
+public class ExampleProblem {
+ void asserting(T t, Simple l){
+ }
+
+ Simple super K> comp(K k){
+ return null;
+ }
+
+ public void main(String[] args) {
+ asserting(0, comp(0));
+ }
+}
+
+class Simple{
+
+}
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/a/Test.java
new file mode 100644
index 000000000000..1de09028ad92
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/a/Test.java
@@ -0,0 +1,5 @@
+package a;
+
+public abstract class Test {
+ abstract void x();
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/E.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/E.java
new file mode 100644
index 000000000000..e6e4b670d00a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/E.java
@@ -0,0 +1,2 @@
+package b;
+class E{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/TestSubclass.java
new file mode 100644
index 000000000000..ac7700e1dfa2
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/after/b/TestSubclass.java
@@ -0,0 +1,8 @@
+package b;
+
+import a.Test;
+
+public class TestSubclass extends Test {
+ @java.lang.Override void x() {
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/a/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/a/Test.java
new file mode 100644
index 000000000000..5fe720246445
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/a/Test.java
@@ -0,0 +1,5 @@
+package a;
+public class Test {
+ void x() {
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/b/E.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/b/E.java
new file mode 100644
index 000000000000..e6e4b670d00a
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictAbstractPackageLocalMethod/before/b/E.java
@@ -0,0 +1,2 @@
+package b;
+class E{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/Test.java
new file mode 100644
index 000000000000..c19d63941b3b
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/Test.java
@@ -0,0 +1,5 @@
+public abstract class Test {
+ abstract void x();
+
+ private void xx(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/TestSubclass.java
new file mode 100644
index 000000000000..54bd69ab2a95
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/after/TestSubclass.java
@@ -0,0 +1,7 @@
+public class TestSubclass extends Test {
+ @java.lang.Override
+ void x() {
+ xx();
+ }
+
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/before/Test.java
new file mode 100644
index 000000000000..0196b2c91f82
--- /dev/null
+++ b/java/java-tests/testData/refactoring/extractSuperClass/conflictMoveAbstractWithPrivateMethod/before/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+ void x() {
+ xx();
+ }
+
+ private void xx(){}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue.java b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue.java
new file mode 100644
index 000000000000..162ec480abe0
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue.java
@@ -0,0 +1,9 @@
+class C {
+ boolean foo() {
+ return false;
+ }
+
+ void bar() {
+ foo();
+ }
+}
diff --git a/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue_after.java b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue_after.java
new file mode 100644
index 000000000000..4741aeb6c41c
--- /dev/null
+++ b/java/java-tests/testData/refactoring/invertBoolean/unusedReturnValue_after.java
@@ -0,0 +1,9 @@
+class C {
+ boolean fooInverted() {
+ return true;
+ }
+
+ void bar() {
+ fooInverted();
+ }
+}
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 d6b425be2701..a68ee6bf6d3f 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
@@ -49,6 +49,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testExplicitMethodParameters() throws Exception { doTest(false); }
public void testExplicitMethodParameters1() throws Exception { doTest(false); }
public void testInferenceWithBounds() throws Exception {doTest(false);}
+ public void testInferenceWithSuperBounds() throws Exception {doTest(false);}
public void testVariance() throws Exception {doTest(false);}
public void testForeachTypes() throws Exception {doTest(false);}
public void testRawOverridingMethods() throws Exception {doTest(false);}
diff --git a/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java b/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java
index eb63696cd21a..9b843125a545 100644
--- a/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java
+++ b/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java
@@ -4,6 +4,7 @@ import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.facet.FacetTypeId;
import com.intellij.facet.ui.FacetBasedFrameworkSupportProvider;
+import com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksPanel;
import com.intellij.ide.util.newProjectWizard.FrameworkSupportNode;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportCommunicator;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelImpl;
@@ -31,7 +32,9 @@ public abstract class FrameworkSupportProviderTestCase extends IdeaTestCase {
super.setUp();
myFrameworkSupportModel = new FrameworkSupportModelImpl(getProject(), null);
myNodes = new HashMap();
- for (FrameworkSupportProvider provider : FrameworkSupportProvider.EXTENSION_POINT.getExtensions()) {
+ final FrameworkSupportProvider[] providers = FrameworkSupportProvider.EXTENSION_POINT.getExtensions().clone();
+ Arrays.sort(providers, AddSupportForFrameworksPanel.getFrameworkSupportProvidersComparator(new ArrayList(Arrays.asList(providers))));
+ for (FrameworkSupportProvider provider : providers) {
final FrameworkSupportNode node = new FrameworkSupportNode(provider, null, myFrameworkSupportModel, null, getTestRootDisposable());
myNodes.put(provider, node);
myFrameworkSupportModel.registerComponent(provider, node);
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java
index b49809edf0af..e55123aa576a 100644
--- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java
+++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java
@@ -47,6 +47,20 @@ public class ExtractSuperClassTest extends CodeInsightTestCase {
new RefactoringTestUtil.MemberDescriptor("x", PsiMethod.class));
}
+ public void testConflictMoveAbstractWithPrivateMethod() throws Exception {
+ doTest("Test", "TestSubclass",
+ new String[] {"Method x() uses method Test.xx() which won't be accessible from the subclass."},
+ new RefactoringTestUtil.MemberDescriptor("x", PsiMethod.class, true),
+ new RefactoringTestUtil.MemberDescriptor("xx", PsiMethod.class));
+ }
+
+ public void testConflictAbstractPackageLocalMethod() throws Exception {
+ doTest("a.Test", "TestSubclass",
+ new String[] {"Can't make method x() abstract as it won't be accessible from the subclass."},
+ "b",
+ new RefactoringTestUtil.MemberDescriptor("x", PsiMethod.class, true));
+ }
+
public void testConflictUsingPackageLocalMethod() throws Exception {
doTest("a.Test", "TestSubclass",
new String[] {"method Sup.foo() won't be accessible"},
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java
index 8a35526861a7..90591310658e 100644
--- a/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java
+++ b/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java
@@ -25,6 +25,7 @@ public class InvertBooleanTest extends LightCodeInsightTestCase {
public void testParameter() throws Exception { doTest(); } //inverting boolean parameter
public void testParameter1() throws Exception { doTest(); } //inverting boolean parameter more advanced stuff
+ public void testUnusedReturnValue() throws Exception { doTest(); }
private void doTest() throws Exception {
configureByFile(TEST_ROOT + getTestName(true) + ".java");
diff --git a/java/java-tests/testSrc/com/intellij/roots/ModuleRootsExternalizationTest.java b/java/java-tests/testSrc/com/intellij/roots/ModuleRootsExternalizationTest.java
index b52b91b3b495..a8b32cbc3614 100644
--- a/java/java-tests/testSrc/com/intellij/roots/ModuleRootsExternalizationTest.java
+++ b/java/java-tests/testSrc/com/intellij/roots/ModuleRootsExternalizationTest.java
@@ -159,13 +159,11 @@ public class ModuleRootsExternalizationTest extends ModuleTestCase {
"" +
"" +
"" +
- "" +
"" +
"" +
"" +
"" +
"" +
- "" +
"" +
"" +
"", module);
diff --git a/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java b/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java
index a9578c24654e..b1bbd7a29e74 100644
--- a/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java
+++ b/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java
@@ -47,7 +47,7 @@ public class LibraryTest extends IdeaTestCase {
final Element element = new Element("root");
library.writeExternal(element);
- assertEquals("",
+ assertEquals("",
new XMLOutputter().outputString(element));
ApplicationManager.getApplication().runWriteAction(new Runnable() {
diff --git a/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java b/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java
index 537d367c7bdb..9a6a53966be9 100644
--- a/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java
+++ b/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java
@@ -19,6 +19,7 @@ package com.intellij.psi.jsp;
* @author ven
*/
public enum JspDirectiveKind {
+ /** Mapped to both page and tag directives */
PAGE,
INCLUDE,
TAGLIB,
diff --git a/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java b/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java
index d2ebffc8bfbd..b475e65c66c4 100644
--- a/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java
+++ b/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java
@@ -29,9 +29,9 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.TableUtil;
import com.intellij.ui.UIBundle;
+import com.intellij.ui.table.JBTable;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.ItemRemovable;
-import com.intellij.util.ui.Table;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -66,7 +66,7 @@ public class ClassFilterEditor extends JPanel {
myAddClassButton = new JButton(getAddButtonText());
myAddPatternButton = new JButton(getAddPatternButtonText());
myRemoveButton = new JButton(UIBundle.message("button.remove"));
- myTable = new Table();
+ myTable = new JBTable();
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTable);
add(scrollPane, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 3, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(4, 4, 4, 6), 0, 0));
@@ -347,4 +347,8 @@ public class ClassFilterEditor extends JPanel {
TableUtil.removeSelectedItems(myTable);
}
}
+
+ public void setAddPatternButtonVisible(boolean visible) {
+ myAddPatternButton.setVisible(visible);
+ }
}
diff --git a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
index 428ee23b2e46..1ace770954c4 100644
--- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
+++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java
@@ -28,6 +28,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.openapi.wm.ToolWindowManager;
+import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.event.HyperlinkEvent;
@@ -47,16 +48,16 @@ public class ExecutionUtil {
}
public static void handleExecutionError(@NotNull final Project project,
- @NotNull String toolWindowId,
+ @NotNull final String toolWindowId,
@NotNull String taskName,
@NotNull ExecutionException e) {
if (e instanceof RunCanceledByUserException) return;
+ LOG.debug(e);
+
String error = e.getMessage();
HyperlinkListener listener = null;
- LOG.debug(error);
-
if (error.contains("87") && e instanceof ProcessNotCreatedException) {
final String commandLineString = ((ProcessNotCreatedException)e).getCommandLine().getCommandLineString();
if (commandLineString.length() > 1024 * 32) {
@@ -72,12 +73,18 @@ public class ExecutionUtil {
};
}
}
- String message = ExecutionBundle.message("error.running.configuration.with.error.error.message", taskName, error);
+ final String message = ExecutionBundle.message("error.running.configuration.with.error.error.message", taskName, error);
if (ApplicationManager.getApplication().isUnitTestMode()) {
LOG.error(message);
}
- ToolWindowManager.getInstance(project).notifyByBalloon(toolWindowId, MessageType.ERROR, message, null, listener);
+ final HyperlinkListener finalListener = listener;
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
+ @Override
+ public void run() {
+ ToolWindowManager.getInstance(project).notifyByBalloon(toolWindowId, MessageType.ERROR, message, null, finalListener);
+ }
+ });
}
}
diff --git a/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java b/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java
index 6b3c81872974..443078992067 100644
--- a/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java
+++ b/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java
@@ -22,8 +22,6 @@ package com.intellij.lang;
import com.intellij.lang.documentation.CompositeDocumentationProvider;
import com.intellij.lang.documentation.DocumentationProvider;
-import java.util.List;
-
public class LanguageDocumentation extends LanguageExtension {
public static final LanguageDocumentation INSTANCE = new LanguageDocumentation();
@@ -32,11 +30,6 @@ public class LanguageDocumentation extends LanguageExtension providers = allForLanguage(l);
- if (providers.size() < 2) {
- return super.forLanguage(l);
- }
-
- return new CompositeDocumentationProvider(providers);
+ return CompositeDocumentationProvider.wrapProviders(allForLanguage(l));
}
}
\ No newline at end of file
diff --git a/platform/lang-api/src/com/intellij/lang/PsiBuilder.java b/platform/lang-api/src/com/intellij/lang/PsiBuilder.java
index e730513dad5d..c9c10570ad5d 100644
--- a/platform/lang-api/src/com/intellij/lang/PsiBuilder.java
+++ b/platform/lang-api/src/com/intellij/lang/PsiBuilder.java
@@ -111,21 +111,27 @@ public interface PsiBuilder extends UserDataHolder {
void done(IElementType type);
/**
- * Like done(), but collapses all tokens between start and end markers into single leaf node of given type.
+ * Like {@linkplain #done(IElementType)}, but collapses all tokens between start and end markers
+ * into single leaf node of given type.
*
* @param type the type of the node in the AST tree.
*/
void collapse(IElementType type);
/**
- * TODO doc
+ * Like {@linkplain #done(IElementType)}, but the marker is completed (end marker inserted)
+ * before specified one. All markers added between start of this marker and the marker specified as end one
+ * must be either dropped or completed.
+ *
* @param type the type of the node in the AST tree.
* @param before marker to complete this one before.
*/
void doneBefore(IElementType type, Marker before);
/**
- * TODO doc
+ * Like {@linkplain #doneBefore(IElementType, Marker)}, but in addition an error element with given text
+ * is inserted right before this marker's end.
+ *
* @param type the type of the node in the AST tree.
* @param before marker to complete this one before.
* @param errorMessage for error element.
@@ -139,6 +145,14 @@ public interface PsiBuilder extends UserDataHolder {
* @param message for error element.
*/
void error(String message);
+
+ /**
+ * Like {@linkplain #error(String)}, but the marker is completed before specified one.
+ *
+ * @param message for error element.
+ * @param before marker to complete this one before.
+ */
+ void errorBefore(String message, Marker before);
}
/**
diff --git a/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java b/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java
index 98aa3ac92463..0cdf910f30da 100644
--- a/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java
+++ b/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java
@@ -28,24 +28,25 @@ public class CompositeDocumentationProvider implements DocumentationProvider, Ex
private final List myProviders;
- public CompositeDocumentationProvider (DocumentationProvider ... documentationProviders) {
- this(Arrays.asList(documentationProviders));
+ public static DocumentationProvider wrapProviders(Collection providers) {
+ ArrayList list = new ArrayList();
+ for (DocumentationProvider provider : providers) {
+ if (provider instanceof CompositeDocumentationProvider) {
+ list.addAll(((CompositeDocumentationProvider)provider).getProviders());
+ }
+ else if (provider != null) {
+ list.add(provider);
+ }
+ }
+ return list.size() == 1 ? list.get(0) : new CompositeDocumentationProvider(Collections.unmodifiableList(list));
}
- public CompositeDocumentationProvider(Collection providers) {
- myProviders = new ArrayList(providers);
- }
-
- public void inject (DocumentationProvider provider) {
- myProviders.add ( provider );
- }
-
- public void remove (DocumentationProvider provider) {
- myProviders.remove ( provider );
+ private CompositeDocumentationProvider(List providers) {
+ myProviders = providers;
}
public List getProviders() {
- return Collections.unmodifiableList(myProviders);
+ return myProviders;
}
public String getQuickNavigateInfo(PsiElement element) {
diff --git a/platform/lang-api/src/com/intellij/lang/refactoring/InlineActionHandler.java b/platform/lang-api/src/com/intellij/lang/refactoring/InlineActionHandler.java
index 950d9660c986..bc9ddaf7a954 100644
--- a/platform/lang-api/src/com/intellij/lang/refactoring/InlineActionHandler.java
+++ b/platform/lang-api/src/com/intellij/lang/refactoring/InlineActionHandler.java
@@ -38,6 +38,10 @@ public abstract class InlineActionHandler {
return canInlineElement(element);
}
+ public boolean isEnabledOnElement(PsiElement element, Editor editor) {
+ return isEnabledOnElement(element);
+ }
+
public abstract boolean isEnabledForLanguage(Language l);
public abstract boolean canInlineElement(PsiElement element);
diff --git a/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java b/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java
index 34509ab6cb43..02577d3b0d7b 100644
--- a/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java
+++ b/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java
@@ -431,6 +431,14 @@ public class PsiUtilBase {
return narrowLanguage(lang, file.getLanguage());
}
+ @Nullable
+ public static PsiElement getElementAtCaret(Editor editor) {
+ Project project = editor.getProject();
+ if (project == null) return null;
+ PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
+ return file == null ? null : file.findElementAt(editor.getCaretModel().getOffset());
+ }
+
public static Language getDialect(@NotNull PsiElement element) {
return narrowLanguage(element.getLanguage(), element.getContainingFile().getLanguage());
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java
index 9f1ddcece42c..0f6dcfa19449 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java
@@ -64,7 +64,6 @@ import com.intellij.ui.popup.NotLookupOrSearchCondition;
import com.intellij.ui.popup.PopupUpdateProcessor;
import com.intellij.util.Alarm;
import com.intellij.util.Processor;
-import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.update.Activatable;
import com.intellij.util.ui.update.UiNotifyConnector;
import org.jetbrains.annotations.NonNls;
@@ -777,22 +776,16 @@ public class DocumentationManager {
DocumentationProvider elementProvider =
element == null || elementLanguage.is(containingFileLanguage) ? null : LanguageDocumentation.INSTANCE.forLanguage(elementLanguage);
- addProviderToResult(result, elementProvider);
- addProviderToResult(result, originalProvider);
+ result.add(elementProvider);
+ result.add(originalProvider);
if (containingFile != null) {
final Language baseLanguage = containingFile.getViewProvider().getBaseLanguage();
if (!baseLanguage.is(containingFileLanguage)) {
- addProviderToResult(result, LanguageDocumentation.INSTANCE.forLanguage(baseLanguage));
+ result.add(LanguageDocumentation.INSTANCE.forLanguage(baseLanguage));
}
}
- // return extensible documentation provider even if the list is empty
- return new CompositeDocumentationProvider(result);
- }
-
- private static void addProviderToResult(final Set result, final DocumentationProvider t) {
- if (t instanceof CompositeDocumentationProvider) result.addAll(((CompositeDocumentationProvider)t).getProviders());
- else ContainerUtil.addIfNotNull(t, result);
+ return CompositeDocumentationProvider.wrapProviders(result);
}
@Nullable
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java
index 720fb1d6a01d..10aaab15bc90 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateState.java
@@ -70,6 +70,7 @@ public class TemplateState implements Disposable {
private Editor myEditor;
private TemplateImpl myTemplate;
+ private TemplateImpl myPrevTemplate;
private TemplateSegments mySegments = null;
private Map myPredefinedVariableValues;
@@ -219,6 +220,7 @@ public class TemplateState implements Disposable {
mySegments = null;
}
myTemplateRange = null;
+ myPrevTemplate = myTemplate;
myTemplate = null;
releaseEditor();
myTabStopHighlighters.clear();
@@ -271,6 +273,7 @@ public class TemplateState implements Disposable {
myTemplateIndented = false;
myCurrentVariableNumber = -1;
mySegments = new TemplateSegments(myEditor);
+ myPrevTemplate = myTemplate;
myTemplate = template;
//myArgument = argument;
myPredefinedVariableValues = predefinedVarValues;
@@ -378,7 +381,7 @@ public class TemplateState implements Disposable {
private void afterChangedUpdate() {
if (isFinished()) return;
- LOG.assertTrue(myTemplate != null);
+ LOG.assertTrue(myTemplate != null, myPrevTemplate != null ? myPrevTemplate.getKey() : "prev template is null");
if (myDocumentChanged) {
if (myDocumentChangesTerminateTemplate || mySegments.isInvalid()) {
final int oldIndex = myCurrentVariableNumber;
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/export/ExportToHTMLDialog.java b/platform/lang-impl/src/com/intellij/codeInspection/export/ExportToHTMLDialog.java
index 75710be70ddf..78653db5d643 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/export/ExportToHTMLDialog.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/export/ExportToHTMLDialog.java
@@ -25,12 +25,11 @@ import com.intellij.ui.OptionGroup;
import javax.swing.*;
-// TODO copy-paste result of com.intellij.codeEditor.printing.ExportToHTMLDialog
public class ExportToHTMLDialog extends DialogWrapper{
- private JCheckBox myCbOpenInBrowser;
private final Project myProject;
- private TextFieldWithBrowseButton myTargetDirectoryField;
- private final boolean myCanBeOpenInBrowser;
+ protected JCheckBox myCbOpenInBrowser;
+ protected TextFieldWithBrowseButton myTargetDirectoryField;
+ protected final boolean myCanBeOpenInBrowser;
public ExportToHTMLDialog(Project project, final boolean canBeOpenInBrowser) {
super(project, true);
@@ -54,11 +53,15 @@ public class ExportToHTMLDialog extends DialogWrapper{
if (!myCanBeOpenInBrowser) return null;
OptionGroup optionGroup = new OptionGroup(InspectionsBundle.message("inspection.export.options.panel.title"));
+ addOptions(optionGroup);
+
+ return optionGroup.createPanel();
+ }
+
+ protected void addOptions(OptionGroup optionGroup) {
myCbOpenInBrowser = new JCheckBox();
myCbOpenInBrowser.setText(InspectionsBundle.message("inspection.export.open.option"));
optionGroup.add(myCbOpenInBrowser);
-
- return optionGroup.createPanel();
}
public void reset() {
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java
index 5980a99f166a..6d80319c7077 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsView.java
@@ -572,7 +572,7 @@ public class InspectionResultsView extends JPanel implements Disposable, Occuren
if (myTree == null) return null;
TreePath[] paths = myTree.getSelectionPaths();
- if (paths == null) return null;
+ if (paths == null || paths.length == 0) return null;
if (paths.length > 1) {
if (LangDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) {
diff --git a/platform/lang-impl/src/com/intellij/execution/ExecutionMode.java b/platform/lang-impl/src/com/intellij/execution/ExecutionMode.java
index 81e8677fcac8..656101855044 100644
--- a/platform/lang-impl/src/com/intellij/execution/ExecutionMode.java
+++ b/platform/lang-impl/src/com/intellij/execution/ExecutionMode.java
@@ -15,10 +15,14 @@
*/
package com.intellij.execution;
+import com.intellij.execution.process.ProcessListener;
import com.intellij.util.Function;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import java.util.ArrayList;
+import java.util.List;
/**
* @author Roman.Chernyatchik
@@ -32,6 +36,7 @@ public abstract class ExecutionMode {
private final JComponent myProgressParentComponent;
private Function