From 0fc08dae0c5730c59f002dc2de3449349f93971b Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 2 Apr 2024 15:49:43 +0200 Subject: [PATCH] [java] better error message when permits list not allowed (IDEA-350501) GitOrigin-RevId: 93cc9241dd77e12df1baeda1d06538f3159a6e59 --- .../daemon/impl/analysis/HighlightClassUtil.java | 10 +++++----- .../resources/messages/JavaErrorBundle.properties | 6 +++--- .../advHighlightingRecords/RecordBasics.java | 2 +- .../advHighlightingSealedTypes/PermitsList.java | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java index 938bb451f80a..a145dc39ecef 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java @@ -1211,12 +1211,12 @@ public final class HighlightClassUtil { PsiIdentifier nameIdentifier = aClass.getNameIdentifier(); if (nameIdentifier == null) return; if (aClass.isEnum() || aClass.isRecord() || aClass.isAnnotationType()) { - String description = aClass.isEnum() ? JavaErrorBundle.message("permits.after.enum") : null; - if (description == null) { - description = JavaErrorBundle.message(aClass.isRecord() ? "record.permits" : "annotation.type.permits"); - } + String description; + if (aClass.isEnum()) description = JavaErrorBundle.message("permits.after.enum"); + else if (aClass.isRecord()) description = JavaErrorBundle.message("record.permits"); + else description = JavaErrorBundle.message("annotation.type.permits"); HighlightInfo.Builder builder = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR) - .range(list) + .range(list.getFirstChild()) .descriptionAndTooltip(description); IntentionAction action = QuickFixFactory.getInstance().createDeleteFix(list); builder.registerFix(action, null, null, null, null); diff --git a/java/java-psi-impl/resources/messages/JavaErrorBundle.properties b/java/java-psi-impl/resources/messages/JavaErrorBundle.properties index 36d5018e2529..e2be9b3a177e 100644 --- a/java/java-psi-impl/resources/messages/JavaErrorBundle.properties +++ b/java/java-psi-impl/resources/messages/JavaErrorBundle.properties @@ -104,7 +104,7 @@ no.interface.expected=No interface expected here class.expected=Class name expected here implements.after.interface=No implements clause allowed for interface extends.after.enum=No extends clause allowed for enum -permits.after.enum=No permits clause allowed for enum +permits.after.enum='permits' not allowed on enum class.must.be.abstract=Class ''{0}'' must either be declared abstract or implement abstract method ''{1}'' in ''{2}'' enum.constant.must.implement.method=Enum constant ''{0}'' must implement abstract method ''{1}'' in ''{2}'' class.must.implement.method=Class ''{0}'' must implement abstract method ''{1}'' in ''{2}'' @@ -514,7 +514,7 @@ record.accessor=Record component accessor record.component.not.initialized=Record component ''{0}'' might not be initialized in canonical constructor compact.constructor.in.regular.class=Parameter list expected record.compact.constructor.return='return' statement is not allowed in compact constructor -record.permits=No permits clause allowed for record +record.permits='permits' not allowed on record insufficient.language.level={0} are not supported at language level ''{1}'' @@ -583,7 +583,7 @@ text.improper.formed.type=Improper formed type; some type parameters are missing text.class.is.not.accessible={0} is not accessible in current context text.class.cannot.access=Cannot access {0} auto.closeable.resource=auto-closeable resource -annotation.type.permits=No permits clause allowed for annotation type +annotation.type.permits='permits' not allowed on @interface too.many.array.dimensions=Too many array dimensions error.cannot.infer.pattern.type=Cannot infer pattern type: {0} error.extra.semicolons.between.import.statements.not.allowed=Extra semicolons between import statements are not allowed diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/RecordBasics.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/RecordBasics.java index 7c86810fc2fc..bbc3ba7629e3 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/RecordBasics.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingRecords/RecordBasics.java @@ -9,7 +9,7 @@ class ClassWithComponents(i class ClassWithComponents2(int x, int y) {} abstract record AbstractRecord() {} record ExtendsObject() extends Object {} -record PermitsObject() permits Object {} +record PermitsObject() permits Object {} class ExtendsRecord extends NoComponents {} abstract class ExtendsJLR extends Record {} class AnonymousExtendsJLR { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingSealedTypes/PermitsList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingSealedTypes/PermitsList.java index c46b4dc346dc..1123c5bfa7f8 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingSealedTypes/PermitsList.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingSealedTypes/PermitsList.java @@ -19,7 +19,7 @@ final class IndirectInheritor implements MiddleMan {} sealed class AnotherPackage permits p1.P1 {} -enum ImlicitlySealedWithPermitsClause permits FOO { +enum ImlicitlySealedWithPermitsClause permits FOO { FOO {}; } @@ -27,4 +27,4 @@ sealed class Parent permits TypedChildpermits I {} \ No newline at end of file +@interface AnnotationType permits I {} \ No newline at end of file