From 4b9f5eee44a3c6f9bf1b7c668b2f489d2ff68e9e Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 13 Mar 2018 18:57:59 +0100 Subject: [PATCH] remap types according to the current place (IDEA-187378) --- .../daemon/impl/analysis/GenericsHighlightUtil.java | 8 +++----- .../multipleJdks/java3/p/DependsOnNewerJdk.java | 8 ++++++++ .../multipleJdks/java7/p/DependsOnNewerJdk.java | 5 +++++ .../java/codeInsight/MultipleJdksHighlightingTest.java | 9 +++++++++ 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/multipleJdks/java3/p/DependsOnNewerJdk.java create mode 100644 java/java-tests/testData/codeInsight/multipleJdks/java7/p/DependsOnNewerJdk.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 91825d973e76..7e3a4388451f 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -28,8 +28,6 @@ import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.*; import com.intellij.util.ArrayUtilRt; import com.intellij.util.containers.ContainerUtil; -import java.util.HashMap; -import java.util.HashSet; import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -1487,10 +1485,10 @@ public class GenericsHighlightUtil { final PsiSubstitutor substitutor = resolveResult.getSubstitutor(); final GlobalSearchScope resolveScope = ref.getResolveScope(); - message = isTypeAccessible(substitutor.substitute(method.getReturnType()), classes, false, resolveScope, facade); + message = isTypeAccessible(PsiClassImplUtil.correctType(substitutor.substitute(method.getReturnType()), resolveScope), classes, false, resolveScope, facade); if (message == null) { for (PsiType type : method.getSignature(substitutor).getParameterTypes()) { - message = isTypeAccessible(type, classes, false, resolveScope, facade); + message = isTypeAccessible(PsiClassImplUtil.correctType(type, resolveScope), classes, false, resolveScope, facade); if (message != null) { break; } @@ -1503,7 +1501,7 @@ public class GenericsHighlightUtil { if (resolve instanceof PsiField) { final GlobalSearchScope resolveScope = ref.getResolveScope(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(ref.getProject()); - message = isTypeAccessible(((PsiField)resolve).getType(), new HashSet<>(), false, resolveScope, facade); + message = isTypeAccessible(PsiClassImplUtil.correctType(((PsiField)resolve).getType(), resolveScope), new HashSet<>(), false, resolveScope, facade); } } diff --git a/java/java-tests/testData/codeInsight/multipleJdks/java3/p/DependsOnNewerJdk.java b/java/java-tests/testData/codeInsight/multipleJdks/java3/p/DependsOnNewerJdk.java new file mode 100644 index 000000000000..660f6a84d317 --- /dev/null +++ b/java/java-tests/testData/codeInsight/multipleJdks/java3/p/DependsOnNewerJdk.java @@ -0,0 +1,8 @@ +package p; + + +class Class1 { + void f(I i) { + java.io.ObjectInput input = i.get(); + } +} diff --git a/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DependsOnNewerJdk.java b/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DependsOnNewerJdk.java new file mode 100644 index 000000000000..6729dc8bcf7f --- /dev/null +++ b/java/java-tests/testData/codeInsight/multipleJdks/java7/p/DependsOnNewerJdk.java @@ -0,0 +1,5 @@ +package p; + +interface I { + java.io.ObjectInput get(); +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java index 784d79cb8031..acab5fbb9438 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/MultipleJdksHighlightingTest.java @@ -186,6 +186,15 @@ public class MultipleJdksHighlightingTest extends UsefulTestCase { myFixture.checkHighlighting(); } + public void testDependsOnNewerJdk() { + IdeaTestUtil.setModuleLanguageLevel(myJava7Module, LanguageLevel.JDK_1_7); + ModuleRootModificationUtil.addDependency(myJava3Module, myJava7Module); + final String name = getTestName(false); + myFixture.copyFileToProject("java7/p/" + name + ".java"); + myFixture.configureByFiles("java3/p/" + name + ".java"); + myFixture.checkHighlighting(); + } + public void testMissedAutoCloseable() { IdeaTestUtil.setModuleLanguageLevel(myJava7Module, LanguageLevel.JDK_1_7); ModuleRootModificationUtil.addDependency(myJava3Module, myJava7Module);