Fix error message about unsupported annotations on type parameters

#KT-48908 Fixed
This commit is contained in:
Mikhail Glukhikh
2022-01-10 19:02:17 +03:00
parent 230f210a2a
commit 1402bb2d45
5 changed files with 22 additions and 13 deletions
@@ -59,7 +59,7 @@ object DebugInfoUtil {
markedWithErrorElements[superExpression.instanceReference] = factory
} else if (factory === Errors.EXPRESSION_EXPECTED_PACKAGE_FOUND) {
markedWithErrorElements[diagnostic.psiElement as KtSimpleNameExpression] = factory
} else if (factory === Errors.UNSUPPORTED) {
} else if (factory === Errors.UNSUPPORTED || factory === Errors.UNSUPPORTED_FEATURE) {
for (reference in PsiTreeUtil.findChildrenOfType(
diagnostic.psiElement,
KtReferenceExpression::class.java
@@ -17,9 +17,12 @@
package org.jetbrains.kotlin.resolve;
import com.intellij.psi.util.PsiTreeUtil;
import kotlin.Pair;
import kotlin.collections.CollectionsKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.config.LanguageVersionSettings;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget;
@@ -168,12 +171,18 @@ public class AnnotationResolverImpl extends AnnotationResolver {
);
}
public static void reportUnsupportedAnnotationForTypeParameter(@NotNull KtTypeParameter jetTypeParameter, @NotNull BindingTrace trace) {
public static void reportUnsupportedAnnotationForTypeParameter(
@NotNull KtTypeParameter jetTypeParameter,
@NotNull BindingTrace trace,
@NotNull LanguageVersionSettings languageVersionSettings
) {
KtModifierList modifierList = jetTypeParameter.getModifierList();
if (modifierList == null) return;
for (KtAnnotationEntry annotationEntry : modifierList.getAnnotationEntries()) {
trace.report(Errors.UNSUPPORTED.on(annotationEntry, "Annotations for type parameters are not supported yet"));
trace.report(Errors.UNSUPPORTED_FEATURE.on(
annotationEntry, new Pair<>(LanguageFeature.ClassTypeParameterAnnotations, languageVersionSettings)
));
}
}
@@ -517,7 +517,7 @@ class DeclarationsChecker(
private fun checkTypeParameters(typeParameterListOwner: KtTypeParameterListOwner) {
for (jetTypeParameter in typeParameterListOwner.typeParameters) {
if (!languageVersionSettings.supportsFeature(LanguageFeature.ClassTypeParameterAnnotations)) {
AnnotationResolverImpl.reportUnsupportedAnnotationForTypeParameter(jetTypeParameter, trace)
AnnotationResolverImpl.reportUnsupportedAnnotationForTypeParameter(jetTypeParameter, trace, languageVersionSettings)
}
trace.get(TYPE_PARAMETER, jetTypeParameter)?.let { DescriptorResolver.checkConflictingUpperBounds(trace, it, jetTypeParameter) }
@@ -5,10 +5,10 @@ annotation class A1
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class A2(val some: Int = 12)
class TopLevelClass<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
class InnerClass<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
class TopLevelClass<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
class InnerClass<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
fun test() {
class InFun<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T>
class InFun<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T>
}
}
}
@@ -9,18 +9,18 @@ annotation class TA1
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class TA2(val some: Int = 12)
class TopLevelClass<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
class InnerClass<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
class TopLevelClass<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
class InnerClass<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T> {
fun test() {
class InFun<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T>
class InFun<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@A2("Test")<!> T>
}
}
}
class TTopLevelClass<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2("Test")<!> T> {
class TInnerClass<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2("Test")<!> T> {
class TTopLevelClass<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2("Test")<!> T> {
class TInnerClass<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2("Test")<!> T> {
fun test() {
class TInFun<<!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA1<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2(3)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA1(12)<!> <!UNSUPPORTED, WRONG_ANNOTATION_TARGET!>@TA2("Test")<!> T>
class TInFun<<!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA1<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2(3)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA1(12)<!> <!UNSUPPORTED_FEATURE, WRONG_ANNOTATION_TARGET!>@TA2("Test")<!> T>
}
}
}