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 1602daa653e1..bd702c64f57a 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 @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; @@ -123,7 +124,11 @@ public final class PsiUtil extends PsiUtilCore { if (type instanceof PsiCapturedWildcardType) { final PsiType upperBound = ((PsiCapturedWildcardType)type).getUpperBound(); if (upperBound instanceof PsiClassType) { - String classText = "class I {}"; + final PsiClass resolved = ((PsiClassType)upperBound).resolve(); + final PsiFile containingFile = resolved != null ? resolved.getContainingFile() : null; + final String packageName = containingFile instanceof PsiClassOwner ? ((PsiClassOwner)containingFile).getPackageName() : null; + String classText = StringUtil.isEmptyOrSpaces(packageName) ? "" : "package " +packageName + ";\n "; + classText += "class I {}"; final PsiJavaFile file = (PsiJavaFile)PsiFileFactory.getInstance(expression.getProject()).createFileFromText("inference_dummy.java", JavaLanguage.INSTANCE, classText); final PsiTypeParameter freshParameter = file.getClasses()[0].getTypeParameters()[0]; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CapturedWildcardPackageLocalAccess.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CapturedWildcardPackageLocalAccess.java new file mode 100644 index 000000000000..edea5438c654 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/CapturedWildcardPackageLocalAccess.java @@ -0,0 +1,8 @@ +import java.util.Map; + +class Test { + void f() {} + void m(Map map, String name) { + map.get(name).f(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java index 5b7d17ee603c..ae6977d8a644 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java @@ -966,4 +966,8 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase { public void testCapturedWildcardWithPrimitiveTypesChecks() throws Exception { doTest(); } + + public void testCapturedWildcardPackageLocalAccess() throws Exception { + doTest(); + } }