mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
[java-highlighting] WIP IDEA-372968 Support JEP 511: Module Import Declarations
- nothing changed in jep, more tests (cherry picked from commit 03e655a19855acdfe1f7983b25c6aa7158b73393) (cherry picked from commit fab1d353a464fd4585aa86ef7fe7595f01793aa5) IJ-MR-169535 GitOrigin-RevId: 1c0782d7c341c0f9e2ff1b3704f13e5e94dadcb7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
88d9028b60
commit
2111b032dc
@@ -129,16 +129,36 @@ enum class JavaFeature {
|
||||
//JEP 507
|
||||
PRIMITIVE_TYPES_IN_PATTERNS(LanguageLevel.JDK_23_PREVIEW, "feature.primitive.types.in.patterns"),
|
||||
|
||||
//see together with PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS and TRANSITIVE_DEPENDENCY_ON_JAVA_BASE
|
||||
MODULE_IMPORT_DECLARATIONS(LanguageLevel.JDK_23_PREVIEW, "feature.module.import.declarations"),
|
||||
//JEP 511 see together with PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS and TRANSITIVE_DEPENDENCY_ON_JAVA_BASE
|
||||
MODULE_IMPORT_DECLARATIONS(LanguageLevel.JDK_25, "feature.module.import.declarations") {
|
||||
override fun isSufficient(useSiteLevel: LanguageLevel): Boolean {
|
||||
return super.isSufficient(useSiteLevel) ||
|
||||
LanguageLevel.JDK_23_PREVIEW == useSiteLevel ||
|
||||
LanguageLevel.JDK_24_PREVIEW == useSiteLevel
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Usually, this type of comments is shown as Javadoc despite language level.
|
||||
* This option can be used only to adjust behavior for cases with conflicts between different types of comments (markdown and old-style)
|
||||
*/
|
||||
MARKDOWN_COMMENT(LanguageLevel.JDK_23, "feature.markdown.comment"),
|
||||
PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS(LanguageLevel.JDK_24_PREVIEW, "feature.package.import.shadow.module.import"),
|
||||
TRANSITIVE_DEPENDENCY_ON_JAVA_BASE(LanguageLevel.JDK_24_PREVIEW, "feature.package.transitive.dependency.on.java.base"),
|
||||
|
||||
//JEP 511 see together with MODULE_IMPORT_DECLARATIONS and TRANSITIVE_DEPENDENCY_ON_JAVA_BASE
|
||||
PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS(LanguageLevel.JDK_25, "feature.package.import.shadow.module.import"){
|
||||
override fun isSufficient(useSiteLevel: LanguageLevel): Boolean {
|
||||
return super.isSufficient(useSiteLevel) ||
|
||||
LanguageLevel.JDK_24_PREVIEW == useSiteLevel
|
||||
}
|
||||
},
|
||||
|
||||
//JEP 511 see together with MODULE_IMPORT_DECLARATIONS and PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS
|
||||
TRANSITIVE_DEPENDENCY_ON_JAVA_BASE(LanguageLevel.JDK_25, "feature.package.transitive.dependency.on.java.base"){
|
||||
override fun isSufficient(useSiteLevel: LanguageLevel): Boolean {
|
||||
return super.isSufficient(useSiteLevel) ||
|
||||
LanguageLevel.JDK_24_PREVIEW == useSiteLevel
|
||||
}
|
||||
},
|
||||
|
||||
JAVA_LANG_IO(LanguageLevel.JDK_25, "feature.java.lang.io"),
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<error descr="Module Import Declarations are not supported at language level '24'">import module java.base;</error>
|
||||
import a.b.*;
|
||||
|
||||
class A{
|
||||
<error descr="Reference to 'List' is ambiguous, both 'a.b.List' and 'java.util.List' match">List</error> a;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import a.b.*;
|
||||
|
||||
List<caret> a;
|
||||
|
||||
void main() {
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import static a.b.Other.*;
|
||||
|
||||
List<caret> a;
|
||||
|
||||
void main() {
|
||||
}
|
||||
@@ -120,6 +120,23 @@ class ImplicitClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
})
|
||||
}
|
||||
|
||||
fun testImplicitWithStaticPackagesPackagesOverModule() {
|
||||
IdeaTestUtil.withLevel(module, JavaFeature.PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS.minimumLevel, Runnable {
|
||||
myFixture.addClass("""
|
||||
package a.b;
|
||||
|
||||
public class Other {
|
||||
public static class List {
|
||||
|
||||
}
|
||||
}""".trimIndent())
|
||||
val psiFile = myFixture.configureByFile(getTestName(false) + ".java")
|
||||
myFixture.checkHighlighting()
|
||||
val element = psiFile.findElementAt(myFixture.caretOffset)
|
||||
assertEquals("a.b.Other.List", element?.parentOfType<PsiField>()?.type.resolve()?.qualifiedName)
|
||||
})
|
||||
}
|
||||
|
||||
fun testImplicitWithPackagesPackagesOverModule() {
|
||||
IdeaTestUtil.withLevel(module, JavaFeature.PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS.minimumLevel, Runnable {
|
||||
myFixture.addClass("""
|
||||
@@ -135,6 +152,35 @@ class ImplicitClassHighlightingTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
})
|
||||
}
|
||||
|
||||
fun testImplicitWithPackagesPackagesOverModule25() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_25, Runnable {
|
||||
myFixture.addClass("""
|
||||
package a.b;
|
||||
|
||||
public final class List {
|
||||
}
|
||||
""".trimIndent())
|
||||
val psiFile = myFixture.configureByFile(getTestName(false) + ".java")
|
||||
myFixture.checkHighlighting()
|
||||
val element = psiFile.findElementAt(myFixture.caretOffset)
|
||||
assertEquals("a.b.List", element?.parentOfType<PsiField>()?.type.resolve()?.qualifiedName)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
fun testImplicitWithPackagesPackagesOverModule24() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_24, Runnable {
|
||||
myFixture.addClass("""
|
||||
package a.b;
|
||||
|
||||
public final class List {
|
||||
}
|
||||
""".trimIndent())
|
||||
myFixture.configureByFile(getTestName(false) + ".java")
|
||||
myFixture.checkHighlighting()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
fun testImplicitWithSingleImport() {
|
||||
IdeaTestUtil.withLevel(module, JavaFeature.PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS.minimumLevel, Runnable {
|
||||
|
||||
@@ -89,7 +89,7 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationLevelCheck() {
|
||||
fun testModuleImportDeclarationLevelCheck23() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_23) {
|
||||
highlight("Test.java", """
|
||||
<error descr="Module Import Declarations are not supported at language level '23'">import module java.sql;</error>
|
||||
@@ -98,6 +98,52 @@ class ModuleHighlightingTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationLevelCheck23Preview() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_23_PREVIEW) {
|
||||
highlight("Test.java", """
|
||||
import module java.base;
|
||||
class Test {}
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationLevelCheck24() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_24) {
|
||||
highlight("Test.java", """
|
||||
<error descr="Module Import Declarations are not supported at language level '24'">import module java.sql;</error>
|
||||
class Test {}
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationLevelCheck24Preview() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_24_PREVIEW) {
|
||||
highlight("Test.java", """
|
||||
import module java.base;
|
||||
class Test {}
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationLevelCheck25() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_25) {
|
||||
highlight("Test.java", """
|
||||
import module java.base;
|
||||
import module java.base;
|
||||
class Test {}
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationLevelCheck25Preview() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_25) {
|
||||
highlight("Test.java", """
|
||||
import module java.base;
|
||||
class Test {}
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
fun testModuleImportDeclarationInModuleInfoFile() {
|
||||
IdeaTestUtil.withLevel(module, LanguageLevel.JDK_23_PREVIEW) {
|
||||
highlight("module-info.java", """
|
||||
|
||||
Reference in New Issue
Block a user