mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] completion in modular projects (IDEA-193531)
Excludes type parameters from module accessibility checks, and makes JPMS implementation use target's original when looking for its module.
This commit is contained in:
@@ -30,10 +30,10 @@ class JavaPlatformModuleSystem : JavaModuleSystemEx {
|
||||
override fun getName(): String = "Java Platform Module System"
|
||||
|
||||
override fun isAccessible(targetPackageName: String, targetFile: PsiFile?, place: PsiElement): Boolean =
|
||||
checkAccess(targetPackageName, targetFile, place, quick = true) == null
|
||||
checkAccess(targetPackageName, targetFile?.originalFile, place, quick = true) == null
|
||||
|
||||
override fun checkAccess(targetPackageName: String, targetFile: PsiFile?, place: PsiElement): ErrorWithFixes? =
|
||||
checkAccess(targetPackageName, targetFile, place, quick = false)
|
||||
checkAccess(targetPackageName, targetFile?.originalFile, place, quick = false)
|
||||
|
||||
private fun checkAccess(targetPackageName: String, targetFile: PsiFile?, place: PsiElement, quick: Boolean): ErrorWithFixes? {
|
||||
val useFile = place.containingFile?.originalFile
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
|
||||
@Nullable PsiElement currentFileResolveScope) {
|
||||
PsiClass containingClass = member.getContainingClass();
|
||||
boolean accessible = JavaResolveUtil.isAccessible(member, containingClass, modifierList, place, accessObjectClass, currentFileResolveScope);
|
||||
if (accessible && member instanceof PsiClass) {
|
||||
if (accessible && member instanceof PsiClass && !(member instanceof PsiTypeParameter)) {
|
||||
accessible = isAccessible(moduleSystem -> moduleSystem.isAccessible(((PsiClass)member), place));
|
||||
}
|
||||
return accessible;
|
||||
|
||||
+9
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.java.codeInsight.completion
|
||||
|
||||
import com.intellij.java.testFramework.fixtures.LightJava9ModulesCodeInsightFixtureTestCase
|
||||
@@ -72,6 +72,14 @@ class ModuleCompletionTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
assertThat(myFixture.lookupElementStrings).containsExactly("*", "C2") // no 'C2Impl'
|
||||
}
|
||||
|
||||
fun testTypeParameter() {
|
||||
addFile("module-info.java", "module M { }")
|
||||
addTestFile("whatever/test.txt", "-")
|
||||
myFixture.configureByText("test.java", "package whatever;\nclass Foo<TParam> { TPar<caret> p; }")
|
||||
myFixture.completeBasic()
|
||||
myFixture.checkResult("package whatever;\nclass Foo<TParam> { TParam<caret> p; }")
|
||||
}
|
||||
|
||||
//<editor-fold desc="Helpers.">
|
||||
private fun complete(text: String, expected: String) {
|
||||
myFixture.configureByText("module-info.java", text)
|
||||
|
||||
Reference in New Issue
Block a user