summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-08-15 15:44:44 -0700
committerTor Norbye <tnorbye@google.com>2013-08-15 16:41:52 -0700
commit08600181b2f24618135923b6159eac5e45d963b5 (patch)
tree0702eb3cac4e88f147ed472f6039d16a0dfbac9c /java
parentd679193f6abc72710352d6f1678b572236651caf (diff)
parenta3c36999a717e0d9923378ca5e0ae1160118c1e6 (diff)
downloadidea-08600181b2f24618135923b6159eac5e45d963b5.tar.gz
Merge remote-tracking branch 'aosp/snapshot-master' into merge
Change-Id: Ida4276d7d9013fd01d1c74ae5f206d3af7e98e95
Diffstat (limited to 'java')
-rw-r--r--java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java10
-rw-r--r--java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewPanel.java6
-rw-r--r--java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java9
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/DefaultDebugEnvironment.java8
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/apiAdapters/TransportServiceWrapper.java126
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java19
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java6
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java12
-rw-r--r--java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java21
-rw-r--r--java/execution/impl/src/com/intellij/execution/applet/AppletConfigurable.java6
-rw-r--r--java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java3
-rw-r--r--java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java3
-rw-r--r--java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java11
-rw-r--r--java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java1
-rw-r--r--java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/UnusedImportLocalInspection.java (renamed from java/java-impl/src/com/intellij/codeInspection/unusedImport/UnusedImportLocalInspection.java)4
-rw-r--r--java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java5
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java12
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java11
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/LocateLibraryDialog.form4
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java17
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateFieldOrPropertyFix.java6
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/editorActions/wordSelection/AntLikePropertySelectionHandler.java7
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithIfExpressionSurrounder.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithNullCheckSurrounder.java3
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java22
-rw-r--r--java/java-impl/src/com/intellij/ide/hierarchy/call/CallHierarchyNodeDescriptor.java9
-rw-r--r--java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java6
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java3
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaConcatenationInjectorManager.java2
-rw-r--r--java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerHandler.java5
-rw-r--r--java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java3
-rw-r--r--java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java3
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java5
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java5
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java3
-rw-r--r--java/java-impl/src/com/intellij/refactoring/rename/JavaVetoRenameCondition.java5
-rw-r--r--java/java-impl/src/com/intellij/refactoring/util/ConflictsUtil.java16
-rw-r--r--java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java3
-rw-r--r--java/java-psi-api/src/com/intellij/psi/GenericsUtil.java52
-rw-r--r--java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java4
-rw-r--r--java/java-psi-api/src/com/intellij/psi/util/EnclosingLoopMatcherExpression.java (renamed from java/openapi/src/com/intellij/psi/util/EnclosingLoopMatcherExpression.java)0
-rw-r--r--java/java-psi-api/src/com/intellij/psi/util/EnclosingLoopOrSwitchMatcherExpression.java (renamed from java/openapi/src/com/intellij/psi/util/EnclosingLoopOrSwitchMatcherExpression.java)0
-rw-r--r--java/java-psi-api/src/com/intellij/psi/util/JavaMatchers.java (renamed from java/openapi/src/com/intellij/psi/util/JavaMatchers.java)0
-rw-r--r--java/java-psi-api/src/com/intellij/psi/util/MethodSignatureUtil.java2
-rw-r--r--java/java-psi-api/src/com/intellij/psi/util/PropertyMemberType.java (renamed from java/openapi/src/com/intellij/psi/util/PropertyMemberType.java)0
-rw-r--r--java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java20
-rw-r--r--java/java-psi-impl/src/com/intellij/codeInsight/JavaContainerProvider.java (renamed from java/java-impl/src/com/intellij/codeInsight/JavaContainerProvider.java)0
-rw-r--r--java/java-psi-impl/src/com/intellij/codeInsight/highlighting/JavaHighlightUsagesDescriptionProvider.java (renamed from java/java-impl/src/com/intellij/codeInsight/highlighting/JavaHighlightUsagesDescriptionProvider.java)0
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java55
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java332
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA67668.java2
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57569/pck/AmbiguousMethodCall.java11
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57633/pck/AmbiguousMethodCall.java12
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67519/pck/AmbiguousMethodCall.java18
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67576/pck/AmbiguousMethodCall.java21
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67836/pck/AmbiguousMethodCall.java19
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67864/pck/AmbiguousMethodCall.java26
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java2
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AmbiguousTypeParamVsConcrete.java22
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/BoxingSpecific.java7
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67843.java10
-rw-r--r--java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java2
-rw-r--r--java/java-tests/testData/compileServer/incremental/markDirty/recompileTwinDependencies.log6
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/empty.txt0
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/empty.txt0
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/subPack/empty.txt0
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src2/pack1/S2.java3
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/empty.txt0
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/subPack/Foo.java2
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/target/empty.txt0
-rw-r--r--java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src2/pack1/S2.java3
-rw-r--r--java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionSameSignature.java7
-rw-r--r--java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java24
-rw-r--r--java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java3
-rw-r--r--java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java38
-rw-r--r--java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java11
-rw-r--r--java/openapi/src/com/intellij/codeInsight/ContainerProvider.java31
81 files changed, 616 insertions, 544 deletions
diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java b/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java
index e625dc16e5a3..27f61c47ff24 100644
--- a/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java
+++ b/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewImpl.java
@@ -21,7 +21,6 @@ import com.intellij.ide.errorTreeView.ErrorTreeElement;
import com.intellij.ide.errorTreeView.ErrorViewStructure;
import com.intellij.ide.errorTreeView.GroupingElement;
import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.compiler.CompileScope;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
@@ -36,9 +35,9 @@ import com.intellij.util.concurrency.SequentialTaskExecutor;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.ide.PooledThreadExecutor;
import java.util.UUID;
-import java.util.concurrent.Executor;
/**
* @author Eugene Zhuravlev
@@ -48,12 +47,7 @@ public class ProblemsViewImpl extends ProblemsView{
private static final String PROBLEMS_TOOLWINDOW_ID = "Problems";
private final ProblemsViewPanel myPanel;
- private final SequentialTaskExecutor myViewUpdater = new SequentialTaskExecutor(new Executor() {
- @Override
- public void execute(Runnable command) {
- ApplicationManager.getApplication().executeOnPooledThread(command);
- }
- });
+ private final SequentialTaskExecutor myViewUpdater = new SequentialTaskExecutor(new PooledThreadExecutor());
public ProblemsViewImpl(final Project project, final ToolWindowManager wm) {
super(project);
diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewPanel.java b/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewPanel.java
index d65451eab82c..618774541686 100644
--- a/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewPanel.java
+++ b/java/compiler/impl/src/com/intellij/compiler/impl/ProblemsViewPanel.java
@@ -25,12 +25,13 @@ public class ProblemsViewPanel extends NewErrorTreeViewPanel {
myTree.getEmptyText().setText("No compilation problems found");
}
-
+ @Override
protected void fillRightToolbarGroup(DefaultActionGroup group) {
super.fillRightToolbarGroup(group);
group.add(new CompilerPropertiesAction());
}
+ @Override
protected void addExtraPopupMenuActions(DefaultActionGroup group) {
group.add(new ExcludeFromCompileAction(myProject, this));
// todo: do we need compiler's popup actions here?
@@ -51,5 +52,4 @@ public class ProblemsViewPanel extends NewErrorTreeViewPanel {
protected boolean canHideWarnings() {
return false;
}
-
-}
+} \ No newline at end of file
diff --git a/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java b/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
index add20bda9b65..35091f75238e 100644
--- a/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
+++ b/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
@@ -34,11 +34,11 @@ import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.Channels;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.ide.PooledThreadExecutor;
import org.jetbrains.jps.api.CmdlineProtoUtil;
import org.jetbrains.jps.api.CmdlineRemoteProto;
import java.util.*;
-import java.util.concurrent.Executor;
/**
* @author Eugene Zhuravlev
@@ -50,12 +50,7 @@ public abstract class DefaultMessageHandler implements BuilderMessageHandler {
private final Project myProject;
private int myConstantSearchesCount = 0;
private final CachingSearcher mySearcher;
- private final SequentialTaskExecutor myTaskExecutor = new SequentialTaskExecutor(new Executor() {
- @Override
- public void execute(Runnable command) {
- ApplicationManager.getApplication().executeOnPooledThread(command);
- }
- });
+ private final SequentialTaskExecutor myTaskExecutor = new SequentialTaskExecutor(new PooledThreadExecutor());
protected DefaultMessageHandler(Project project) {
myProject = project;
diff --git a/java/debugger/impl/src/com/intellij/debugger/DefaultDebugEnvironment.java b/java/debugger/impl/src/com/intellij/debugger/DefaultDebugEnvironment.java
index e0f463eccf90..5a842e420a0d 100644
--- a/java/debugger/impl/src/com/intellij/debugger/DefaultDebugEnvironment.java
+++ b/java/debugger/impl/src/com/intellij/debugger/DefaultDebugEnvironment.java
@@ -20,15 +20,12 @@ import com.intellij.execution.ExecutionResult;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.*;
import com.intellij.execution.filters.ExceptionFilters;
-import com.intellij.execution.filters.Filter;
import com.intellij.execution.filters.TextConsoleBuilder;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.runners.RunContentBuilder;
import com.intellij.openapi.project.Project;
import com.intellij.psi.search.GlobalSearchScope;
-import java.util.List;
-
/**
* Created by IntelliJ IDEA.
* User: michael.golubev
@@ -65,10 +62,7 @@ public class DefaultDebugEnvironment implements DebugEnvironment {
if (myState instanceof CommandLineState) {
final TextConsoleBuilder consoleBuilder = ((CommandLineState)myState).getConsoleBuilder();
if (consoleBuilder != null) {
- List<Filter> filters = ExceptionFilters.getFilters(mySearchScope);
- for (Filter filter : filters) {
- consoleBuilder.addFilter(filter);
- }
+ consoleBuilder.filters(ExceptionFilters.getFilters(mySearchScope));
}
}
return myState.execute(myExecutor, myRunner);
diff --git a/java/debugger/impl/src/com/intellij/debugger/apiAdapters/TransportServiceWrapper.java b/java/debugger/impl/src/com/intellij/debugger/apiAdapters/TransportServiceWrapper.java
index 84a4679919ba..d6670355019a 100644
--- a/java/debugger/impl/src/com/intellij/debugger/apiAdapters/TransportServiceWrapper.java
+++ b/java/debugger/impl/src/com/intellij/debugger/apiAdapters/TransportServiceWrapper.java
@@ -18,14 +18,11 @@ package com.intellij.debugger.apiAdapters;
import com.intellij.execution.ExecutionException;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.ArrayUtil;
-import com.sun.jdi.connect.Transport;
+import com.sun.jdi.connect.spi.TransportService;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
/**
* @author max
@@ -33,113 +30,28 @@ import java.util.Map;
public class TransportServiceWrapper {
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.apiAdapters.TransportService");
- private final Object myDelegateObject;
- private final Class myDelegateClass;
+ private final TransportService myTransport;
+ private final Class<? extends TransportService> myDelegateClass;
private static final String SOCKET_TRANSPORT_CLASS = "com.sun.tools.jdi.SocketTransportService";
private static final String SHMEM_TRANSPORT_CLASS = "com.sun.tools.jdi.SharedMemoryTransportService";
- private final Map<String, Object> myListenAddresses = new HashMap<String, Object>();
-
- private TransportServiceWrapper(Class delegateClass) throws NoSuchMethodException,
+ private TransportServiceWrapper(Class<? extends TransportService> delegateClass) throws NoSuchMethodException,
IllegalAccessException,
InvocationTargetException,
InstantiationException {
myDelegateClass = delegateClass;
final Constructor constructor = delegateClass.getDeclaredConstructor(ArrayUtil.EMPTY_CLASS_ARRAY);
constructor.setAccessible(true);
- myDelegateObject = constructor.newInstance(ArrayUtil.EMPTY_OBJECT_ARRAY);
- }
-
- /**
- * Applicable if IDEA is run on JDK 1.4.2.x only!
- * @param transportObj
- */
- private TransportServiceWrapper(Transport transportObj) {
- myDelegateClass = transportObj.getClass();
- myDelegateObject = transportObj;
- }
-
- public ConnectionServiceWrapper attach(final String s) throws IOException {
- try {
- // Applicable if IDEA is run on JDK 1.4.2.x only!
- // in JDK 1.5 the signature of the "attach" method has been changed to "attach(String, long, long)"
- //noinspection HardCodedStringLiteral
- final Method method = myDelegateClass.getMethod("attach", new Class[]{String.class});
- method.setAccessible(true);
- return new ConnectionServiceWrapper(method.invoke(myDelegateObject, new Object[]{s}));
- }
- catch (NoSuchMethodException e) {
- LOG.error(e);
- }
- catch (IllegalAccessException e) {
- LOG.error(e);
- }
- catch (InvocationTargetException e) {
- final Throwable cause = e.getCause();
- if (cause instanceof IOException) {
- throw (IOException)cause;
- }
- LOG.error(e);
- }
- return null;
+ myTransport = (TransportService)constructor.newInstance(ArrayUtil.EMPTY_OBJECT_ARRAY);
}
- public String startListening() throws IOException {
- try {
- //noinspection HardCodedStringLiteral
- final Method method = myDelegateClass.getMethod("startListening", ArrayUtil.EMPTY_CLASS_ARRAY);
- method.setAccessible(true);
- final Object rv = method.invoke(myDelegateObject, ArrayUtil.EMPTY_OBJECT_ARRAY);
- // important! do not cast to string cause return types differ in jdk 1.4 and jdk 1.5
- final String strValue = rv.toString();
- myListenAddresses.put(strValue, rv);
- return strValue;
- }
- catch (NoSuchMethodException e) {
- LOG.error(e);
- }
- catch (IllegalAccessException e) {
- LOG.error(e);
- }
- catch (InvocationTargetException e) {
- final Throwable cause = e.getCause();
- if (cause instanceof IOException) {
- throw (IOException)cause;
- }
- LOG.error(e);
- }
- return null;
+ public TransportService.ListenKey startListening() throws IOException {
+ return myTransport.startListening();
}
- public void stopListening(final String address) throws IOException {
- try {
- Object value = myListenAddresses.get(address);
- if (value == null) {
- value = address;
- }
- Class paramClass = value.getClass();
- for (Class superClass = paramClass.getSuperclass(); !Object.class.equals(superClass); superClass = superClass.getSuperclass()) {
- paramClass = superClass;
- }
- //noinspection HardCodedStringLiteral
- final Method method = myDelegateClass.getMethod("stopListening", new Class[] {paramClass});
- method.setAccessible(true);
- method.invoke(myDelegateObject, new Object[]{value});
- }
- catch (NoSuchMethodException e) {
- LOG.error(e);
- }
- catch (IllegalAccessException e) {
- LOG.error(e);
- }
- catch (InvocationTargetException e) {
- final Throwable cause = e.getCause();
- if (cause instanceof IOException) {
- throw (IOException)cause;
- }
- LOG.error(e);
- }
+ public void stopListening(final TransportService.ListenKey address) throws IOException {
+ myTransport.stopListening(address);
}
@SuppressWarnings({"HardCodedStringLiteral"})
@@ -147,11 +59,10 @@ public class TransportServiceWrapper {
if (SOCKET_TRANSPORT_CLASS.equals(myDelegateClass.getName())) {
return "dt_socket";
}
- else if (SHMEM_TRANSPORT_CLASS.equals(myDelegateClass.getName())) {
+ if (SHMEM_TRANSPORT_CLASS.equals(myDelegateClass.getName())) {
return "dt_shmem";
}
-
- LOG.error("Unknown serivce");
+ LOG.error("Unknown service");
return "<unknown>";
}
@@ -160,14 +71,14 @@ public class TransportServiceWrapper {
try {
try {
if (forceSocketTransport) {
- transport = new TransportServiceWrapper(Class.forName(SOCKET_TRANSPORT_CLASS));
+ transport = new TransportServiceWrapper((Class<? extends TransportService>)Class.forName(SOCKET_TRANSPORT_CLASS));
}
else {
- transport = new TransportServiceWrapper(Class.forName(SHMEM_TRANSPORT_CLASS));
+ transport = new TransportServiceWrapper((Class<? extends TransportService>)Class.forName(SHMEM_TRANSPORT_CLASS));
}
}
catch (UnsatisfiedLinkError ignored) {
- transport = new TransportServiceWrapper(Class.forName(SOCKET_TRANSPORT_CLASS));
+ transport = new TransportServiceWrapper((Class<? extends TransportService>)Class.forName(SOCKET_TRANSPORT_CLASS));
}
}
catch (Exception e) {
@@ -176,13 +87,4 @@ public class TransportServiceWrapper {
return transport;
}
- /**
- * Applicable if IDEA is run on JDK 1.4.2.x only!
- * @param transportObject
- * @return transport service wrapper
- */
- public static TransportServiceWrapper getTransportService(Transport transportObject){
- return new TransportServiceWrapper(transportObject);
- }
-
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java
index 4a05b02dd898..d8c754476ad4 100644
--- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java
@@ -19,7 +19,6 @@ import com.intellij.Patches;
import com.intellij.debugger.*;
import com.intellij.debugger.actions.DebuggerActions;
import com.intellij.debugger.apiAdapters.ConnectionServiceWrapper;
-import com.intellij.debugger.apiAdapters.TransportServiceWrapper;
import com.intellij.debugger.engine.evaluation.*;
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
@@ -544,23 +543,7 @@ public abstract class DebugProcessImpl implements DebugProcess {
myDebugProcessDispatcher.getMulticaster().connectorIsReady();
try {
- if (SOCKET_ATTACHING_CONNECTOR_NAME.equals(connector.name()) && Patches.SUN_JDI_CONNECTOR_HANGUP_BUG) {
- String portString = myConnection.getAddress();
- String hostString = myConnection.getHostName();
-
- if (hostString == null || hostString.isEmpty()) {
- //noinspection HardCodedStringLiteral
- hostString = "localhost";
- }
- hostString += ":";
-
- final TransportServiceWrapper transportServiceWrapper = TransportServiceWrapper.getTransportService(connector.transport());
- myConnectionService = transportServiceWrapper.attach(hostString + portString);
- return myConnectionService.createVirtualMachine();
- }
- else {
- return connector.attach(myArguments);
- }
+ return connector.attach(myArguments);
}
catch (IllegalArgumentException e) {
throw new CantRunException(e.getLocalizedMessage());
diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java
index 6be6899d6bb0..0f368bfb031f 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsImpl.java
@@ -38,6 +38,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiExpression;
import com.intellij.util.net.NetUtils;
import com.sun.jdi.Value;
+import com.sun.jdi.connect.spi.TransportService;
import org.jdom.Element;
import java.io.IOException;
@@ -139,8 +140,9 @@ public class DebuggerUtilsImpl extends DebuggerUtilsEx{
}
try {
- String address = transportService.startListening();
- transportService.stopListening(address);
+ TransportService.ListenKey listenKey = transportService.startListening();
+ final String address = listenKey.address();
+ transportService.stopListening(listenKey);
return address;
}
catch (IOException e) {
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 b36d0a4303fe..9d5d48146b62 100644
--- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java
+++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerParametersRunnerConfigurable.java
@@ -25,6 +25,7 @@ import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.util.text.StringUtilRt;
import com.intellij.ui.PortField;
import com.intellij.xdebugger.impl.settings.DebuggerConfigurable;
import org.jetbrains.annotations.NotNull;
@@ -99,10 +100,6 @@ public class GenericDebuggerParametersRunnerConfigurable extends SettingsEditor<
}
@Override
- public void disposeEditor() {
- }
-
- @Override
public void resetEditorFrom(GenericDebuggerRunnerSettings runnerSettings) {
setIsLocal(runnerSettings.LOCAL);
setTransport(runnerSettings.getTransport());
@@ -153,9 +150,8 @@ public class GenericDebuggerParametersRunnerConfigurable extends SettingsEditor<
}
private void checkPort() throws ConfigurationException {
- final int port = myPortField.getNumber();
- if (isSocket() && port > 0 && (port < 0 || port > 0xffff)) {
- throw new ConfigurationException(DebuggerBundle.message("error.text.invalid.port.0", port));
+ if (isSocket() && !myPortField.isSpecified()) {
+ throw new ConfigurationException(DebuggerBundle.message("error.text.invalid.port"));
}
}
@@ -172,7 +168,7 @@ public class GenericDebuggerParametersRunnerConfigurable extends SettingsEditor<
private void setPort(String port) {
if (isSocket()) {
- myPortField.setNumber(StringUtil.parseInt(port, 0));
+ myPortField.setNumber(StringUtilRt.parseInt(port, 0));
}
else {
myAddressField.setText(port);
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java
index c189e4b64dab..9ba63656d1f1 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java
@@ -38,7 +38,6 @@ import com.intellij.execution.ExecutionResult;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.execution.filters.ExceptionFilters;
-import com.intellij.execution.filters.Filter;
import com.intellij.execution.filters.TextConsoleBuilder;
import com.intellij.execution.filters.TextConsoleBuilderFactory;
import com.intellij.execution.ui.ConsoleView;
@@ -100,6 +99,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
final DebuggerSettings debuggerSettings = DebuggerSettings.getInstance();
if (!ApplicationManager.getApplication().isUnitTestMode()) {
getContextManager().addListener(new DebuggerContextListener() {
+ @Override
public void changeEvent(DebuggerContextImpl newContext, int event) {
switch (event) {
case DebuggerSession.EVENT_DETACHED:
@@ -176,12 +176,14 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
}
myUi.addListener(new ContentManagerAdapter() {
+ @Override
public void selectionChanged(ContentManagerEvent event) {
updateStatus(event.getContent());
}
}, this);
debuggerSession.getContextManager().addListener(new DebuggerContextListener() {
+ @Override
public void changeEvent(DebuggerContextImpl newContext, int event) {
if (!myUi.isDisposed()) {
attractFramesOnPause(event);
@@ -346,6 +348,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
}
+ @Override
public void dispose() {
disposeSession();
myFramesPanel.dispose();
@@ -452,10 +455,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
public void addThreadDump(List<ThreadState> threads) {
final Project project = getProject();
final TextConsoleBuilder consoleBuilder = TextConsoleBuilderFactory.getInstance().createBuilder(project);
- List<Filter> filters = ExceptionFilters.getFilters(myDebuggerSession.getSearchScope());
- for (Filter filter : filters) {
- consoleBuilder.addFilter(filter);
- }
+ consoleBuilder.filters(ExceptionFilters.getFilters(myDebuggerSession.getSearchScope()));
final ConsoleView consoleView = consoleBuilder.getConsole();
final DefaultActionGroup toolbarActions = new DefaultActionGroup();
consoleView.allowHeavyFilters();
@@ -471,11 +471,13 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
myThreadDumpsCount += 1;
myCurrentThreadDumpId += 1;
Disposer.register(this, new Disposable() {
+ @Override
public void dispose() {
myUi.removeContent(content, true);
}
});
Disposer.register(content, new Disposable() {
+ @Override
public void dispose() {
myThreadDumpsCount -= 1;
if (myThreadDumpsCount == 0) {
@@ -494,15 +496,18 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
}
private class MyDebuggerStateManager extends DebuggerStateManager {
+ @Override
public void fireStateChanged(DebuggerContextImpl newContext, int event) {
super.fireStateChanged(newContext, event);
}
+ @Override
public DebuggerContextImpl getContext() {
final DebuggerSession session = myDebuggerSession;
return session != null ? session.getContextManager().getContext() : DebuggerContextImpl.EMPTY_CONTEXT;
}
+ @Override
public void setState(DebuggerContextImpl context, int state, int event, String description) {
final DebuggerSession session = myDebuggerSession;
if (session != null) {
@@ -519,6 +524,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
myAutoModeEnabled = DebuggerSettings.getInstance().AUTO_VARIABLES_MODE;
}
+ @Override
public void update(final AnActionEvent e) {
super.update(e);
final Presentation presentation = e.getPresentation();
@@ -526,10 +532,12 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
presentation.setText(autoModeEnabled ? "All-Variables Mode" : "Auto-Variables Mode");
}
+ @Override
public boolean isSelected(AnActionEvent e) {
return myAutoModeEnabled;
}
+ @Override
public void setSelected(AnActionEvent e, boolean enabled) {
myAutoModeEnabled = enabled;
DebuggerSettings.getInstance().AUTO_VARIABLES_MODE = enabled;
@@ -551,6 +559,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
myTextUnavailable = DebuggerBundle.message("action.watches.method.return.value.unavailable.reason");
}
+ @Override
public void update(final AnActionEvent e) {
super.update(e);
final Presentation presentation = e.getPresentation();
@@ -567,10 +576,12 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos
}
}
+ @Override
public boolean isSelected(AnActionEvent e) {
return myWatchesReturnValues;
}
+ @Override
public void setSelected(AnActionEvent e, boolean watch) {
myWatchesReturnValues = watch;
DebuggerSettings.getInstance().WATCH_RETURN_VALUES = watch;
diff --git a/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurable.java b/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurable.java
index c781a7f2304a..d7027dd5a517 100644
--- a/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurable.java
+++ b/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurable.java
@@ -40,7 +40,8 @@ import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class AppletConfigurable extends SettingsEditor<AppletConfiguration> implements CheckableRunConfigurationEditor<AppletConfiguration>,
@@ -256,9 +257,6 @@ public class AppletConfigurable extends SettingsEditor<AppletConfiguration> impl
return myWholePanel;
}
- public void disposeEditor() {
- }
-
public void checkEditorData(final AppletConfiguration configuration) {
configuration.MAIN_CLASS_NAME = toNull(getClassNameComponent().getText());
configuration.HTML_FILE_NAME = toSystemFormat(getHtmlPathComponent().getText());
diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java
index 4fb04e2fd577..b72a8883636f 100644
--- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java
+++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurable.java
@@ -114,9 +114,6 @@ public class ApplicationConfigurable extends SettingsEditor<ApplicationConfigura
return myWholePanel;
}
- public void disposeEditor() {
- }
-
private void createUIComponents() {
myMainClass = new LabeledComponent<EditorTextFieldWithBrowseButton>();
myMainClass.setComponent(new EditorTextFieldWithBrowseButton(myProject, true, new JavaCodeFragment.VisibilityChecker() {
diff --git a/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java b/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java
index cfcf4e1d29a9..5cfd535d081b 100644
--- a/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java
+++ b/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java
@@ -180,9 +180,6 @@ public class RemoteConfigurable extends SettingsEditor<RemoteConfiguration> {
return myPanel;
}
- public void disposeEditor() {
- }
-
private void updateHelpText() {
boolean useSockets = !myRbShmem.isSelected();
diff --git a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java
index 2ac23b7e5be1..95a2c2d46e8b 100644
--- a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java
+++ b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java
@@ -25,7 +25,6 @@ import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.util.ExecutionErrorDialog;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
@@ -109,26 +108,28 @@ public class JavaExecutionUtil {
myIcon = icon;
}
+ @Override
public Icon getIcon() {
return myIcon;
}
+ @Override
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
final JavaCommandLineState state = new JavaCommandLineState(env) {
+ @Override
protected JavaParameters createJavaParameters() {
return myParameters;
}
};
final TextConsoleBuilder builder = TextConsoleBuilderFactory.getInstance().createBuilder(myProject);
if (myFilters != null) {
- for (final Filter myFilter : myFilters) {
- builder.addFilter(myFilter);
- }
+ builder.filters(myFilters);
}
state.setConsoleBuilder(builder);
return state;
}
+ @Override
public String getName() {
return myContentName;
}
@@ -154,7 +155,7 @@ public class JavaExecutionUtil {
}
public static Module findModule(@NotNull final PsiClass psiClass) {
- return ModuleUtil.findModuleForPsiElement(psiClass);
+ return ModuleUtilCore.findModuleForPsiElement(psiClass);
}
@Nullable
diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java
index 1f8ebc6fcd23..4465367d3c99 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/nullable/NullableStuffInspectionBase.java
@@ -417,6 +417,7 @@ public class NullableStuffInspectionBase extends BaseJavaBatchLocalInspectionToo
}
}
+ @NotNull
private static LocalQuickFix[] wrapFix(LocalQuickFix fix) {
if (fix == null) return LocalQuickFix.EMPTY_ARRAY;
return new LocalQuickFix[]{fix};
diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedImport/UnusedImportLocalInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/UnusedImportLocalInspection.java
index a8feaf9c148e..362eb75c0160 100644
--- a/java/java-impl/src/com/intellij/codeInspection/unusedImport/UnusedImportLocalInspection.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/UnusedImportLocalInspection.java
@@ -17,7 +17,7 @@
package com.intellij.codeInspection.unusedImport;
import com.intellij.codeInsight.daemon.GroupNames;
-import com.intellij.codeInspection.BaseJavaLocalInspectionTool;
+import com.intellij.codeInspection.BaseJavaBatchLocalInspectionTool;
import com.intellij.codeInspection.InspectionsBundle;
import com.intellij.codeInspection.ex.PairedUnfairLocalInspectionTool;
import com.siyeh.ig.imports.UnusedImportInspection;
@@ -28,7 +28,7 @@ import org.jetbrains.annotations.NotNull;
* User: anna
* Date: 17-Feb-2006
*/
-public class UnusedImportLocalInspection extends BaseJavaLocalInspectionTool implements PairedUnfairLocalInspectionTool {
+public class UnusedImportLocalInspection extends BaseJavaBatchLocalInspectionTool implements PairedUnfairLocalInspectionTool {
@NonNls public static final String SHORT_NAME = "UNUSED_IMPORT";
public static final String DISPLAY_NAME = InspectionsBundle.message("unused.import");
diff --git a/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java b/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java
index 7f645a5d4770..6899c7a1cf3d 100644
--- a/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java
+++ b/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java
@@ -31,6 +31,7 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PackageScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.util.containers.ContainerUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
@@ -56,7 +57,7 @@ public class JavaAnalysisScope extends AnalysisScope {
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(defaultProject).getFileIndex();
final HashSet<Module> modules = new HashSet<Module>();
if (myType == FILE) {
- if (myElement instanceof PsiJavaFile && !JspPsiUtil.isInJspFile(myElement)) {
+ if (myElement instanceof PsiJavaFile && !FileTypeUtils.isInServerPageFile(myElement)) {
PsiJavaFile psiJavaFile = (PsiJavaFile)myElement;
final PsiClass[] classes = psiJavaFile.getClasses();
boolean onlyPackLocalClasses = true;
@@ -83,7 +84,7 @@ public class JavaAnalysisScope extends AnalysisScope {
return super.getNarrowedComplementaryScope(defaultProject);
}
-
+
@Override
public String getShortenName() {
diff --git a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java
index 0cb53dd805af..fe002f62dbc4 100644
--- a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java
@@ -43,6 +43,7 @@ import com.intellij.util.Consumer;
import com.intellij.util.FilteredQuery;
import com.intellij.util.Processor;
import com.intellij.util.Query;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -108,7 +109,7 @@ public class CodeInsightUtil {
break;
}
if (parent instanceof PsiCodeBlock) break;
- if (JspPsiUtil.isInJspFile(parent) && parent instanceof PsiFile) break;
+ if (FileTypeUtils.isInServerPageFile(parent) && parent instanceof PsiFile) break;
if (parent instanceof PsiCodeFragment) break;
if (parent == null || parent instanceof PsiFile) return PsiElement.EMPTY_ARRAY;
parent = parent.getParent();
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
index f74f6f9d6214..c32a30c0d985 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightControlFlowUtil.java
@@ -32,6 +32,7 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Processor;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -265,7 +266,7 @@ public class HighlightControlFlowUtil {
scope = PsiTreeUtil.getParentOfType(scope, PsiCodeBlock.class);
}
- topBlock = JspPsiUtil.isInJspFile(scope) && scope instanceof PsiFile ? scope : PsiUtil.getTopLevelEnclosingCodeBlock(expression, scope);
+ topBlock = FileTypeUtils.isInServerPageFile(scope) && scope instanceof PsiFile ? scope : PsiUtil.getTopLevelEnclosingCodeBlock(expression, scope);
if (variable instanceof PsiField) {
// non final field already initialized with default value
if (!variable.hasModifierProperty(PsiModifier.FINAL)) return null;
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
index 7916c58e103b..5c59702b688f 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
@@ -43,13 +43,10 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
-import com.intellij.psi.impl.source.jsp.jspJava.JspHolderMethod;
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl;
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl;
import com.intellij.psi.javadoc.PsiDocComment;
-import com.intellij.psi.jsp.JspFile;
import com.intellij.psi.scope.processor.VariablesNotProcessor;
import com.intellij.psi.scope.util.PsiScopesUtil;
import com.intellij.psi.search.GlobalSearchScope;
@@ -64,6 +61,7 @@ import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import com.intellij.xml.util.XmlStringUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import gnu.trove.THashMap;
import org.intellij.lang.annotations.Language;
import org.jetbrains.annotations.NonNls;
@@ -484,7 +482,7 @@ public class HighlightUtil extends HighlightUtilBase {
if (method == null && lambda != null) {
//todo check return statements type inside lambda
}
- else if (method == null && !(parent instanceof JspFile)) {
+ else if (method == null && !(parent instanceof ServerPageFile)) {
description = JavaErrorMessages.message("return.outside.method");
errorResult = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(statement).descriptionAndTooltip(description).create();
}
@@ -697,11 +695,11 @@ public class HighlightUtil extends HighlightUtilBase {
@Nullable
private static HighlightInfoType getUnhandledExceptionHighlightType(final PsiElement element) {
- if (!JspPsiUtil.isInJspFile(element)) {
+ if (!FileTypeUtils.isInServerPageFile(element)) {
return HighlightInfoType.UNHANDLED_EXCEPTION;
}
PsiMethod targetMethod = PsiTreeUtil.getParentOfType(element, PsiMethod.class);
- if (!(targetMethod instanceof JspHolderMethod)) return HighlightInfoType.UNHANDLED_EXCEPTION;
+ if (!(targetMethod instanceof SyntheticElement)) return HighlightInfoType.UNHANDLED_EXCEPTION;
// ignore JSP top level errors - it handled by UnhandledExceptionInJSP inspection
return null;
}
@@ -806,7 +804,7 @@ public class HighlightUtil extends HighlightUtilBase {
if (PsiModifier.PUBLIC.equals(modifier)) {
isAllowed = modifierOwnerParent instanceof PsiJavaFile ||
modifierOwnerParent instanceof PsiClass &&
- (modifierOwnerParent instanceof JspClass || ((PsiClass)modifierOwnerParent).getQualifiedName() != null);
+ (modifierOwnerParent instanceof PsiSyntheticClass || ((PsiClass)modifierOwnerParent).getQualifiedName() != null);
}
else if (PsiModifier.STATIC.equals(modifier) || PsiModifier.PRIVATE.equals(modifier) || PsiModifier.PROTECTED.equals(modifier) ||
PsiModifier.PACKAGE_LOCAL.equals(modifier)) {
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
index 290633fc853a..5c9e198b578b 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
@@ -36,7 +36,6 @@ import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.controlFlow.ControlFlowUtil;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
-import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl;
@@ -362,7 +361,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
@Override
public void visitClass(PsiClass aClass) {
super.visitClass(aClass);
- if (aClass instanceof JspClass) return;
+ if (aClass instanceof PsiSyntheticClass) return;
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkInterfaceMultipleInheritance(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkDuplicateTopLevelClass(aClass));
if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkEnumMustNotBeLocal(aClass));
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java
index 2021b1b646e8..aa7cdee64041 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java
@@ -96,12 +96,11 @@ public class AddMethodFix extends LocalQuickFixAndIntentionActionOnPsiElement {
@NotNull PsiElement endElement) {
final PsiClass myClass = (PsiClass)startElement;
- return myMethodPrototype != null
- && myMethodPrototype.isValid()
- && myClass.isValid()
- && myClass.getManager().isInProject(myClass)
- && myText != null
- && MethodSignatureUtil.findMethodBySignature(myClass, myMethodPrototype, false) == null
+ return myMethodPrototype.isValid() &&
+ myClass.isValid() &&
+ myClass.getManager().isInProject(myClass) &&
+ myText != null &&
+ MethodSignatureUtil.findMethodBySignature(myClass, myMethodPrototype, false) == null
;
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java
index 5de72527f379..1a2683e39b31 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java
@@ -46,6 +46,7 @@ import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashSet;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -287,7 +288,7 @@ public abstract class ImportClassFixBase<T extends PsiElement, R extends PsiRefe
if (classes.length == 1
&& (canImportHere = canImportHere(allowCaretNearRef, editor, psiFile, classes[0].getName()))
- && (JspPsiUtil.isInJspFile(psiFile) ?
+ && (FileTypeUtils.isInServerPageFile(psiFile) ?
CodeInsightSettings.getInstance().JSP_ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY :
CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY)
&& (ApplicationManager.getApplication().isUnitTestMode() || codeAnalyzer.canChangeFileSilently(psiFile))
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/LocateLibraryDialog.form b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/LocateLibraryDialog.form
index ce18bcc96501..51a40ab236b6 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/LocateLibraryDialog.form
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/LocateLibraryDialog.form
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.codeInsight.daemon.impl.quickfix.LocateLibraryDialog">
<grid id="cbd77" binding="contentPane" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
- <margin top="0" left="10" bottom="10" right="10"/>
+ <margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="48" y="54" width="623" height="297"/>
</constraints>
@@ -14,7 +14,7 @@
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="4" hsize-policy="7" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
- <border type="etched"/>
+ <border type="none"/>
<children>
<component id="feb4c" class="com.intellij.openapi.ui.TextFieldWithBrowseButton" binding="myLibraryFile">
<constraints>
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java
index 735520aa44ce..5534f5fd6cc2 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java
@@ -74,19 +74,20 @@ public class CreateClassOrPackageFix extends LocalQuickFixAndIntentionActionOnPs
i.remove();
}
}
- return directories.isEmpty() ? null : new CreateClassOrPackageFix(directories,
- context,
- fixPath ? qualifiedName : redPart,
- redPart,
- kind,
- superClass,
- templateName);
+ return new CreateClassOrPackageFix(directories,
+ context,
+ fixPath ? qualifiedName : redPart,
+ redPart,
+ kind,
+ superClass,
+ templateName);
}
@Nullable
public static CreateClassOrPackageFix createFix(@NotNull final String qualifiedName,
@NotNull final PsiElement context,
- @Nullable ClassKind kind, final String superClass) {
+ @Nullable ClassKind kind,
+ String superClass) {
return createFix(qualifiedName, context.getResolveScope(), context, null, kind, superClass, null);
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateFieldOrPropertyFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateFieldOrPropertyFix.java
index b63d8910a14b..956e57c0904f 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateFieldOrPropertyFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateFieldOrPropertyFix.java
@@ -52,7 +52,11 @@ public class CreateFieldOrPropertyFix implements IntentionAction, LocalQuickFix
private final PropertyMemberType myMemberType;
private final PsiAnnotation[] myAnnotations;
- public CreateFieldOrPropertyFix(final PsiClass aClass, final String name, final PsiType type, final PropertyMemberType memberType, final PsiAnnotation[] annotations) {
+ public CreateFieldOrPropertyFix(final PsiClass aClass,
+ final String name,
+ final PsiType type,
+ @NotNull PropertyMemberType memberType,
+ final PsiAnnotation[] annotations) {
myClass = aClass;
myName = name;
myType = type;
diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/wordSelection/AntLikePropertySelectionHandler.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/wordSelection/AntLikePropertySelectionHandler.java
index ffd75c7747c0..7b87a8cbcef6 100644
--- a/java/java-impl/src/com/intellij/codeInsight/editorActions/wordSelection/AntLikePropertySelectionHandler.java
+++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/wordSelection/AntLikePropertySelectionHandler.java
@@ -15,9 +15,10 @@
*/
package com.intellij.codeInsight.editorActions.wordSelection;
-import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandler;
+import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase;
import com.intellij.lang.Language;
import com.intellij.lang.StdLanguages;
+import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiComment;
@@ -28,11 +29,11 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-public class AntLikePropertySelectionHandler implements ExtendWordSelectionHandler {
+public class AntLikePropertySelectionHandler extends ExtendWordSelectionHandlerBase {
@Override
public boolean canSelect(PsiElement e) {
Language l = e.getLanguage();
- if (!(l.equals(StdLanguages.JAVA)
+ if (!(l.equals(JavaLanguage.INSTANCE)
|| l.equals(StdLanguages.XML)
|| l.equals(StdLanguages.ANT))) {
return false;
diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithIfExpressionSurrounder.java b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithIfExpressionSurrounder.java
index 0c492c9e6acb..38fd5a9b62f6 100644
--- a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithIfExpressionSurrounder.java
+++ b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithIfExpressionSurrounder.java
@@ -24,6 +24,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.util.IncorrectOperationException;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NonNls;
class JavaWithIfExpressionSurrounder extends JavaExpressionSurrounder{
@@ -35,7 +36,7 @@ class JavaWithIfExpressionSurrounder extends JavaExpressionSurrounder{
PsiElement parent = expr.getParent();
if (!(parent instanceof PsiExpressionStatement)) return false;
final PsiElement element = parent.getParent();
- if (!(element instanceof PsiCodeBlock) && !(JspPsiUtil.isInJspFile(element) && element instanceof PsiFile)) return false;
+ if (!(element instanceof PsiCodeBlock) && !(FileTypeUtils.isInServerPageFile(element) && element instanceof PsiFile)) return false;
return true;
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithNullCheckSurrounder.java b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithNullCheckSurrounder.java
index aa258abd1bd1..c6a1221eced0 100644
--- a/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithNullCheckSurrounder.java
+++ b/java/java-impl/src/com/intellij/codeInsight/generation/surroundWith/JavaWithNullCheckSurrounder.java
@@ -24,6 +24,7 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NonNls;
class JavaWithNullCheckSurrounder extends JavaExpressionSurrounder{
@@ -36,7 +37,7 @@ class JavaWithNullCheckSurrounder extends JavaExpressionSurrounder{
PsiElement parent = PsiTreeUtil.getParentOfType(expr, PsiExpressionStatement.class);
if (parent == null) return false;
final PsiElement element = parent.getParent();
- if (!(element instanceof PsiCodeBlock) && !(JspPsiUtil.isInJspFile(element) && element instanceof PsiFile)) return false;
+ if (!(element instanceof PsiCodeBlock) && !(FileTypeUtils.isInServerPageFile(element) && element instanceof PsiFile)) return false;
return true;
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java
index c55a21b45991..6ba29bbc1c45 100644
--- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.Nullable;
* @author cdr
*/
public class QuickFixFactoryImpl extends QuickFixFactory {
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createModifierListFix(@NotNull PsiModifierList modifierList,
@NotNull String modifier,
@@ -40,6 +41,7 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return new ModifierFix(modifierList, modifier, shouldHave,showContainingClass);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createModifierListFix(@NotNull PsiModifierListOwner owner,
@NotNull final String modifier,
@@ -48,6 +50,7 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return new ModifierFix(owner, modifier, shouldHave, showContainingClass);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createMethodReturnFix(@NotNull PsiMethod method,
@NotNull PsiType toReturn,
@@ -55,28 +58,33 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return new MethodReturnTypeFix(method, toReturn, fixWholeHierarchy);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createAddMethodFix(@NotNull PsiMethod method, @NotNull PsiClass toClass) {
return new AddMethodFix(method, toClass);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createAddMethodFix(@NotNull String methodText,
@NotNull PsiClass toClass,
- String... exceptions) {
+ @NotNull String... exceptions) {
return new AddMethodFix(methodText, toClass, exceptions);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createImplementMethodsFix(@NotNull PsiClass aClass) {
return new ImplementMethodsFix(aClass);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createImplementMethodsFix(@NotNull PsiElement psiElement) {
return new ImplementMethodsFix(psiElement);
}
+ @NotNull
@Override
public LocalQuickFixOnPsiElement createMethodThrowsFix(@NotNull PsiMethod method,
@NotNull PsiClassType exceptionClass,
@@ -85,16 +93,18 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return new MethodThrowsFix(method, exceptionClass, shouldThrow, showContainingClass);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createAddDefaultConstructorFix(@NotNull PsiClass aClass) {
return new AddDefaultConstructorFix(aClass);
}
@Override
- public LocalQuickFixAndIntentionActionOnPsiElement createAddConstructorFix(@NotNull PsiClass aClass, String modifier) {
+ public LocalQuickFixAndIntentionActionOnPsiElement createAddConstructorFix(@NotNull PsiClass aClass, @NotNull String modifier) {
return aClass.getName() != null ? new AddDefaultConstructorFix(aClass, modifier) : null;
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createMethodParameterTypeFix(@NotNull PsiMethod method,
int index,
@@ -103,16 +113,19 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return new MethodParameterFix(method, newType, index, fixWholeHierarchy);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createMakeClassInterfaceFix(@NotNull PsiClass aClass) {
return new MakeClassInterfaceFix(aClass, true);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createMakeClassInterfaceFix(@NotNull PsiClass aClass, final boolean makeInterface) {
return new MakeClassInterfaceFix(aClass, makeInterface);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createExtendsListFix(@NotNull PsiClass aClass,
@NotNull PsiClassType typeToExtendFrom,
@@ -120,11 +133,13 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return new ExtendsListFix(aClass, typeToExtendFrom, toAdd);
}
+ @NotNull
@Override
public LocalQuickFixAndIntentionActionOnPsiElement createRemoveUnusedParameterFix(@NotNull PsiParameter parameter) {
return new RemoveUnusedParameterFix(parameter);
}
+ @NotNull
@Override
public IntentionAction createRemoveUnusedVariableFix(@NotNull PsiVariable variable) {
return new RemoveUnusedVariableFix(variable);
@@ -142,8 +157,9 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
return CreateClassOrPackageFix.createFix(qualifiedName, context, createClass ? ClassKind.CLASS : ClassKind.INTERFACE, superClass);
}
+ @NotNull
@Override
- public IntentionAction createCreateFieldOrPropertyFix(final PsiClass aClass, final String name, final PsiType type, final PropertyMemberType targetMember, final PsiAnnotation... annotations) {
+ public IntentionAction createCreateFieldOrPropertyFix(@NotNull final PsiClass aClass, @NotNull final String name, @NotNull final PsiType type, @NotNull final PropertyMemberType targetMember, @NotNull final PsiAnnotation... annotations) {
return new CreateFieldOrPropertyFix(aClass, name, type, targetMember, annotations);
}
diff --git a/java/java-impl/src/com/intellij/ide/hierarchy/call/CallHierarchyNodeDescriptor.java b/java/java-impl/src/com/intellij/ide/hierarchy/call/CallHierarchyNodeDescriptor.java
index 866e2cea0f5b..c465975f5a73 100644
--- a/java/java-impl/src/com/intellij/ide/hierarchy/call/CallHierarchyNodeDescriptor.java
+++ b/java/java-impl/src/com/intellij/ide/hierarchy/call/CallHierarchyNodeDescriptor.java
@@ -34,12 +34,13 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.pom.Navigatable;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.jsp.jspJava.JspHolderMethod;
-import com.intellij.psi.jsp.JspFile;
import com.intellij.psi.presentation.java.ClassPresentationUtil;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilBase;
+import com.intellij.psi.util.PsiUtilCore;
import com.intellij.ui.LayeredIcon;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -146,8 +147,8 @@ public final class CallHierarchyNodeDescriptor extends HierarchyNodeDescriptor i
myHighlightedText.getEnding().addText(buffer.toString(), mainTextAttributes);
}
}
- else if (JspPsiUtil.isInJspFile(enclosingElement) && enclosingElement instanceof PsiFile) {
- final JspFile file = JspPsiUtil.getJspFile(enclosingElement);
+ else if (FileTypeUtils.isInServerPageFile(enclosingElement) && enclosingElement instanceof PsiFile) {
+ final PsiFile file = PsiUtilCore.getTemplateLanguageFile(enclosingElement);
myHighlightedText.getEnding().addText(file.getName(), mainTextAttributes);
}
else {
@@ -156,7 +157,7 @@ public final class CallHierarchyNodeDescriptor extends HierarchyNodeDescriptor i
if (myUsageCount > 1) {
myHighlightedText.getEnding().addText(IdeBundle.message("node.call.hierarchy.N.usages", myUsageCount), HierarchyNodeDescriptor.getUsageCountPrefixAttributes());
}
- if (!(JspPsiUtil.isInJspFile(enclosingElement) && enclosingElement instanceof PsiFile)) {
+ if (!(FileTypeUtils.isInServerPageFile(enclosingElement) && enclosingElement instanceof PsiFile)) {
final PsiClass containingClass = enclosingElement instanceof PsiMethod
? ((PsiMethod)enclosingElement).getContainingClass()
: (PsiClass)enclosingElement;
diff --git a/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java b/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java
index 08ecb6a716a4..6b1a322e9944 100644
--- a/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java
+++ b/java/java-impl/src/com/intellij/javadoc/JavadocConfiguration.java
@@ -93,7 +93,7 @@ public class JavadocConfiguration implements ModuleRunProfile, JDOMExternalizabl
}
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
- return new MyJavaCommandLineState(myProject, myGenerationScope);
+ return new MyJavaCommandLineState(myProject, myGenerationScope, env);
}
public String getName() {
@@ -132,8 +132,8 @@ public class JavadocConfiguration implements ModuleRunProfile, JDOMExternalizabl
private final Project myProject;
@NonNls private static final String INDEX_HTML = "index.html";
- public MyJavaCommandLineState(Project project, AnalysisScope generationOptions) {
- super(null);
+ public MyJavaCommandLineState(Project project, AnalysisScope generationOptions, ExecutionEnvironment env) {
+ super(env);
myGenerationOptions = generationOptions;
myProject = project;
addConsoleFilters(new RegexpFilter(project, "$FILE_PATH$:$LINE$:[^\\^]+\\^"),
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java
index 0fe403b84ff8..2822fcfc81f5 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java
@@ -38,6 +38,7 @@ import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -157,7 +158,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager {
Set<PsiImportStatementBase> allImports = new THashSet<PsiImportStatementBase>(Arrays.asList(imports));
final Collection<PsiImportStatementBase> redundant;
- if (JspPsiUtil.isInJspFile(file)) {
+ if (FileTypeUtils.isInServerPageFile(file)) {
// remove only duplicate imports
redundant = ContainerUtil.newIdentityTroveSet();
ContainerUtil.addAll(redundant, imports);
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaConcatenationInjectorManager.java b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaConcatenationInjectorManager.java
index 59e311a213a2..d485130ac7d4 100644
--- a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaConcatenationInjectorManager.java
+++ b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaConcatenationInjectorManager.java
@@ -159,7 +159,7 @@ public class JavaConcatenationInjectorManager implements ModificationTracker {
}
if (result != null && result.getResult() != null) {
for (Pair<Place, PsiFile> p : result.getResult()) {
- ((MultiHostRegistrarImpl)registrar).addToResults(p.first, p.second);
+ ((MultiHostRegistrarImpl)registrar).addToResults(p.first, p.second, result);
}
if (data == null) {
diff --git a/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerHandler.java b/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerHandler.java
index 71a0c9508a8d..346ed4cf1cfd 100644
--- a/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/anonymousToInner/AnonymousToInnerHandler.java
@@ -37,6 +37,7 @@ import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.classMembers.ElementNeedsThis;
import com.intellij.util.IncorrectOperationException;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -102,7 +103,7 @@ public class AnonymousToInnerHandler implements RefactoringActionHandler {
return;
}
PsiElement targetContainer = findTargetContainer(myAnonClass);
- if (JspPsiUtil.isInJspFile(targetContainer) && targetContainer instanceof PsiFile) {
+ if (FileTypeUtils.isInServerPageFile(targetContainer) && targetContainer instanceof PsiFile) {
String message = RefactoringBundle.message("error.not.supported.for.jsp", REFACTORING_NAME);
showErrorMessage(editor, message);
return;
@@ -208,7 +209,7 @@ public class AnonymousToInnerHandler implements RefactoringActionHandler {
if (element instanceof PsiNewExpression) {
final PsiNewExpression newExpression = (PsiNewExpression)element;
if (newExpression.getAnonymousClass() != null) {
- return newExpression.getAnonymousClass();
+ return newExpression.getAnonymousClass();
}
}
element = element.getParent();
diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java
index d186ef9f0ae9..1aac71dfd7ee 100644
--- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java
@@ -67,6 +67,7 @@ import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.occurrences.OccurrenceManager;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -158,7 +159,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
final Project project,
PsiType tempType) {
if (myParentClass == null) {
- if (JspPsiUtil.isInJspFile(file)) {
+ if (FileTypeUtils.isInServerPageFile(file)) {
CommonRefactoringUtil.showErrorHint(project, editor, RefactoringBundle.message("error.not.supported.for.jsp", getRefactoringName()),
getRefactoringName(), getHelpID());
return true;
diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java
index 1f9661d1c5e0..08a6bf64234f 100644
--- a/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java
@@ -38,6 +38,7 @@ import com.intellij.refactoring.util.EnumConstantsUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -69,7 +70,7 @@ public abstract class LocalToFieldHandler {
if (parent instanceof PsiClass && !(myIsConstant && parent instanceof PsiAnonymousClass)) {
classes.add((PsiClass)parent);
}
- if (parent instanceof PsiFile && JspPsiUtil.isInJspFile(parent)) {
+ if (parent instanceof PsiFile && FileTypeUtils.isInServerPageFile(parent)) {
String message = RefactoringBundle.message("error.not.supported.for.jsp", REFACTORING_NAME);
CommonRefactoringUtil.showErrorHint(myProject, editor, message, REFACTORING_NAME, HelpID.LOCAL_TO_FIELD);
return false;
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java
index 7e3838ac891d..930eafc5cf6b 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/JavaMoveDirectoryWithClassesHelper.java
@@ -10,6 +10,7 @@ import com.intellij.refactoring.util.RefactoringConflictsUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.Function;
import com.intellij.util.containers.MultiMap;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import java.util.*;
@@ -76,8 +77,8 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses
if (!(file instanceof PsiClassOwner)) {
return false;
}
-
- if (!JspPsiUtil.isInJspFile(file)) {
+
+ if (!FileTypeUtils.isInServerPageFile(file)) {
return false;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java
index 298248347878..5f3471f63ab8 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java
@@ -38,6 +38,7 @@ import com.intellij.refactoring.util.TextOccurrencesUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.Nullable;
import java.io.File;
@@ -231,7 +232,7 @@ public class MoveClassesOrPackagesUtil {
if (!moveDestination.equals(file.getContainingDirectory())) {
LOG.assertTrue(file.getVirtualFile() != null, aClass);
MoveFilesOrDirectoriesUtil.doMoveFile(file, moveDestination);
- if (file instanceof PsiClassOwner && newPackage != null && !JspPsiUtil.isInJspFile(file)) {
+ if (file instanceof PsiClassOwner && newPackage != null && !FileTypeUtils.isInServerPageFile(file)) {
// Do not rely on class instance identity retention after setPackageName (Scala)
String aClassName = aClass.getName();
((PsiClassOwner)file).setPackageName(newPackage.getQualifiedName());
@@ -304,7 +305,7 @@ public class MoveClassesOrPackagesUtil {
}
return directory;
}
-
+
public static VirtualFile chooseSourceRoot(final PackageWrapper targetPackage,
final VirtualFile[] contentSourceRoots,
final PsiDirectory initialDirectory) {
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java
index de994d90819c..3134f39ecf18 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java
@@ -29,6 +29,7 @@ import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFileHandler;
import com.intellij.refactoring.util.MoveRenameUsageInfo;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.IncorrectOperationException;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import java.util.ArrayList;
import java.util.Collections;
@@ -41,7 +42,7 @@ public class MoveJavaFileHandler extends MoveFileHandler {
@Override
public boolean canProcessElement(PsiFile element) {
return element instanceof PsiJavaFile &&
- !JspPsiUtil.isInJspFile(element) &&
+ !FileTypeUtils.isInServerPageFile(element) &&
!ProjectRootsUtil.isOutsideSourceRoot(element) &&
!(element instanceof PsiCompiledElement);
}
diff --git a/java/java-impl/src/com/intellij/refactoring/rename/JavaVetoRenameCondition.java b/java/java-impl/src/com/intellij/refactoring/rename/JavaVetoRenameCondition.java
index 40ad2552001f..72231dc2f50c 100644
--- a/java/java-impl/src/com/intellij/refactoring/rename/JavaVetoRenameCondition.java
+++ b/java/java-impl/src/com/intellij/refactoring/rename/JavaVetoRenameCondition.java
@@ -20,12 +20,13 @@ import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaFile;
-import com.intellij.psi.JspPsiUtil;
+import com.siyeh.ig.psiutils.FileTypeUtils;
public class JavaVetoRenameCondition implements Condition<PsiElement> {
+ @Override
public boolean value(final PsiElement element) {
return element instanceof PsiJavaFile &&
- !JspPsiUtil.isInJspFile(element) &&
+ !FileTypeUtils.isInServerPageFile(element) &&
!ProjectRootsUtil.isOutsideSourceRoot((PsiFile)element) &&
((PsiJavaFile) element).getClasses().length > 0;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/util/ConflictsUtil.java b/java/java-impl/src/com/intellij/refactoring/util/ConflictsUtil.java
index 7f139233f5f4..0dfd7488c21b 100644
--- a/java/java-impl/src/com/intellij/refactoring/util/ConflictsUtil.java
+++ b/java/java-impl/src/com/intellij/refactoring/util/ConflictsUtil.java
@@ -24,6 +24,8 @@ import com.intellij.lang.findUsages.DescriptiveNameUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.FileContextUtil;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
+import com.intellij.psi.util.MethodSignature;
+import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.RefactoringBundle;
@@ -59,9 +61,19 @@ public class ConflictsUtil {
final PsiMethod prototype,
final MultiMap<PsiElement,String> conflicts) {
if (prototype == null) return;
- final String protoMethodInfo = getMethodPrototypeString(prototype);
+ String protoMethodInfo = getMethodPrototypeString(prototype);
PsiMethod method = aClass != null ? aClass.findMethodBySignature(prototype, true) : null;
+ if (method == null && aClass != null) {
+ final MethodSignature signature = prototype.getSignature(PsiSubstitutor.EMPTY);
+ for (PsiMethod classMethod : aClass.getMethods()) {
+ if (MethodSignatureUtil.areSignaturesErasureEqual(signature, classMethod.getSignature(PsiSubstitutor.EMPTY))) {
+ method = classMethod;
+ protoMethodInfo = "with same erasure";
+ break;
+ }
+ }
+ }
if (method != null && method != refactoredMethod) {
if (aClass.equals(method.getContainingClass())) {
@@ -69,7 +81,7 @@ public class ConflictsUtil {
RefactoringBundle.message("current.class") :
RefactoringUIUtil.getDescription(aClass, false);
conflicts.putValue(method, RefactoringBundle.message("method.0.is.already.defined.in.the.1",
- getMethodPrototypeString(prototype),
+ protoMethodInfo,
classDescr));
}
else { // method somewhere in base class
diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java
index 8cd847129573..b4f6127110f0 100644
--- a/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java
+++ b/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java
@@ -33,6 +33,7 @@ import com.intellij.usages.UsageGroup;
import com.intellij.usages.UsageView;
import com.intellij.usages.rules.PsiElementUsage;
import com.intellij.usages.rules.UsageGroupingRule;
+import com.siyeh.ig.psiutils.FileTypeUtils;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -79,7 +80,7 @@ public class ClassGroupingRule implements UsageGroupingRule {
}
else {
// skip JspClass synthetic classes.
- if (containingClass.getParent() instanceof PsiFile && JspPsiUtil.isInJspFile(containingClass)) {
+ if (containingClass.getParent() instanceof PsiFile && FileTypeUtils.isInServerPageFile(containingClass)) {
containingClass = null;
}
}
diff --git a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java
index ff3543a37f16..c09660c4af08 100644
--- a/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/GenericsUtil.java
@@ -239,7 +239,16 @@ public class GenericsUtil {
supers.add(classToAdd);
}
- public static boolean isTypeArgumentsApplicable(PsiTypeParameter[] typeParams, PsiSubstitutor substitutor, final PsiElement context) {
+ public static boolean isTypeArgumentsApplicable(final PsiTypeParameter[] typeParams,
+ final PsiSubstitutor substitutor,
+ final PsiElement context) {
+ return isTypeArgumentsApplicable(typeParams, substitutor, context, true);
+ }
+
+ public static boolean isTypeArgumentsApplicable(final PsiTypeParameter[] typeParams,
+ final PsiSubstitutor substitutor,
+ final PsiElement context,
+ final boolean allowUncheckedConversion) {
nextTypeParam:
for (PsiTypeParameter typeParameter : typeParams) {
PsiType substituted = substitutor.substitute(typeParameter);
@@ -249,16 +258,49 @@ public class GenericsUtil {
PsiClassType[] extendsTypes = typeParameter.getExtendsListTypes();
for (PsiClassType type : extendsTypes) {
PsiType extendsType = substitutor.substitute(type);
- if (extendsType.isAssignableFrom(substituted)) {
- continue nextTypeParam;
+ if (substituted instanceof PsiWildcardType) {
+ if (((PsiWildcardType)substituted).isSuper()) {
+ continue;
+ }
+ final PsiType extendsBound = ((PsiWildcardType)substituted).getExtendsBound();
+ if (TypeConversionUtil.erasure(extendsType).equals(TypeConversionUtil.erasure(extendsBound))) {
+ if (extendsBound instanceof PsiClassType) {
+ if (acceptExtendsBound((PsiClassType)extendsBound, 0)) continue;
+ } else if (extendsBound instanceof PsiIntersectionType) {
+ for (PsiType psiType : ((PsiIntersectionType)extendsBound).getConjuncts()) {
+ if (psiType instanceof PsiClassType) {
+ if (acceptExtendsBound((PsiClassType)psiType, 0)) continue nextTypeParam;
+ }
+ }
+ }
+ }
+ }
+ if (!TypeConversionUtil.isAssignable(extendsType, substituted, allowUncheckedConversion)) {
+ return false;
}
}
- if (extendsTypes.length > 0) return false;
}
-
return true;
}
+ private static boolean acceptExtendsBound(PsiClassType extendsBound, int depth) {
+ PsiType[] parameters = extendsBound.getParameters();
+ if (parameters.length == 1) {
+ PsiType argType = parameters[0];
+ if (argType instanceof PsiCapturedWildcardType && depth == 0) {
+ argType = ((PsiCapturedWildcardType)argType).getWildcard();
+ }
+ if (argType instanceof PsiWildcardType) {
+ if (!((PsiWildcardType)argType).isBounded()) return true;
+ final PsiType bound = ((PsiWildcardType)argType).getExtendsBound();
+ if (bound instanceof PsiClassType && TypeConversionUtil.erasure(bound).equals(TypeConversionUtil.erasure(extendsBound))) {
+ return acceptExtendsBound((PsiClassType)bound, depth + 1);
+ }
+ }
+ }
+ return false;
+ }
+
public static boolean isFromExternalTypeLanguage(@NotNull PsiType type) {
String internalCanonicalText = type.getInternalCanonicalText();
return internalCanonicalText != null && internalCanonicalText.equals(type.getCanonicalText());
diff --git a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java
index 94f4cd30ffd0..299575ef5632 100644
--- a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java
+++ b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java
@@ -94,6 +94,10 @@ public class MethodCandidateInfo extends CandidateInfo{
return myApplicabilityLevel;
}
+ public PsiSubstitutor getSiteSubstitutor() {
+ return super.getSubstitutor();
+ }
+
@Override
public PsiSubstitutor getSubstitutor() {
if (myCalcedSubstitutor == null) {
diff --git a/java/openapi/src/com/intellij/psi/util/EnclosingLoopMatcherExpression.java b/java/java-psi-api/src/com/intellij/psi/util/EnclosingLoopMatcherExpression.java
index 4a370cd914b3..4a370cd914b3 100644
--- a/java/openapi/src/com/intellij/psi/util/EnclosingLoopMatcherExpression.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/EnclosingLoopMatcherExpression.java
diff --git a/java/openapi/src/com/intellij/psi/util/EnclosingLoopOrSwitchMatcherExpression.java b/java/java-psi-api/src/com/intellij/psi/util/EnclosingLoopOrSwitchMatcherExpression.java
index b40ce6882bb1..b40ce6882bb1 100644
--- a/java/openapi/src/com/intellij/psi/util/EnclosingLoopOrSwitchMatcherExpression.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/EnclosingLoopOrSwitchMatcherExpression.java
diff --git a/java/openapi/src/com/intellij/psi/util/JavaMatchers.java b/java/java-psi-api/src/com/intellij/psi/util/JavaMatchers.java
index 4378141bfc5d..4378141bfc5d 100644
--- a/java/openapi/src/com/intellij/psi/util/JavaMatchers.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/JavaMatchers.java
diff --git a/java/java-psi-api/src/com/intellij/psi/util/MethodSignatureUtil.java b/java/java-psi-api/src/com/intellij/psi/util/MethodSignatureUtil.java
index 077dc8019fa3..b514fa2349c4 100644
--- a/java/java-psi-api/src/com/intellij/psi/util/MethodSignatureUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/MethodSignatureUtil.java
@@ -58,7 +58,7 @@ public class MethodSignatureUtil {
}
};
- private static boolean areErasedParametersEqual(@NotNull MethodSignature method1, @NotNull MethodSignature method2) {
+ public static boolean areErasedParametersEqual(@NotNull MethodSignature method1, @NotNull MethodSignature method2) {
PsiType[] erased1 = method1 instanceof MethodSignatureBase
? ((MethodSignatureBase)method1).getErasedParameterTypes() : calcErasedParameterTypes(method1);
PsiType[] erased2 = method2 instanceof MethodSignatureBase
diff --git a/java/openapi/src/com/intellij/psi/util/PropertyMemberType.java b/java/java-psi-api/src/com/intellij/psi/util/PropertyMemberType.java
index 90bdec5caf44..90bdec5caf44 100644
--- a/java/openapi/src/com/intellij/psi/util/PropertyMemberType.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/PropertyMemberType.java
diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java
index 020881b61a9a..642d8559e712 100644
--- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java
@@ -466,8 +466,20 @@ public final class PsiUtil extends PsiUtilCore {
}
@MethodCandidateInfo.ApplicabilityLevelConstant
- public static int getApplicabilityLevel(@NotNull final PsiMethod method, @NotNull final PsiSubstitutor substitutorForMethod, @NotNull final PsiType[] args,
- @NotNull final LanguageLevel languageLevel) {
+ public static int getApplicabilityLevel(@NotNull final PsiMethod method,
+ @NotNull final PsiSubstitutor substitutorForMethod,
+ @NotNull final PsiType[] args,
+ @NotNull final LanguageLevel languageLevel) {
+ return getApplicabilityLevel(method, substitutorForMethod, args, languageLevel, true, true);
+ }
+
+ @MethodCandidateInfo.ApplicabilityLevelConstant
+ public static int getApplicabilityLevel(@NotNull final PsiMethod method,
+ @NotNull final PsiSubstitutor substitutorForMethod,
+ @NotNull final PsiType[] args,
+ @NotNull final LanguageLevel languageLevel,
+ final boolean allowUncheckedConversion,
+ final boolean checkVarargs) {
final PsiParameter[] parms = method.getParameterList().getParameters();
if (args.length < parms.length - 1) return ApplicabilityLevel.NOT_APPLICABLE;
@@ -479,7 +491,7 @@ public final class PsiUtil extends PsiUtilCore {
PsiType parmType = getParameterType(parms[parms.length - 1], languageLevel, substitutorForMethod);
PsiType argType = args[args.length - 1];
if (argType == null) return ApplicabilityLevel.NOT_APPLICABLE;
- if (TypeConversionUtil.isAssignable(parmType, argType)) return ApplicabilityLevel.FIXED_ARITY;
+ if (TypeConversionUtil.isAssignable(parmType, argType, allowUncheckedConversion)) return ApplicabilityLevel.FIXED_ARITY;
if (isRaw) {
final PsiType erasedParamType = TypeConversionUtil.erasure(parmType);
@@ -491,7 +503,7 @@ public final class PsiUtil extends PsiUtilCore {
}
}
- if (method.isVarArgs() && languageLevel.compareTo(LanguageLevel.JDK_1_5) >= 0) {
+ if (checkVarargs && method.isVarArgs() && languageLevel.compareTo(LanguageLevel.JDK_1_5) >= 0) {
if (args.length < parms.length) return ApplicabilityLevel.VARARGS;
PsiParameter lastParameter = parms[parms.length - 1];
if (!lastParameter.isVarArgs()) return ApplicabilityLevel.NOT_APPLICABLE;
diff --git a/java/java-impl/src/com/intellij/codeInsight/JavaContainerProvider.java b/java/java-psi-impl/src/com/intellij/codeInsight/JavaContainerProvider.java
index 64a715e3a616..64a715e3a616 100644
--- a/java/java-impl/src/com/intellij/codeInsight/JavaContainerProvider.java
+++ b/java/java-psi-impl/src/com/intellij/codeInsight/JavaContainerProvider.java
diff --git a/java/java-impl/src/com/intellij/codeInsight/highlighting/JavaHighlightUsagesDescriptionProvider.java b/java/java-psi-impl/src/com/intellij/codeInsight/highlighting/JavaHighlightUsagesDescriptionProvider.java
index b09181c1a5da..b09181c1a5da 100644
--- a/java/java-impl/src/com/intellij/codeInsight/highlighting/JavaHighlightUsagesDescriptionProvider.java
+++ b/java/java-psi-impl/src/com/intellij/codeInsight/highlighting/JavaHighlightUsagesDescriptionProvider.java
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
index d24bfd9ff654..6dde4206470f 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
@@ -526,6 +526,44 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
substitutor = substitutor.put(typeParameter, substitution);
}
}
+ for (int i = 0; i < typeParameters.length; i++) {
+ PsiTypeParameter typeParameter = typeParameters[i];
+ if (!substitutor.getSubstitutionMap().containsKey(typeParameter)) {
+ PsiType substitutionFromBounds = PsiType.NULL;
+ OtherParameters:
+ for (int j = 0; j < typeParameters.length; j++) {
+ if (i != j) {
+ PsiTypeParameter other = typeParameters[j];
+ final PsiType otherSubstitution = substitutor.substitute(other);
+ if (otherSubstitution == null) continue;
+ final PsiClassType[] bounds = other.getExtendsListTypes();
+ for (PsiClassType bound : bounds) {
+ final PsiType substitutedBound = substitutor.substitute(bound);
+ final Pair<PsiType, ConstraintType> currentConstraint =
+ getSubstitutionForTypeParameterConstraint(typeParameter, substitutedBound, otherSubstitution, true, languageLevel);
+ if (currentConstraint == null) continue;
+ final PsiType currentSubstitution = currentConstraint.getFirst();
+ final ConstraintType currentConstraintType = currentConstraint.getSecond();
+ if (currentConstraintType == ConstraintType.EQUALS) {
+ substitutionFromBounds = currentSubstitution;
+ break OtherParameters;
+ }
+ else if (currentConstraintType == ConstraintType.SUPERTYPE) {
+ if (PsiType.NULL.equals(substitutionFromBounds)) {
+ substitutionFromBounds = currentSubstitution;
+ }
+ else {
+ substitutionFromBounds = GenericsUtil.getLeastUpperBound(substitutionFromBounds, currentSubstitution, myManager);
+ }
+ }
+ }
+ }
+ }
+ if (substitutionFromBounds != PsiType.NULL) {
+ substitutor = substitutor.put(typeParameter, substitutionFromBounds);
+ }
+ }
+ }
return substitutor;
}
@@ -1163,15 +1201,18 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
}
}
- PsiClassType[] superTypes = typeParameter.getSuperTypes();
+ PsiType[] superTypes = typeParameter.getSuperTypes();
if (superTypes.length == 0) return null;
- PsiType superType = substitutor.substitute(superTypes[0]);
- if (superType instanceof PsiClassType && ((PsiClassType)superType).isRaw()) {
- superType = TypeConversionUtil.erasure(superType);
+ for (int i = 0; i < superTypes.length; i++) {
+ PsiType superType = substitutor.substitute(superTypes[i]);
+ if (superType instanceof PsiClassType && ((PsiClassType)superType).isRaw()) {
+ superType = TypeConversionUtil.erasure(superType);
+ }
+ if (superType == null) superType = PsiType.getJavaLangObject(myManager, scope);
+ if (superType == null) return null;
+ superTypes[i] = superType;
}
- if (superType == null) superType = PsiType.getJavaLangObject(myManager, scope);
- if (superType == null) return null;
- return policy.getInferredTypeWithNoConstraint(myManager, superType);
+ return policy.getInferredTypeWithNoConstraint(myManager, PsiIntersectionType.createIntersection(superTypes));
}
return null;
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java b/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java
index 4e6fa6c6cec0..0f54e4978348 100644
--- a/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java
+++ b/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java
@@ -33,9 +33,11 @@ import gnu.trove.THashMap;
import gnu.trove.THashSet;
import gnu.trove.TIntArrayList;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import java.util.*;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Created by IntelliJ IDEA.
@@ -71,7 +73,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
boolean atLeastOneMatch = checkParametersNumber(conflicts, myActualParameterTypes.length, true);
if (conflicts.size() == 1) return conflicts.get(0);
- checkSameSignatures(conflicts, myLanguageLevel);
+ checkSameSignatures(conflicts);
if (conflicts.size() == 1) return conflicts.get(0);
checkAccessStaticLevels(conflicts, true);
@@ -193,7 +195,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
}
}
- private void checkSameSignatures(@NotNull List<CandidateInfo> conflicts, @NotNull LanguageLevel languageLevel) {
+ private void checkSameSignatures(@NotNull List<CandidateInfo> conflicts) {
// candidates should go in order of class hierarchy traversal
// in order for this to work
Map<MethodSignature, CandidateInfo> signatures = new THashMap<MethodSignature, CandidateInfo>(conflicts.size());
@@ -307,14 +309,17 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
if (MethodSignatureUtil.areSignaturesEqual(existingMethod.getSignature(eSubstitutor), method.getSignature(cSubstitutor))) {
final PsiType returnType = eSubstitutor.substitute(existingMethod.getReturnType());
final PsiType returnType1 = cSubstitutor.substitute(method.getReturnType());
- if (returnType != null && returnType1 != null && !returnType1.equals(returnType) && TypeConversionUtil.isAssignable(returnType, returnType1, false)) {
- if (class1.isInterface() && !existingClass.isInterface()) continue;
- conflicts.remove(existing);
- } else {
- conflicts.remove(i);
+ if (returnType != null && returnType1 != null && !returnType1.equals(returnType)) {
+ if (TypeConversionUtil.isAssignable(returnType, returnType1, false)) {
+ if (class1.isInterface() && !existingClass.isInterface()) continue;
+ conflicts.remove(existing);
+ } else {
+ if (!TypeConversionUtil.isAssignable(returnType1, returnType, false)) continue;
+ conflicts.remove(i);
+ }
+ i--;
+ break;
}
- i--;
- break;
}
}
}
@@ -420,42 +425,6 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
NEITHER
}
- private static Specifics checkSubtyping(PsiType type1, PsiType type2, PsiMethod method1, PsiMethod method2) {
- return checkSubtyping(type1, type2, method1, method2, true);
- }
-
- @Nullable
- private static Specifics checkSubtyping(PsiType type1,
- PsiType type2,
- PsiMethod method1,
- PsiMethod method2,
- boolean boxingHappening) {
- boolean noBoxing = boxingHappening || type1 instanceof PsiPrimitiveType == type2 instanceof PsiPrimitiveType;
- boolean allowUncheckedConversion =
- !method1.hasModifierProperty(PsiModifier.STATIC) && !method2.hasModifierProperty(PsiModifier.STATIC);
-
- if (!allowUncheckedConversion) {
- final PsiClass containingClass1 = method1.getContainingClass();
- final PsiClass containingClass2 = method2.getContainingClass();
- if (containingClass1 != null && containingClass2 != null) {
- allowUncheckedConversion = !containingClass1.isInheritor(containingClass2, true) &&
- !containingClass2.isInheritor(containingClass1, true);
- }
- }
-
- final boolean assignable2From1 = noBoxing && TypeConversionUtil.isAssignable(type2, type1, allowUncheckedConversion);
- final boolean assignable1From2 = noBoxing && TypeConversionUtil.isAssignable(type1, type2, allowUncheckedConversion);
- if (assignable1From2 || assignable2From1) {
- if (assignable1From2 && assignable2From1) {
- return null;
- }
-
- return assignable1From2 ? Specifics.SECOND : Specifics.FIRST;
- }
-
- return allowUncheckedConversion ? Specifics.NEITHER : null;
- }
-
private static boolean isBoxingHappened(PsiType argType, PsiType parameterType, @NotNull LanguageLevel languageLevel) {
if (argType == null) return parameterType instanceof PsiPrimitiveType;
if (parameterType instanceof PsiClassType) {
@@ -485,12 +454,14 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
final int max = Math.max(params1.length, params2.length);
PsiType[] types1 = new PsiType[max];
PsiType[] types2 = new PsiType[max];
+ final boolean varargsPosition = applicabilityLevel == MethodCandidateInfo.ApplicabilityLevel.VARARGS;
for (int i = 0; i < max; i++) {
ProgressManager.checkCanceled();
PsiType type1 = params1.length > 0 ? params1[Math.min(i, params1.length - 1)].getType() : null;
PsiType type2 = params2.length > 0 ? params2[Math.min(i, params2.length - 1)].getType() : null;
- if (applicabilityLevel == MethodCandidateInfo.ApplicabilityLevel.VARARGS) {
+ if (varargsPosition) {
if (type1 instanceof PsiEllipsisType && type2 instanceof PsiEllipsisType &&
+ params1.length == params2.length &&
(!JavaVersionService.getInstance().isAtLeast(class1, JavaSdkVersion.JDK_1_7) || ((PsiArrayType)type1).getComponentType().equalsToText(CommonClassNames.JAVA_LANG_OBJECT) || ((PsiArrayType)type2).getComponentType().equalsToText(CommonClassNames.JAVA_LANG_OBJECT))) {
type1 = ((PsiEllipsisType)type1).toArrayType();
type2 = ((PsiEllipsisType)type2).toArrayType();
@@ -505,6 +476,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
types2[i] = type2;
}
+ boolean sameBoxing = true;
int[] boxingHappened = new int[2];
for (int i = 0; i < types1.length; i++) {
ProgressManager.checkCanceled();
@@ -512,231 +484,125 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
PsiType type2 = classSubstitutor2.substitute(types2[i]);
PsiType argType = i < myActualParameterTypes.length ? myActualParameterTypes[i] : null;
- boxingHappened[0] += isBoxingHappened(argType, type1, languageLevel) ? 1 : 0;
- boxingHappened[1] += isBoxingHappened(argType, type2, languageLevel) ? 1 : 0;
+ boolean boxingInFirst = false;
+ if (isBoxingHappened(argType, type1, languageLevel)) {
+ boxingHappened[0] += 1;
+ boxingInFirst = true;
+ }
+
+ boolean boxingInSecond = false;
+ if (isBoxingHappened(argType, type2, languageLevel)) {
+ boxingHappened[1] += 1;
+ boxingInSecond = true;
+ }
+ sameBoxing &= boxingInFirst == boxingInSecond;
}
if (boxingHappened[0] == 0 && boxingHappened[1] > 0) return Specifics.FIRST;
if (boxingHappened[0] > 0 && boxingHappened[1] == 0) return Specifics.SECOND;
- Specifics isMoreSpecific = null;
- for (int i = 0; i < types1.length; i++) {
- ProgressManager.checkCanceled();
- Specifics specifics = checkSubstitutorSpecific(method1, method2, classSubstitutor1, classSubstitutor2, types1[i], types2[i]);
- if (specifics == null) {
- PsiSubstitutor methodSubstitutor1 = PsiSubstitutor.EMPTY;
- PsiSubstitutor methodSubstitutor2 = PsiSubstitutor.EMPTY;
- if (typeParameters1.length == 0 || typeParameters2.length == 0) {
- if (typeParameters1.length > 0) {
- final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(myArgumentsList.getProject()).getResolveHelper();
- methodSubstitutor1 = calculateMethodSubstitutor(typeParameters1, types1, types2, resolveHelper, languageLevel);
- }
- else if (typeParameters2.length > 0) {
- final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(myArgumentsList.getProject()).getResolveHelper();
- methodSubstitutor2 = calculateMethodSubstitutor(typeParameters2, types2, types1, resolveHelper, languageLevel);
- }
- }
- else {
- PsiElementFactory factory = JavaPsiFacade.getInstance(myArgumentsList.getProject()).getElementFactory();
- methodSubstitutor1 = factory.createRawSubstitutor(PsiSubstitutor.EMPTY, typeParameters1);
- methodSubstitutor2 = factory.createRawSubstitutor(PsiSubstitutor.EMPTY, typeParameters2);
+ if (sameBoxing) {
+ final PsiSubstitutor siteSubstitutor1 = ((MethodCandidateInfo)info1).getSiteSubstitutor();
+ final PsiSubstitutor siteSubstitutor2 = ((MethodCandidateInfo)info2).getSiteSubstitutor();
+
+ final PsiType[] types2AtSite = typesAtSite(types2, siteSubstitutor2);
+ final PsiType[] types1AtSite = typesAtSite(types1, siteSubstitutor1);
+
+ final PsiSubstitutor methodSubstitutor1 = calculateMethodSubstitutor(typeParameters1, method1, siteSubstitutor1, types1, types2AtSite, languageLevel);
+ final PsiSubstitutor methodSubstitutor2 = calculateMethodSubstitutor(typeParameters2, method2, siteSubstitutor2, types2, types1AtSite, languageLevel);
+
+ final boolean applicable12 = isApplicableTo(types2AtSite, method1, typeParameters1, languageLevel, methodSubstitutor1, varargsPosition);
+ final boolean applicable21 = isApplicableTo(types1AtSite, method2, typeParameters2, languageLevel, methodSubstitutor2, varargsPosition);
+
+ if (applicable12 || applicable21) {
+
+ if (applicable12 && !applicable21) return Specifics.SECOND;
+ if (applicable21 && !applicable12) return Specifics.FIRST;
+
+ final boolean abstract1 = method1.hasModifierProperty(PsiModifier.ABSTRACT);
+ final boolean abstract2 = method2.hasModifierProperty(PsiModifier.ABSTRACT);
+ if (abstract1 && !abstract2) {
+ return Specifics.SECOND;
}
- PsiType type1 = classSubstitutor1.substitute(methodSubstitutor1.substitute(types1[i]));
- PsiType type2 = classSubstitutor2.substitute(methodSubstitutor2.substitute(types2[i]));
- specifics = type1 == null || type2 == null ? null : checkSubtyping(type1, type2, method1, method2, boxingHappened[0] == 0 || boxingHappened[1] == 0);
- if (specifics == null) {
- continue;
+ if (abstract2 && !abstract1) {
+ return Specifics.FIRST;
}
}
-
- switch (specifics) {
- case FIRST:
- if (isMoreSpecific == Specifics.SECOND) return Specifics.NEITHER;
- isMoreSpecific = specifics;
- break;
- case SECOND:
- if (isMoreSpecific == Specifics.FIRST) return Specifics.NEITHER;
- isMoreSpecific = specifics;
- break;
- case NEITHER:
- return Specifics.NEITHER;
+ }
+ else if (varargsPosition) {
+ final PsiType lastParamType1 = classSubstitutor1.substitute(types1[types1.length - 1]);
+ final PsiType lastParamType2 = classSubstitutor2.substitute(types2[types1.length - 1]);
+ final boolean assignable1 = TypeConversionUtil.isAssignable(lastParamType2, lastParamType1);
+ final boolean assignable2 = TypeConversionUtil.isAssignable(lastParamType1, lastParamType2);
+ if (assignable1 && !assignable2) {
+ return Specifics.FIRST;
+ }
+ if (assignable2 && !assignable1) {
+ return Specifics.SECOND;
}
}
- if (isMoreSpecific == null && class1 != class2) {
+ if (class1 != class2) {
if (class2.isInheritor(class1, true) || class1.isInterface() && !class2.isInterface()) {
if (MethodSignatureUtil.isSubsignature(method1.getSignature(info1.getSubstitutor()), method2.getSignature(info2.getSubstitutor()))) {
- isMoreSpecific = Specifics.SECOND;
+ return Specifics.SECOND;
}
else if (method1.hasModifierProperty(PsiModifier.STATIC) && method2.hasModifierProperty(PsiModifier.STATIC) && boxingHappened[0] == 0) {
- isMoreSpecific = Specifics.SECOND;
+ return Specifics.SECOND;
}
}
else if (class1.isInheritor(class2, true) || class2.isInterface()) {
- if (MethodSignatureUtil.isSubsignature(method2.getSignature(info2.getSubstitutor()), method1.getSignature(info1.getSubstitutor()))) {
- isMoreSpecific = Specifics.FIRST;
+ if (MethodSignatureUtil.areErasedParametersEqual(method1.getSignature(PsiSubstitutor.EMPTY), method2.getSignature(PsiSubstitutor.EMPTY)) &&
+ MethodSignatureUtil.isSubsignature(method2.getSignature(info2.getSubstitutor()), method1.getSignature(info1.getSubstitutor()))) {
+ return Specifics.FIRST;
}
else if (method1.hasModifierProperty(PsiModifier.STATIC) && method2.hasModifierProperty(PsiModifier.STATIC) && boxingHappened[0] == 0) {
- isMoreSpecific = Specifics.FIRST;
+ return Specifics.FIRST;
}
}
}
- if (isMoreSpecific == null) {
- if (!JavaVersionService.getInstance().isAtLeast(myArgumentsList, JavaSdkVersion.JDK_1_7) ||
- !MethodSignatureUtil.areParametersErasureEqual(method1, method2) ||
- InheritanceUtil.isInheritorOrSelf(class1, class2, true) ||
- InheritanceUtil.isInheritorOrSelf(class2, class1, true)) {
- if (typeParameters1.length < typeParameters2.length) return Specifics.FIRST;
- if (typeParameters1.length > typeParameters2.length) return Specifics.SECOND;
- }
- return Specifics.NEITHER;
- }
- return isMoreSpecific;
- }
-
- @Nullable
- private static Specifics checkSubstitutorSpecific(PsiMethod method1,
- PsiMethod method2,
- PsiSubstitutor classSubstitutor1,
- PsiSubstitutor classSubstitutor2,
- PsiType type1,
- PsiType type2) {
- final PsiClass aClass1 = PsiUtil.resolveClassInType(type1);
- final PsiClass aClass2 = PsiUtil.resolveClassInType(type2);
- if (aClass1 instanceof PsiTypeParameter && aClass2 instanceof PsiTypeParameter) {
- return checkTypeParams(method1, method2, classSubstitutor1, classSubstitutor2, type1, type2, (PsiTypeParameter)aClass1, (PsiTypeParameter)aClass2);
- }
- if (aClass1 instanceof PsiTypeParameter && aClass2 != null) {
- return chooseHigherDimension(type1, type2);
- }
- else if (aClass2 instanceof PsiTypeParameter && aClass1 != null) {
- return chooseHigherDimension(type2, type1);
- }
-
- final Map<PsiTypeParameter, PsiType> map1 = classSubstitutor1.getSubstitutionMap();
- final Map<PsiTypeParameter, PsiType> map2 = classSubstitutor2.getSubstitutionMap();
- if (map1.size() == 1 && map2.size() == 1) {
- boolean leftAssignable = InheritanceUtil.isInheritorOrSelf(aClass2, aClass1, true);
- boolean rightAssignable = InheritanceUtil.isInheritorOrSelf(aClass1, aClass2, true);
- final PsiType t1 = map1.values().iterator().next();
- final PsiType t2 = map2.values().iterator().next();
-
- boolean raw1 = t1 instanceof PsiClassType && ((PsiClassType)t1).hasParameters();
- boolean raw2 = t2 instanceof PsiClassType && ((PsiClassType)t2).hasParameters();
- if (!raw1 && raw2) return leftAssignable ? Specifics.FIRST : Specifics.NEITHER;
- if (raw1 && !raw2) return rightAssignable ? Specifics.SECOND : Specifics.NEITHER;
-
- final PsiTypeParameter p1 = map1.keySet().iterator().next();
- final PsiTypeParameter p2 = map2.keySet().iterator().next();
- Specifics specifics = checkTypeParams(method1, method2, classSubstitutor1, classSubstitutor2, type1, type2, p1, p2);
- if (specifics == null) {
- specifics = chooseHigherDimension(t1, t2);
- }
- if (specifics != null) {
- if (specifics == Specifics.FIRST) {
- if (leftAssignable && !rightAssignable) return Specifics.NEITHER;
- }
- else if (specifics == Specifics.SECOND) {
- if (rightAssignable && !leftAssignable) return Specifics.NEITHER;
- }
- }
- return specifics;
+ final boolean raw1 = PsiUtil.isRawSubstitutor(method1, classSubstitutor1);
+ final boolean raw2 = PsiUtil.isRawSubstitutor(method2, classSubstitutor2);
+ if (raw1 ^ raw2) {
+ return raw1 ? Specifics.SECOND : Specifics.FIRST;
}
- return null;
- }
- private static Specifics chooseHigherDimension(PsiType type1, PsiType type2) {
- if (type1 != null && type1.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) return null;
- if (type2 != null && type2.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) return null;
- int d1 = type1 != null ? type1.getArrayDimensions() : 0;
- int d2 = type2 != null ? type2.getArrayDimensions() : 0;
- if (d1 > d2) {
- return Specifics.SECOND;
- }
- else if (d2 > d1) {
- return Specifics.FIRST;
- }
- return null;
+ return Specifics.NEITHER;
}
- @Nullable
- private static Specifics checkTypeParams(PsiMethod method1,
- PsiMethod method2,
- PsiSubstitutor classSubstitutor1,
- PsiSubstitutor classSubstitutor2,
- PsiType type1,
- PsiType type2,
- PsiTypeParameter p1,
- PsiTypeParameter p2) {
- final Map<PsiClass, PsiClassType> resolved1 = new HashMap<PsiClass, PsiClassType>();
- for (PsiClassType referenceElement : p1.getExtendsList().getReferencedTypes()) {
- ProgressManager.checkCanceled();
- final PsiClass aClass = referenceElement.resolve();
- if (aClass != null) {
- resolved1.put(aClass, referenceElement);
- }
- }
-
- final Map<PsiClass, PsiClassType> resolved2 = new HashMap<PsiClass, PsiClassType>();
- for (PsiClassType referenceElement : p2.getExtendsList().getReferencedTypes()) {
- ProgressManager.checkCanceled();
- final PsiClass aClass = referenceElement.resolve();
- if (aClass != null) {
- resolved2.put(aClass, referenceElement);
- }
- }
-
- Specifics specifics = null;
- if (resolved1.size() > resolved2.size()){
- specifics = checkExtendsList(resolved1, resolved2, Specifics.FIRST);
- } else if (resolved2.size() > resolved1.size()) {
- specifics = checkExtendsList(resolved2, resolved1, Specifics.SECOND);
- }
- if (specifics != null) return specifics;
- specifics = checkSubtyping(TypeConversionUtil.erasure(PsiSubstitutor.EMPTY.substitute(p1)),
- TypeConversionUtil.erasure(PsiSubstitutor.EMPTY.substitute(p2)), method1, method2);
- if (specifics != null) {
- return specifics;
- } else {
- final PsiType ctype1 = classSubstitutor1.substitute(type1);
- final PsiType ctype2 = classSubstitutor2.substitute(type2);
- return checkSubtyping(ctype1, ctype2, method1, method2);
+ private boolean isApplicableTo(PsiType[] argTypes,
+ PsiMethod method,
+ PsiTypeParameter[] typeParameters,
+ LanguageLevel languageLevel, PsiSubstitutor methodSubstitutor, boolean checkVarargs) {
+ final int applicabilityLevel = PsiUtil.getApplicabilityLevel(method, methodSubstitutor, argTypes, languageLevel, false, checkVarargs);
+ final boolean applicable = applicabilityLevel > MethodCandidateInfo.ApplicabilityLevel.NOT_APPLICABLE;
+ if (applicable && !GenericsUtil.isTypeArgumentsApplicable(typeParameters, methodSubstitutor, myArgumentsList, false)) {
+ return false;
}
+ return applicable;
}
- private static Specifics checkExtendsList(Map<PsiClass, PsiClassType> resolved1,
- Map<PsiClass, PsiClassType> resolved2,
- Specifics preferred) {
- if (resolved1.keySet().containsAll(resolved2.keySet())){
- resolved1.keySet().removeAll(resolved2.keySet());
- for (Iterator<PsiClass> iterator = resolved1.keySet().iterator(); iterator.hasNext(); ) {
- PsiClass psiClass = iterator.next();
- final PsiClassType baseType = resolved1.get(psiClass);
- for (PsiClassType childType : resolved2.values()) {
- ProgressManager.checkCanceled();
- if (TypeConversionUtil.isAssignable(baseType, childType, false)) {
- iterator.remove();
- break;
- }
- }
- }
- if (!resolved1.isEmpty()) return preferred;
- return Specifics.NEITHER;
+ private static PsiType[] typesAtSite(PsiType[] types1, PsiSubstitutor siteSubstitutor1) {
+ final PsiType[] types = new PsiType[types1.length];
+ for (int i = 0; i < types1.length; i++) {
+ types[i] = siteSubstitutor1.substitute(types1[i]);
}
- return null;
+ return types;
}
private static PsiSubstitutor calculateMethodSubstitutor(final PsiTypeParameter[] typeParameters,
+ final PsiMethod method,
+ final PsiSubstitutor siteSubstitutor,
final PsiType[] types1,
final PsiType[] types2,
- final PsiResolveHelper resolveHelper,
@NotNull LanguageLevel languageLevel) {
- PsiSubstitutor substitutor = resolveHelper.inferTypeArguments(typeParameters, types1, types2, languageLevel);
- for (PsiTypeParameter typeParameter : typeParameters) {
+ PsiSubstitutor substitutor = PsiResolveHelper.SERVICE.getInstance(method.getProject())
+ .inferTypeArguments(typeParameters, types1, types2, languageLevel);
+ for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(method)) {
ProgressManager.checkCanceled();
LOG.assertTrue(typeParameter != null);
if (!substitutor.getSubstitutionMap().containsKey(typeParameter)) {
- substitutor = substitutor.put(typeParameter, TypeConversionUtil.typeParameterErasure(typeParameter));
+ substitutor = substitutor.put(typeParameter, siteSubstitutor.substitute(typeParameter));
}
}
return substitutor;
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA67668.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA67668.java
index 2de2b0e4f5d9..b93cc27d7cda 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA67668.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/AmbiguousMethodCallIDEA67668.java
@@ -12,6 +12,6 @@ class B
{
public static void main(String[] args) {
A a = null;
- a.foo<error descr="Ambiguous method call: both 'A.foo(Collection<?>)' and 'A.foo(List<?>)' match">(null)</error>;
+ a.foo<error descr="Ambiguous method call: both 'A.foo(List<?>)' and 'A.foo(List<?>)' match">(null)</error>;
}
} \ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57569/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57569/pck/AmbiguousMethodCall.java
new file mode 100644
index 000000000000..ac6a0cea0ead
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57569/pck/AmbiguousMethodCall.java
@@ -0,0 +1,11 @@
+package pck;
+abstract class C<T> {
+ abstract Object foo(T x);
+ String foo(String x) { return null; }
+}
+
+class D extends C<String>{
+ {
+ foo("");
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57633/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57633/pck/AmbiguousMethodCall.java
new file mode 100644
index 000000000000..6bd05e0b04b4
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA57633/pck/AmbiguousMethodCall.java
@@ -0,0 +1,12 @@
+package pck;
+
+import java.io.Serializable;
+
+abstract class A {
+ abstract <T extends Comparable<?> & Serializable> void foo(T x, Integer y);
+ abstract <T extends Serializable & Comparable<?>> void foo(T x, Object y);
+
+ {
+ foo("", 1);
+ }
+} \ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67519/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67519/pck/AmbiguousMethodCall.java
new file mode 100644
index 000000000000..f663da263e6b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67519/pck/AmbiguousMethodCall.java
@@ -0,0 +1,18 @@
+package pck;
+class A<T extends C<String> & D>
+{
+ void bar(T x)
+ {
+ x.foo<error descr="Ambiguous method call: both 'C.foo(String)' and 'D.foo(String)' match">("")</error>;
+ }
+}
+
+interface D
+{
+ abstract void foo(String s);
+}
+
+interface C<T>
+{
+ abstract void foo(T s);
+} \ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67576/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67576/pck/AmbiguousMethodCall.java
new file mode 100644
index 000000000000..82706d33bc48
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67576/pck/AmbiguousMethodCall.java
@@ -0,0 +1,21 @@
+package pck;
+
+interface A<T>
+{
+ <S> T foo();
+}
+
+interface B
+{
+ <S> Object foo();
+}
+
+interface C extends A, B { }
+
+class D
+{
+ void bar(C x)
+ {
+ x.foo();
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67836/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67836/pck/AmbiguousMethodCall.java
new file mode 100644
index 000000000000..b42af5ac0642
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67836/pck/AmbiguousMethodCall.java
@@ -0,0 +1,19 @@
+package pck;
+import static pck.D.foo;
+import static pck.C.foo;
+
+public class C {
+ public static <T> String foo(Comparable<? extends Comparable<T>> x){
+ return null;
+ }
+}
+
+class D {
+ public static <T> void foo(Comparable<? extends T> x){}
+}
+
+class B{
+ public static void bar(){
+ foo(1).toLowerCase();
+ }
+} \ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67864/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67864/pck/AmbiguousMethodCall.java
new file mode 100644
index 000000000000..8240e7aa22b0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA67864/pck/AmbiguousMethodCall.java
@@ -0,0 +1,26 @@
+package pck;
+
+import java.util.List;
+
+import static pck.C.foo;
+import static pck.C.foo1;
+import static pck.D.foo;
+import static pck.D.foo1;
+
+class C {
+ static <T> void foo(List<T> x) { }
+ static <T extends List> void foo1(List<T> x) { }
+}
+
+class D {
+ static <T extends List<S>, S> String foo(List<T> x) { return null; }
+ static <T extends List<?>, S> String foo1(List<T> x) { return null; }
+}
+
+public class Main {
+ public static void main(String[] args){
+ List<List<String>> x = null;
+ foo(x).toCharArray();
+ foo1(x).toCharArray();
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java
index d1b120225a79..b4ce3a472bd5 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousVarargs/pck/AmbiguousMethodCall.java
@@ -19,7 +19,7 @@ abstract class A {
abstract void foo(int... x);
{
- foo<error descr="Ambiguous method call: both 'A.foo(Object...)' and 'A.foo(int...)' match">(1)</error>;
+ foo(1);
}
}
abstract class A1 {
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AmbiguousTypeParamVsConcrete.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AmbiguousTypeParamVsConcrete.java
new file mode 100644
index 000000000000..272fb292d2a3
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/AmbiguousTypeParamVsConcrete.java
@@ -0,0 +1,22 @@
+public class CssPropertyValueImpl extends CssTableValueBase<CssPropertyValue, Object> implements CssPropertyValue {
+ public CssPropertyValueImpl(final Type type) {
+ super(type);
+ }
+}
+
+public abstract class CssTableValueBase<V extends CssTableValue, T> implements CssTableValue<V, T> {
+
+ protected CssTableValueBase(final Type type) {
+ }
+
+ protected CssTableValueBase(final T value) {
+ }
+}
+
+enum Type {}
+
+interface CssTableValue<A, B> {
+}
+
+interface CssPropertyValue extends CssTableValue<CssPropertyValue, Object> {
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/BoxingSpecific.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/BoxingSpecific.java
new file mode 100644
index 000000000000..382f4e7d099b
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/BoxingSpecific.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+abstract class A {
+ void computeCostIfNeeded(Map<Object, Integer> costMap) {
+ Math.min(costMap.get(null), 1);
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67843.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67843.java
new file mode 100644
index 000000000000..69b359fae7d0
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA67843.java
@@ -0,0 +1,10 @@
+import java.util.List;
+
+class B{
+ public static void bar(){
+ <error descr="Inferred type 'java.util.List<java.lang.Comparable>' for type parameter 'T' is not within its bound; should implement 'java.util.List<java.lang.Comparable<java.util.List<java.lang.Comparable>>>'">foo(null)</error>.get(0).compareTo(null);
+ }
+ static <T extends List<Comparable<T>>> T foo(T x) {
+ return x;
+ }
+} \ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java
index 24a51a2d0cc9..66f4e0701b4b 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/methodRef/Varargs.java
@@ -22,7 +22,7 @@ class MyTest1 {
I i2 = MyTest1 :: m2;
i2.m(42,42);
- <error descr="Incompatible types. Found: '<method reference>', required: 'MyTest1.I'">I i3 = MyTest1 :: m3;</error>
+ I i3 = MyTest1 :: m3;
}
}
diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/recompileTwinDependencies.log b/java/java-tests/testData/compileServer/incremental/markDirty/recompileTwinDependencies.log
index 1c40adc4f7fb..4badc88cf13a 100644
--- a/java/java-tests/testData/compileServer/incremental/markDirty/recompileTwinDependencies.log
+++ b/java/java-tests/testData/compileServer/incremental/markDirty/recompileTwinDependencies.log
@@ -8,9 +8,3 @@ Compiling files:
src/package2/A.java
src/package2/C.java
End of files
-Cleaning output files:
-out/production/RecompileTwinDependencies/com/B.class
-End of files
-Compiling files:
-src/com/B.java
-End of files
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/empty.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/empty.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/subPack/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/subPack/empty.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src1/target/pack1/subPack/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src2/pack1/S2.java
new file mode 100644
index 000000000000..0bd2d2024dc6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/after/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/empty.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/subPack/Foo.java b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/subPack/Foo.java
new file mode 100644
index 000000000000..2f3c2eddba6f
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/pack1/subPack/Foo.java
@@ -0,0 +1,2 @@
+package pack1.subPack;
+public class Foo {} \ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/target/empty.txt b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/target/empty.txt
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src1/target/empty.txt
diff --git a/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src2/pack1/S2.java b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src2/pack1/S2.java
new file mode 100644
index 000000000000..0bd2d2024dc6
--- /dev/null
+++ b/java/java-tests/testData/refactoring/movePackageAsDir/emptySubDirs/before/src2/pack1/S2.java
@@ -0,0 +1,3 @@
+package pack1;
+
+public class S2{}
diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionSameSignature.java b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionSameSignature.java
new file mode 100644
index 000000000000..28dedc70c208
--- /dev/null
+++ b/java/java-tests/testData/refactoring/renameCollisions/RenameMethodCollisionSameSignature.java
@@ -0,0 +1,7 @@
+class RenameTest<T> {
+ void f<caret>oo(T t) {
+ }
+
+ void foo1(Object t) {
+ }
+} \ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java
index b35c8ff68061..dcac1068a631 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java
@@ -199,7 +199,31 @@ public class AdvHighlightingJdk7Test extends DaemonAnalyzerTestCase {
doTestAmbiguous();
}
+ public void testAmbiguousIDEA67864() throws Exception {
+ doTestAmbiguous();
+ }
+
+ public void testAmbiguousIDEA67836() throws Exception {
+ doTestAmbiguous();
+ }
+
+ public void testAmbiguousIDEA67576() throws Exception {
+ doTestAmbiguous();
+ }
+
+ public void testAmbiguousIDEA67519() throws Exception {
+ doTestAmbiguous();
+ }
+
+ public void testAmbiguousIDEA57569() throws Exception {
+ doTestAmbiguous();
+ }
+
public void testAmbiguousMethodsFromSameClassAccess() throws Exception {
doTestAmbiguous();
}
+
+ public void testAmbiguousIDEA57633() throws Exception {
+ doTestAmbiguous();
+ }
}
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 efc253f27847..3fef647dbaa3 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
@@ -310,6 +310,9 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testIDEA57439() { doTest5(false); }
public void testIDEA57312() { doTest5(false); }
public void testIDEA67865() { doTest5(false); }
+ public void testBoxingSpecific() { doTest5(false); }
+ public void testIDEA67843() { doTest5(false); }
+ public void testAmbiguousTypeParamVsConcrete() { doTest5(false); }
public void testJavaUtilCollections_NoVerify() throws Exception {
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java
index 589f935ec34d..01b8604f0e0a 100644
--- a/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java
+++ b/java/java-tests/testSrc/com/intellij/refactoring/MovePackageAsDirectoryTest.java
@@ -22,10 +22,8 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileAdapter;
import com.intellij.openapi.vfs.VirtualFileEvent;
import com.intellij.openapi.vfs.VirtualFileManager;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiDirectory;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiPackage;
+import com.intellij.psi.*;
+import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.move.moveClassesOrPackages.MoveDirectoryWithClassesProcessor;
import com.intellij.testFramework.PsiTestUtil;
import junit.framework.Assert;
@@ -80,10 +78,10 @@ public class MovePackageAsDirectoryTest extends MultiFileTestCase {
doTest(createAction("pack1", "target"));
}
+ private static final String EMPTY_TXT = "empty.txt";
public void testXmlEmptyDirRefs() throws Exception {
final String packageName = "pack1";
doTest(new MyPerformAction(packageName, "target"){
- private static final String EMPTY_TXT = "empty.txt";
@Override
protected void preprocessSrcDir(PsiDirectory srcDirectory) {
final PsiFile empty = srcDirectory.findFile(EMPTY_TXT);
@@ -108,6 +106,36 @@ public class MovePackageAsDirectoryTest extends MultiFileTestCase {
});
}
+ public void testEmptySubDirs() throws Exception {
+ final String packageName = "pack1";
+ doTest(new MyPerformAction(packageName, "target"){
+ private static final String FOO = "pack1.subPack.Foo";
+ @Override
+ protected void preprocessSrcDir(PsiDirectory srcDirectory) {
+ final PsiClass empty = JavaPsiFacade.getInstance(getProject()).findClass(FOO, GlobalSearchScope.projectScope(getProject()));
+ assert empty != null;
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ public void run() {
+ empty.delete();
+ }
+ });
+ }
+
+ @Override
+ protected void postProcessTargetDir(PsiDirectory targetDirectory) {
+ final PsiDirectory subdirectory = targetDirectory.findSubdirectory(packageName);
+ assert subdirectory != null;
+ final PsiDirectory emptyDir = subdirectory.findSubdirectory("subPack");
+ assert emptyDir != null;
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ public void run() {
+ emptyDir.createFile(EMPTY_TXT);
+ }
+ });
+ }
+ });
+ }
+
private PerformAction createAction(final String packageName, final String targetPackageName) {
return new MyPerformAction(packageName, targetPackageName);
}
diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java
index 5fe6fbe06a68..2caa921ab3fc 100644
--- a/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java
+++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java
@@ -167,6 +167,17 @@ public class RenameCollisionsTest extends LightRefactoringTestCase {
fail("Conflicts were not found");
}
+ public void testRenameMethodCollisionSameSignature() throws Exception {
+ try {
+ doTest("foo1");
+ }
+ catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
+ Assert.assertEquals("Method with same erasure is already defined in the class <b><code>RenameTest</code></b>.", e.getMessage());
+ return;
+ }
+ fail("Conflicts were not found");
+ }
+
public void testRenameMethodNoCollisionWithOtherSignature() throws Exception {
doTest("foo2");
}
diff --git a/java/openapi/src/com/intellij/codeInsight/ContainerProvider.java b/java/openapi/src/com/intellij/codeInsight/ContainerProvider.java
deleted file mode 100644
index 63f1a42aed0b..000000000000
--- a/java/openapi/src/com/intellij/codeInsight/ContainerProvider.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2000-2012 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.codeInsight;
-
-import com.intellij.openapi.extensions.ExtensionPointName;
-import com.intellij.psi.PsiElement;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @author Max Medvedev
- */
-public interface ContainerProvider {
- ExtensionPointName<ContainerProvider> EP_NAME = ExtensionPointName.create("com.intellij.codeInsight.containerProvider");
-
- @Nullable
- PsiElement getContainer(@NotNull PsiElement item);
-}