[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:
Mikhail Pyltsin
2024-12-04 15:31:31 +01:00
committed by intellij-monorepo-bot
parent aea70bba3b
commit 6113015d06
4 changed files with 22 additions and 1 deletions

View File

@@ -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);