IDEA-215432: UnstableApiUsage\ScheduledForRemoval inspections: check if containing declaration is marked with annotation

If a class is marked with @ApiStatus.Internal annotation, all its methods must be considered internal, even if invocation is performed via a subclass and no explicit reference onto a class exists.
If a package is marked with @ApiStatus.Internal, all its classes and their members must be considered internal.

GitOrigin-RevId: f8bcb2a91cf958b878cd45a58d4fed69297fd372
This commit is contained in:
Sergey Patrikeev
2019-06-24 17:19:28 +03:00
committed by intellij-monorepo-bot
parent fcac91fe5f
commit f04eaad9a2
7 changed files with 100 additions and 86 deletions

View File

@@ -3,6 +3,7 @@ package com.intellij.codeInspection
import com.intellij.analysis.JvmAnalysisBundle
import com.intellij.codeInsight.AnnotationUtil
import com.intellij.codeInspection.UnstableApiUsageInspection.Companion.findAnnotationOfItselfOrContainingDeclaration
import com.intellij.codeInspection.apiUsage.ApiUsageProcessor
import com.intellij.codeInspection.apiUsage.ApiUsageUastVisitor
import com.intellij.codeInspection.deprecation.DeprecationInspectionBase
@@ -37,14 +38,6 @@ private class ScheduledForRemovalApiUsageProcessor(
private companion object {
private val ANNOTATION_NAME = ApiStatus.ScheduledForRemoval::class.java.canonicalName
fun findScheduledForRemovalAnnotation(psiModifierListOwner: PsiModifierListOwner): PsiAnnotation? {
val ownAnnotation = AnnotationUtil.findAnnotation(psiModifierListOwner, listOf(ANNOTATION_NAME), false)
if (ownAnnotation != null) {
return ownAnnotation
}
return null
}
fun isLibraryElement(element: PsiElement): Boolean {
if (ApplicationManager.getApplication().isUnitTestMode) {
return true
@@ -81,7 +74,10 @@ private class ScheduledForRemovalApiUsageProcessor(
if (!isLibraryElement(target)) {
return
}
val scheduledForRemovalAnnotation = findScheduledForRemovalAnnotation(target) ?: return
val scheduledForRemovalAnnotation = findAnnotationOfItselfOrContainingDeclaration(target, listOf(ANNOTATION_NAME), false)
if (scheduledForRemovalAnnotation == null) {
return
}
val elementToHighlight = (sourceNode as? UDeclaration)?.uastAnchor.sourcePsiElement ?: sourceNode.sourcePsi
if (elementToHighlight != null) {
val message = buildMessage(scheduledForRemovalAnnotation, target, isMethodOverriding)

View File

@@ -10,10 +10,7 @@ import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel
import com.intellij.codeInspection.util.SpecialAnnotationsUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.roots.ProjectFileIndex
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiModifierListOwner
import com.intellij.psi.*
import com.intellij.psi.util.PsiUtilCore
import com.intellij.util.ArrayUtilRt
import com.siyeh.ig.ui.ExternalizableStringSet
@@ -35,6 +32,26 @@ class UnstableApiUsageInspection : LocalInspectionTool() {
"org.apache.http.annotation.Beta",
"org.gradle.api.Incubating"
)
fun findAnnotationOfItselfOrContainingDeclaration(
listOwner: PsiModifierListOwner,
annotationNames: Collection<String>,
includeExternalAnnotations: Boolean
): PsiAnnotation? {
val annotation = AnnotationUtil.findAnnotation(listOwner, annotationNames, !includeExternalAnnotations)
if (annotation != null) {
return annotation
}
if (listOwner is PsiMember) {
val containingClass = listOwner.containingClass
if (containingClass != null) {
return findAnnotationOfItselfOrContainingDeclaration(containingClass, annotationNames, includeExternalAnnotations)
}
}
val packageName = (listOwner.containingFile as? PsiClassOwner)?.packageName ?: return null
val psiPackage = JavaPsiFacade.getInstance(listOwner.project).findPackage(packageName) ?: return null
return findAnnotationOfItselfOrContainingDeclaration(psiPackage, annotationNames, includeExternalAnnotations)
}
}
@JvmField
@@ -70,7 +87,7 @@ class UnstableApiUsageInspection : LocalInspectionTool() {
private class UnstableApiUsageProcessor(
private val problemsHolder: ProblemsHolder,
private val ignoreInsideImports: Boolean,
private val annotations: List<String>
private val unstableAnnotationNames: List<String>
) : ApiUsageProcessor {
private companion object {
@@ -112,8 +129,8 @@ private class UnstableApiUsageProcessor(
if (!isLibraryElement(target)) {
return
}
val annotations = AnnotationUtil.findAllAnnotations(target, annotations, false)
if (annotations.isEmpty()) {
val unstableAnnotation = UnstableApiUsageInspection.findAnnotationOfItselfOrContainingDeclaration(target, unstableAnnotationNames, true)
if (unstableAnnotation == null) {
return
}
val targetName = getPresentableName(target)

View File

@@ -3,6 +3,7 @@ package com.intellij.codeInspection
import com.intellij.analysis.JvmAnalysisBundle
import com.intellij.codeInspection.UnstableApiUsageInspection.Companion.DEFAULT_UNSTABLE_API_ANNOTATIONS
import com.intellij.codeInspection.UnstableApiUsageInspection.Companion.findAnnotationOfItselfOrContainingDeclaration
import com.intellij.codeInspection.util.SpecialAnnotationsUtil
import com.intellij.lang.jvm.JvmModifier
import com.intellij.psi.*
@@ -122,32 +123,32 @@ class UnstableTypeUsedInSignatureInspection : LocalInspectionTool() {
}
private fun checkReferencesUnstableType(psiType: PsiType, declaration: UDeclaration): Boolean {
val (typeName, unstableAnnotationName) = findReferencedUnstableType(psiType.deepComponentType) ?: return false
val (unstableClass, unstableAnnotation) = findReferencedUnstableType(psiType.deepComponentType) ?: return false
val className = unstableClass.qualifiedName ?: return false
val annotationName = unstableAnnotation.qualifiedName ?: return false
val message = when (declaration) {
is UMethod -> JvmAnalysisBundle.message("jvm.inspections.unstable.type.used.in.method.signature.description", unstableAnnotationName, typeName)
is UField -> JvmAnalysisBundle.message("jvm.inspections.unstable.type.used.in.field.signature.description", unstableAnnotationName, typeName)
else -> JvmAnalysisBundle.message("jvm.inspections.unstable.type.used.in.class.signature.description", unstableAnnotationName, typeName)
is UMethod -> JvmAnalysisBundle.message("jvm.inspections.unstable.type.used.in.method.signature.description", annotationName, className)
is UField -> JvmAnalysisBundle.message("jvm.inspections.unstable.type.used.in.field.signature.description", annotationName, className)
else -> JvmAnalysisBundle.message("jvm.inspections.unstable.type.used.in.class.signature.description", annotationName, className)
}
val elementToHighlight = declaration.uastAnchor.sourcePsiElement ?: return false
problemsHolder.registerProblem(elementToHighlight, message, ProblemHighlightType.GENERIC_ERROR_OR_WARNING)
return true
}
//Returns <class name> and <unstable annotation name>
private fun findReferencedUnstableType(psiType: PsiType): Pair<String, String>? {
private fun findReferencedUnstableType(psiType: PsiType): Pair<PsiClass, PsiAnnotation>? {
if (psiType is PsiClassType) {
val uClass = psiType.resolve()?.toUElement(UClass::class.java)
if (uClass != null) {
val unstableApiAnnotation = findUnstableAnnotation(uClass)
val psiClass = psiType.resolve()
if (psiClass != null) {
val unstableApiAnnotation = findAnnotationOfItselfOrContainingDeclaration(psiClass, unstableApiAnnotations, false)
if (unstableApiAnnotation != null) {
val className = uClass.qualifiedName ?: psiType.className
return className to unstableApiAnnotation
return psiClass to unstableApiAnnotation
}
}
for (parameterType in psiType.parameters) {
val unstableType = findReferencedUnstableType(parameterType)
if (unstableType != null) {
return unstableType
val parameterResult = findReferencedUnstableType(parameterType)
if (parameterResult != null) {
return parameterResult
}
}
}

View File

@@ -1,7 +1,7 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS;
import static pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass;
import static pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticNonAnnotatedMethodInAnnotatedClass</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticAnnotatedMethodInAnnotatedClass</warning>;
@@ -13,7 +13,7 @@ import static pkg.NonAnnotatedClass.<warning descr="'staticAnnotatedMethodInNonA
import pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>;
import pkg.NonAnnotatedEnum;
import static pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM;
import static pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
import static pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
import static pkg.NonAnnotatedEnum.NON_ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM;
import static pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM</warning>;
@@ -21,17 +21,17 @@ import static pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOT
import pkg.<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>;
import pkg.NonAnnotatedAnnotation;
import <warning descr="'annotatedPkg' is scheduled for removal in 123.456">annotatedPkg</warning>.ClassInAnnotatedPkg;
import <warning descr="'annotatedPkg' is scheduled for removal in 123.456">annotatedPkg</warning>.<warning descr="'annotatedPkg.ClassInAnnotatedPkg' is scheduled for removal in 123.456">ClassInAnnotatedPkg</warning>;
public class ScheduledForRemovalElementsTest {
public void test() {
String s = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS;
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass();
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning> annotatedClassInstanceViaNonAnnotatedConstructor = new <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>();
s = annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedFieldInAnnotatedClass;
annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedMethodInAnnotatedClass();
s = NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS;
staticNonAnnotatedMethodInAnnotatedClass();
String s = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticNonAnnotatedMethodInAnnotatedClass</warning>();
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning> annotatedClassInstanceViaNonAnnotatedConstructor = new <warning descr="'AnnotatedClass()' is scheduled for removal in 123.456"><warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning></warning>();
s = annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedFieldInAnnotatedClass' is scheduled for removal in 123.456">nonAnnotatedFieldInAnnotatedClass</warning>;
annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">nonAnnotatedMethodInAnnotatedClass</warning>();
s = <warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticNonAnnotatedMethodInAnnotatedClass</warning>();
s = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticAnnotatedMethodInAnnotatedClass</warning>();
@@ -61,8 +61,8 @@ public class ScheduledForRemovalElementsTest {
// ---------------------------------
<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning> nonAnnotatedValueInAnnotatedEnum = <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM;
nonAnnotatedValueInAnnotatedEnum = NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM;
<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning> nonAnnotatedValueInAnnotatedEnum = <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
nonAnnotatedValueInAnnotatedEnum = <warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning> annotatedValueInAnnotatedEnum = <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
annotatedValueInAnnotatedEnum = <warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
@@ -74,7 +74,7 @@ public class ScheduledForRemovalElementsTest {
// ---------------------------------
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning> class C1 {}
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>(nonAnnotatedAttributeInAnnotatedAnnotation = "123") class C2 {}
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>(<warning descr="'nonAnnotatedAttributeInAnnotatedAnnotation' is scheduled for removal in 123.456">nonAnnotatedAttributeInAnnotatedAnnotation</warning> = "123") class C2 {}
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>(<warning descr="'annotatedAttributeInAnnotatedAnnotation' is scheduled for removal in 123.456">annotatedAttributeInAnnotatedAnnotation</warning> = "123") class C3 {}
@NonAnnotatedAnnotation class C4 {}
@NonAnnotatedAnnotation(nonAnnotatedAttributeInNonAnnotatedAnnotation = "123") class C5 {}

View File

@@ -1,6 +1,6 @@
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticNonAnnotatedMethodInAnnotatedClass</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticAnnotatedMethodInAnnotatedClass</warning>
@@ -12,7 +12,7 @@ import pkg.NonAnnotatedClass.<warning descr="'staticAnnotatedMethodInNonAnnotate
import pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>
import pkg.NonAnnotatedEnum
import pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM
import pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
import pkg.<warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
import pkg.NonAnnotatedEnum.NON_ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM
import pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM</warning>
@@ -20,18 +20,18 @@ import pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOTATED_EN
import pkg.<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>
import pkg.NonAnnotatedAnnotation
import <warning descr="'annotatedPkg' is scheduled for removal in 123.456">annotatedPkg</warning>.ClassInAnnotatedPkg
import <warning descr="'annotatedPkg' is scheduled for removal in 123.456">annotatedPkg</warning>.<warning descr="'annotatedPkg.ClassInAnnotatedPkg' is scheduled for removal in 123.456">ClassInAnnotatedPkg</warning>
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE", "UNUSED_VALUE")
class ScheduledForRemovalElementsTest {
fun test() {
var s = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass()
val annotatedClassInstanceViaNonAnnotatedConstructor : <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning> = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>()
s = annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedFieldInAnnotatedClass
annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedMethodInAnnotatedClass()
s = NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS
staticNonAnnotatedMethodInAnnotatedClass()
var s = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticNonAnnotatedMethodInAnnotatedClass</warning>()
val annotatedClassInstanceViaNonAnnotatedConstructor : <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning> = <warning descr="'AnnotatedClass()' is scheduled for removal in 123.456"><warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning></warning>()
s = annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedFieldInAnnotatedClass' is scheduled for removal in 123.456">nonAnnotatedFieldInAnnotatedClass</warning>
annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">nonAnnotatedMethodInAnnotatedClass</warning>()
s = <warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticNonAnnotatedMethodInAnnotatedClass</warning>()
s = <warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is scheduled for removal in 123.456">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
<warning descr="'pkg.AnnotatedClass' is scheduled for removal in 123.456">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is scheduled for removal in 123.456">staticAnnotatedMethodInAnnotatedClass</warning>()
@@ -61,8 +61,8 @@ class ScheduledForRemovalElementsTest {
// ---------------------------------
var nonAnnotatedValueInAnnotatedEnum : <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning> = <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM
nonAnnotatedValueInAnnotatedEnum = NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM
var nonAnnotatedValueInAnnotatedEnum : <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning> = <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
nonAnnotatedValueInAnnotatedEnum = <warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
var annotatedValueInAnnotatedEnum : <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning> = <warning descr="'pkg.AnnotatedEnum' is scheduled for removal in 123.456">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
annotatedValueInAnnotatedEnum = <warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is scheduled for removal in 123.456">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
@@ -74,7 +74,7 @@ class ScheduledForRemovalElementsTest {
// ---------------------------------
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning> class C1
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>(nonAnnotatedAttributeInAnnotatedAnnotation = "123") class C2
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>(<warning descr="'nonAnnotatedAttributeInAnnotatedAnnotation' is scheduled for removal in 123.456">nonAnnotatedAttributeInAnnotatedAnnotation</warning> = "123") class C2
@<warning descr="'pkg.AnnotatedAnnotation' is scheduled for removal in 123.456">AnnotatedAnnotation</warning>(<warning descr="'annotatedAttributeInAnnotatedAnnotation' is scheduled for removal in 123.456">annotatedAttributeInAnnotatedAnnotation</warning> = "123") class C3
@NonAnnotatedAnnotation class C4
@NonAnnotatedAnnotation(nonAnnotatedAttributeInNonAnnotatedAnnotation = "123") class C5

View File

@@ -1,7 +1,7 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS;
import static pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass;
import static pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is marked unstable">staticNonAnnotatedMethodInAnnotatedClass</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
import static pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is marked unstable">staticAnnotatedMethodInAnnotatedClass</warning>;
@@ -13,7 +13,7 @@ import static pkg.NonAnnotatedClass.<warning descr="'staticAnnotatedMethodInNonA
import pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>;
import pkg.NonAnnotatedEnum;
import static pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM;
import static pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
import static pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
import static pkg.NonAnnotatedEnum.NON_ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM;
import static pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM</warning>;
@@ -21,17 +21,17 @@ import static pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOT
import pkg.<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>;
import pkg.NonAnnotatedAnnotation;
import <warning descr="'annotatedPkg' is marked unstable">annotatedPkg</warning>.ClassInAnnotatedPkg;
import <warning descr="'annotatedPkg' is marked unstable">annotatedPkg</warning>.<warning descr="'annotatedPkg.ClassInAnnotatedPkg' is marked unstable">ClassInAnnotatedPkg</warning>;
public class UnstableElementsTest {
public void test() {
String s = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS;
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass();
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning> annotatedClassInstanceViaNonAnnotatedConstructor = new <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>();
s = annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedFieldInAnnotatedClass;
annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedMethodInAnnotatedClass();
s = NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS;
staticNonAnnotatedMethodInAnnotatedClass();
String s = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is marked unstable">staticNonAnnotatedMethodInAnnotatedClass</warning>();
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning> annotatedClassInstanceViaNonAnnotatedConstructor = new <warning descr="'AnnotatedClass()' is marked unstable"><warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning></warning>();
s = annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedFieldInAnnotatedClass' is marked unstable">nonAnnotatedFieldInAnnotatedClass</warning>;
annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedMethodInAnnotatedClass()' is marked unstable">nonAnnotatedMethodInAnnotatedClass</warning>();
s = <warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is marked unstable">staticNonAnnotatedMethodInAnnotatedClass</warning>();
s = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>;
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is marked unstable">staticAnnotatedMethodInAnnotatedClass</warning>();
@@ -61,8 +61,8 @@ public class UnstableElementsTest {
// ---------------------------------
<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning> nonAnnotatedValueInAnnotatedEnum = <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM;
nonAnnotatedValueInAnnotatedEnum = NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM;
<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning> nonAnnotatedValueInAnnotatedEnum = <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
nonAnnotatedValueInAnnotatedEnum = <warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning> annotatedValueInAnnotatedEnum = <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
annotatedValueInAnnotatedEnum = <warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>;
@@ -74,7 +74,7 @@ public class UnstableElementsTest {
// ---------------------------------
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning> class C1 {}
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>(nonAnnotatedAttributeInAnnotatedAnnotation = "123") class C2 {}
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>(<warning descr="'nonAnnotatedAttributeInAnnotatedAnnotation' is marked unstable">nonAnnotatedAttributeInAnnotatedAnnotation</warning> = "123") class C2 {}
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>(<warning descr="'annotatedAttributeInAnnotatedAnnotation' is marked unstable">annotatedAttributeInAnnotatedAnnotation</warning> = "123") class C3 {}
@NonAnnotatedAnnotation class C4 {}
@NonAnnotatedAnnotation(nonAnnotatedAttributeInNonAnnotatedAnnotation = "123") class C5 {}

View File

@@ -1,6 +1,6 @@
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is marked unstable">staticNonAnnotatedMethodInAnnotatedClass</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
import pkg.<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is marked unstable">staticAnnotatedMethodInAnnotatedClass</warning>
@@ -12,7 +12,7 @@ import pkg.NonAnnotatedClass.<warning descr="'staticAnnotatedMethodInNonAnnotate
import pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>
import pkg.NonAnnotatedEnum
import pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM
import pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
import pkg.<warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
import pkg.NonAnnotatedEnum.NON_ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM
import pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_NON_ANNOTATED_ENUM</warning>
@@ -20,18 +20,18 @@ import pkg.NonAnnotatedEnum.<warning descr="'ANNOTATED_VALUE_IN_NON_ANNOTATED_EN
import pkg.<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>
import pkg.NonAnnotatedAnnotation
import <warning descr="'annotatedPkg' is marked unstable">annotatedPkg</warning>.ClassInAnnotatedPkg
import <warning descr="'annotatedPkg' is marked unstable">annotatedPkg</warning>.<warning descr="'annotatedPkg.ClassInAnnotatedPkg' is marked unstable">ClassInAnnotatedPkg</warning>
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE", "UNUSED_VALUE")
class UnstableElementsTest {
fun test() {
var s = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.staticNonAnnotatedMethodInAnnotatedClass()
val annotatedClassInstanceViaNonAnnotatedConstructor : <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning> = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>()
s = annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedFieldInAnnotatedClass
annotatedClassInstanceViaNonAnnotatedConstructor.nonAnnotatedMethodInAnnotatedClass()
s = NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS
staticNonAnnotatedMethodInAnnotatedClass()
var s = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is marked unstable">staticNonAnnotatedMethodInAnnotatedClass</warning>()
val annotatedClassInstanceViaNonAnnotatedConstructor : <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning> = <warning descr="'AnnotatedClass()' is marked unstable"><warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning></warning>()
s = annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedFieldInAnnotatedClass' is marked unstable">nonAnnotatedFieldInAnnotatedClass</warning>
annotatedClassInstanceViaNonAnnotatedConstructor.<warning descr="'nonAnnotatedMethodInAnnotatedClass()' is marked unstable">nonAnnotatedMethodInAnnotatedClass</warning>()
s = <warning descr="'NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">NON_ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
<warning descr="'staticNonAnnotatedMethodInAnnotatedClass()' is marked unstable">staticNonAnnotatedMethodInAnnotatedClass</warning>()
s = <warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS' is marked unstable">ANNOTATED_CONSTANT_IN_ANNOTATED_CLASS</warning>
<warning descr="'pkg.AnnotatedClass' is marked unstable">AnnotatedClass</warning>.<warning descr="'staticAnnotatedMethodInAnnotatedClass()' is marked unstable">staticAnnotatedMethodInAnnotatedClass</warning>()
@@ -61,8 +61,8 @@ class UnstableElementsTest {
// ---------------------------------
var nonAnnotatedValueInAnnotatedEnum : <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning> = <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM
nonAnnotatedValueInAnnotatedEnum = NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM
var nonAnnotatedValueInAnnotatedEnum : <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning> = <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
nonAnnotatedValueInAnnotatedEnum = <warning descr="'NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">NON_ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
var annotatedValueInAnnotatedEnum : <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning> = <warning descr="'pkg.AnnotatedEnum' is marked unstable">AnnotatedEnum</warning>.<warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
annotatedValueInAnnotatedEnum = <warning descr="'ANNOTATED_VALUE_IN_ANNOTATED_ENUM' is marked unstable">ANNOTATED_VALUE_IN_ANNOTATED_ENUM</warning>
@@ -74,7 +74,7 @@ class UnstableElementsTest {
// ---------------------------------
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning> class C1
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>(nonAnnotatedAttributeInAnnotatedAnnotation = "123") class C2
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>(<warning descr="'nonAnnotatedAttributeInAnnotatedAnnotation' is marked unstable">nonAnnotatedAttributeInAnnotatedAnnotation</warning> = "123") class C2
@<warning descr="'pkg.AnnotatedAnnotation' is marked unstable">AnnotatedAnnotation</warning>(<warning descr="'annotatedAttributeInAnnotatedAnnotation' is marked unstable">annotatedAttributeInAnnotatedAnnotation</warning> = "123") class C3
@NonAnnotatedAnnotation class C4
@NonAnnotatedAnnotation(nonAnnotatedAttributeInNonAnnotatedAnnotation = "123") class C5