Mark enum entries that are deprecated in Kotlin as deprecated in bytecode
This commit is contained in:
@@ -1571,7 +1571,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
|
|
||||||
for (KtEnumEntry enumEntry : enumEntries) {
|
for (KtEnumEntry enumEntry : enumEntries) {
|
||||||
ClassDescriptor descriptor = getNotNull(bindingContext, BindingContext.CLASS, enumEntry);
|
ClassDescriptor descriptor = getNotNull(bindingContext, BindingContext.CLASS, enumEntry);
|
||||||
FieldVisitor fv = v.newField(JvmDeclarationOriginKt.OtherOrigin(enumEntry, descriptor), ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL,
|
int isDeprecated = KotlinBuiltIns.isDeprecated(descriptor) ? ACC_DEPRECATED : 0;
|
||||||
|
FieldVisitor fv = v.newField(JvmDeclarationOriginKt.OtherOrigin(enumEntry, descriptor), ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL | isDeprecated,
|
||||||
descriptor.getName().asString(), classAsmType.getDescriptor(), null, null);
|
descriptor.getName().asString(), classAsmType.getDescriptor(), null, null);
|
||||||
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(descriptor, null);
|
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(descriptor, null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
public enum E {
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@kotlin.Deprecated(message = "a")
|
||||||
|
Entry1, Entry2, /**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@kotlin.Deprecated(message = "b")
|
||||||
|
Entry3;
|
||||||
|
|
||||||
|
protected E() { /* compiled code */ }
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// p.E
|
||||||
|
// test for KT-8874
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
enum class E {
|
||||||
|
@Deprecated("a")
|
||||||
|
Entry1,
|
||||||
|
Entry2,
|
||||||
|
@Deprecated("b")
|
||||||
|
Entry3
|
||||||
|
}
|
||||||
@@ -41,6 +41,12 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("DeprecatedEnumEntry.kt")
|
||||||
|
public void testDeprecatedEnumEntry() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/asJava/lightClasses/delegation")
|
@TestMetadata("compiler/testData/asJava/lightClasses/delegation")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
+6
@@ -41,6 +41,12 @@ public class IdeCompiledLightClassTestGenerated extends AbstractIdeCompiledLight
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("DeprecatedEnumEntry.kt")
|
||||||
|
public void testDeprecatedEnumEntry() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
public String getTestsRoot() {
|
public String getTestsRoot() {
|
||||||
return "compiler/testData/asJava/lightClasses";
|
return "compiler/testData/asJava/lightClasses";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,12 @@ public class IdeLightClassTestGenerated extends AbstractIdeLightClassTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("DeprecatedEnumEntry.kt")
|
||||||
|
public void testDeprecatedEnumEntry() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/asJava/lightClasses/facades")
|
@TestMetadata("compiler/testData/asJava/lightClasses/facades")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user