diff --git a/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java b/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java index 5ab4cf678da7..ba88fcba0696 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java @@ -64,7 +64,8 @@ public class PsiCapturedWildcardType extends PsiType.Stub { } final PsiCapturedWildcardType captured = (PsiCapturedWildcardType)o; - if (!myContext.equals(captured.myContext)) { + final PsiManager manager = myContext.getManager(); + if (!manager.areElementsEquivalent(myContext, captured.myContext)) { return false; } @@ -72,7 +73,8 @@ public class PsiCapturedWildcardType extends PsiType.Stub { return false; } - if ((myContext instanceof PsiReferenceExpression || myContext instanceof PsiMethodCallExpression) && !Comparing.equal(myParameter, captured.myParameter)) { + if ((myContext instanceof PsiReferenceExpression || myContext instanceof PsiMethodCallExpression) && + !manager.areElementsEquivalent(myParameter, captured.myParameter)) { return false; } diff --git a/java/java-tests/testData/codeInsight/clsHighlighting/libs/CaptureContext-sources.jar b/java/java-tests/testData/codeInsight/clsHighlighting/libs/CaptureContext-sources.jar new file mode 100644 index 000000000000..f4c861ecfe45 Binary files /dev/null and b/java/java-tests/testData/codeInsight/clsHighlighting/libs/CaptureContext-sources.jar differ diff --git a/java/java-tests/testData/codeInsight/clsHighlighting/libs/CaptureContext.jar b/java/java-tests/testData/codeInsight/clsHighlighting/libs/CaptureContext.jar new file mode 100644 index 000000000000..b9c545ae08e5 Binary files /dev/null and b/java/java-tests/testData/codeInsight/clsHighlighting/libs/CaptureContext.jar differ diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java index 8383550b3e5c..55741e1f36a5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenerics18HighlightingTest.java @@ -15,13 +15,33 @@ */ package com.intellij.codeInsight; +import com.intellij.openapi.project.Project; import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.impl.source.PsiFileImpl; +import com.intellij.psi.search.GlobalSearchScope; public class ClsGenerics18HighlightingTest extends ClsGenericsHighlightingTest { public void testIDEA121866() { doTest(); } public void testIDEA127714() { doTest(); } + public void testCaptureContext() { + String name = getTestName(false); + addLibrary(name + ".jar", name + "-sources.jar"); + Project project = myFixture.getProject(); + PsiClass aClass = JavaPsiFacade.getInstance(project).findClass("a.Pair", GlobalSearchScope.allScope(project)); + assertNotNull(aClass); + PsiFile containingFile = aClass.getContainingFile(); + PsiElement navigationElement = containingFile.getNavigationElement(); + assertInstanceOf(navigationElement, PsiFileImpl.class); + myFixture.openFileInEditor(((PsiFile)navigationElement).getVirtualFile()); + myFixture.checkHighlighting(); + } + @Override protected LanguageLevel getLanguageLevel() { return LanguageLevel.JDK_1_8; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenericsHighlightingTest.java index b656156df36f..fb0027867dc5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/ClsGenericsHighlightingTest.java @@ -29,6 +29,7 @@ import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.testFramework.IdeaTestCase; +import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; import com.intellij.testFramework.fixtures.*; @@ -36,7 +37,7 @@ import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; public abstract class ClsGenericsHighlightingTest extends UsefulTestCase { - private CodeInsightTestFixture myFixture; + protected CodeInsightTestFixture myFixture; private Module myModule; @Override @@ -47,6 +48,7 @@ public abstract class ClsGenericsHighlightingTest extends UsefulTestCase { myFixture.setTestDataPath(PathManagerEx.getTestDataPath() + "/codeInsight/clsHighlighting"); JavaModuleFixtureBuilder builder = projectBuilder.addModule(JavaModuleFixtureBuilder.class); builder.setLanguageLevel(getLanguageLevel()); + builder.addJdk(IdeaTestUtil.getMockJdk18Path().getPath()); myFixture.setUp(); myModule = builder.getFixture().getModule(); } @@ -72,7 +74,7 @@ public abstract class ClsGenericsHighlightingTest extends UsefulTestCase { myFixture.checkHighlighting(); } - private void addLibrary(@NotNull final String... libraryPath) { + protected void addLibrary(@NotNull final String... libraryPath) { ModuleRootModificationUtil.updateModel(myModule, new Consumer() { @Override public void consume(ModifiableRootModel model) { @@ -95,7 +97,8 @@ public abstract class ClsGenericsHighlightingTest extends UsefulTestCase { assertNotNull(libJarLocal); VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(libJarLocal); assertNotNull(jarRoot); - libraryModel.addRoot(jarRoot, OrderRootType.CLASSES); + libraryModel.addRoot(jarRoot, jarRoot.getName().contains("-sources") ? OrderRootType.SOURCES + : OrderRootType.CLASSES); } libraryModel.commit(); }