mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[java-highlighting] IDEA-363617 Support JEP 494: Module Import Declarations (Second Preview)
- support transitive for dependencies on 'java.base' module (cherry picked from commit a364934e96592ae3a8244ae68b2fb5372e7f5a30) GitOrigin-RevId: 6bffa2d03645e77537d70cd4d9d081dec80680af
This commit is contained in:
committed by
intellij-monorepo-bot
parent
aea70bba3b
commit
6113015d06
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.Trinity;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.JavaFeature;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.PsiPackageAccessibilityStatement.Role;
|
||||
import com.intellij.psi.impl.IncompleteModelUtil;
|
||||
@@ -41,6 +42,8 @@ import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.intellij.psi.JavaTokenType.TRANSITIVE_KEYWORD;
|
||||
|
||||
// generates HighlightInfoType.ERROR-like HighlightInfos for modularity-related (Jigsaw) problems
|
||||
final class ModuleHighlightUtil {
|
||||
static HighlightInfo.Builder checkPackageStatement(@NotNull PsiPackageStatement statement, @NotNull PsiFile file, @Nullable PsiJavaModule javaModule) {
|
||||
@@ -489,7 +492,11 @@ final class ModuleHighlightUtil {
|
||||
static void checkModifiers(@NotNull PsiRequiresStatement statement, @NotNull Consumer<? super HighlightInfo.Builder> errorSink) {
|
||||
PsiModifierList modList = statement.getModifierList();
|
||||
if (modList != null && PsiJavaModule.JAVA_BASE.equals(statement.getModuleName())) {
|
||||
boolean transitiveAvailable = PsiUtil.isAvailable(JavaFeature.TRANSITIVE_DEPENDENCY_ON_JAVA_BASE, statement);
|
||||
PsiTreeUtil.processElements(modList, PsiKeyword.class, keyword -> {
|
||||
if (keyword.getTokenType() == TRANSITIVE_KEYWORD && transitiveAvailable) {
|
||||
return true;
|
||||
}
|
||||
@PsiModifier.ModifierConstant String modifier = keyword.getText();
|
||||
String message = JavaErrorBundle.message("modifier.not.allowed", modifier);
|
||||
HighlightInfo.Builder info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(keyword).descriptionAndTooltip(message);
|
||||
|
||||
@@ -124,6 +124,7 @@ feature.virtual.threads=Virtual Threads
|
||||
feature.statements.before.super=Statements before super()
|
||||
feature.module.import.declarations=Module Import Declarations
|
||||
feature.package.import.shadow.module.import=Import-on-demand over module import
|
||||
feature.package.transitive.dependency.on.java.base=Transitive dependency on java.base module
|
||||
|
||||
else.without.if='else' without 'if'
|
||||
enum.constant.context=Enum constant ''{0}'' in ''{1}''
|
||||
|
||||
@@ -117,9 +117,10 @@ public enum JavaFeature {
|
||||
IMPLICIT_IMPORT_IN_IMPLICIT_CLASSES(LanguageLevel.JDK_23_PREVIEW, "feature.implicit.import.in.implicit.classes"),
|
||||
PRIMITIVE_TYPES_IN_PATTERNS(LanguageLevel.JDK_23_PREVIEW, "feature.primitive.types.in.patterns"),
|
||||
|
||||
//see together with PACKAGE_IMPORTS_SHADOW_MODULE_IMPORTS
|
||||
//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"),
|
||||
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"),
|
||||
;
|
||||
|
||||
private final @NotNull LanguageLevel myLevel;
|
||||
|
||||
@@ -4,8 +4,10 @@ package com.intellij.java.codeInsight.daemon
|
||||
import com.intellij.JavaTestUtil
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil
|
||||
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction
|
||||
import com.intellij.pom.java.JavaFeature
|
||||
import com.intellij.psi.CommonClassNames
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.Assert
|
||||
@@ -60,6 +62,16 @@ class LightJava11HighlightingTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
myFixture.checkHighlighting()
|
||||
}
|
||||
|
||||
fun testRequiresTransitiveJavaBase() {
|
||||
IdeaTestUtil.withLevel(module, JavaFeature.TRANSITIVE_DEPENDENCY_ON_JAVA_BASE.minimumLevel){
|
||||
myFixture.configureByText("module-info.java", """
|
||||
module M {
|
||||
requires <error descr="Modifier 'static' not allowed here">static</error> transitive java.base;
|
||||
}""".trimIndent())
|
||||
myFixture.checkHighlighting()
|
||||
}
|
||||
}
|
||||
|
||||
private fun doTest() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java")
|
||||
myFixture.checkHighlighting()
|
||||
|
||||
Reference in New Issue
Block a user