From f8346d21c222e2dcf58557533a547c65460845a8 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 28 Jun 2017 01:47:15 +0300 Subject: [PATCH] Check type alias expansion for Java 9 module accessibility #KT-18598 In Progress --- .../checkers/JvmModuleAccessibilityChecker.kt | 22 +++++++++++++------ .../dependency/exported/exported.kt | 6 +++++ .../dependency/module-info.java | 3 +++ .../dependency/unexported/unexported.kt | 3 +++ .../main/module-info.java | 3 +++ .../java9/typealiasToUnexported/main/usage.kt | 4 ++++ .../Java9MultiModuleHighlightingTest.kt | 5 +++++ 7 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/exported/exported.kt create mode 100644 idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/module-info.java create mode 100644 idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/unexported/unexported.kt create mode 100644 idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/module-info.java create mode 100644 idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/usage.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmModuleAccessibilityChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmModuleAccessibilityChecker.kt index 18db6ddec62..e67480d9c1a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmModuleAccessibilityChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmModuleAccessibilityChecker.kt @@ -117,15 +117,23 @@ class JvmModuleAccessibilityChecker(project: Project) : CallChecker { element: PsiElement, languageVersionSettings: LanguageVersionSettings ) { - val targetClassOrPackage = when (targetDescriptor) { - is ClassDescriptor -> targetDescriptor - is TypeAliasDescriptor -> { - DescriptorUtils.getParentOfType(targetDescriptor, ClassOrPackageFragmentDescriptor::class.java) ?: return + val virtualFile = element.containingFile.virtualFile + when (targetDescriptor) { + is ClassDescriptor -> { + diagnosticFor(targetDescriptor, targetDescriptor, virtualFile, element)?.let(trace::report) } - else -> return - } + is TypeAliasDescriptor -> { + val containingClassOrPackage = DescriptorUtils.getParentOfType(targetDescriptor, ClassOrPackageFragmentDescriptor::class.java) + if (containingClassOrPackage != null) { + diagnosticFor(containingClassOrPackage, targetDescriptor, virtualFile, element)?.let(trace::report) + } - diagnosticFor(targetClassOrPackage, targetDescriptor, element.containingFile.virtualFile, element)?.let(trace::report) + val expandedClass = targetDescriptor.expandedType.constructor.declarationDescriptor as? ClassDescriptor + if (expandedClass != null) { + diagnosticFor(expandedClass, expandedClass, virtualFile, element)?.let(trace::report) + } + } + } } } } diff --git a/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/exported/exported.kt b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/exported/exported.kt new file mode 100644 index 00000000000..e6b35c3d93f --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/exported/exported.kt @@ -0,0 +1,6 @@ +package exported + +import unexported.* + +typealias AliasToUnexported = Unexported +typealias AliasToListOfUnexported = List diff --git a/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/module-info.java b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/module-info.java new file mode 100644 index 00000000000..0ad4ac81f93 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/module-info.java @@ -0,0 +1,3 @@ +module dependency { + exports exported; +} diff --git a/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/unexported/unexported.kt b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/unexported/unexported.kt new file mode 100644 index 00000000000..8352236d369 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/dependency/unexported/unexported.kt @@ -0,0 +1,3 @@ +package unexported + +class Unexported diff --git a/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/module-info.java b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/module-info.java new file mode 100644 index 00000000000..d069dfb8d7a --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/module-info.java @@ -0,0 +1,3 @@ +module main { + requires dependency; +} diff --git a/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/usage.kt b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/usage.kt new file mode 100644 index 00000000000..a36610578c9 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/typealiasToUnexported/main/usage.kt @@ -0,0 +1,4 @@ +import exported.* + +fun f1(): AliasToUnexported? = null +fun f2(): AliasToListOfUnexported? = null diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt index d1d95e50fff..8b8b53c3f6e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt @@ -78,4 +78,9 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module("main").addDependency(module("dependency")) checkHighlightingInAllFiles() } + + fun testTypealiasToUnexported() = doTest { + module("main").addDependency(module("dependency")) + checkHighlightingInAllFiles() + } }