K2: resolve Java enum entries from the beginning (related to KT-59464)

This commit is contained in:
Mikhail Glukhikh
2023-07-06 19:37:34 +02:00
committed by Space Team
parent e6d43c1f48
commit f8ca440e96
20 changed files with 104 additions and 21 deletions
@@ -1,3 +1,3 @@
FILE: main.kt
public final val enumMap: R|java/util/EnumMap<JavaEnum!, kotlin/String!>| = R|java/util/EnumMap.EnumMap|<R|JavaEnum!|, R|kotlin/String!|>(R|kotlin/collections/mapOf|<R|JavaEnum!|, R|kotlin/String|>(Q|JavaEnum|.R|/JavaEnum.A|.R|kotlin/to|<R|@EnhancedNullability JavaEnum|, R|kotlin/String|>(String(A))))
public final val enumMap: R|java/util/EnumMap<JavaEnum!, kotlin/String!>| = R|java/util/EnumMap.EnumMap|<R|JavaEnum!|, R|kotlin/String!|>(R|kotlin/collections/mapOf|<R|JavaEnum!|, R|kotlin/String|>(Q|JavaEnum|.R|/JavaEnum.A|.R|kotlin/to|<R|JavaEnum|, R|kotlin/String|>(String(A))))
public get(): R|java/util/EnumMap<JavaEnum!, kotlin/String!>|
@@ -18383,6 +18383,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/fir/cannotCastToFunctionInIf.kt");
}
@Test
@TestMetadata("capitalizationNotEnhanced.kt")
public void testCapitalizationNotEnhanced() throws Exception {
runTest("compiler/testData/codegen/box/fir/capitalizationNotEnhanced.kt");
}
@Test
@TestMetadata("ClassBuilder.kt")
public void testClassBuilder() throws Exception {
@@ -18383,6 +18383,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/fir/cannotCastToFunctionInIf.kt");
}
@Test
@TestMetadata("capitalizationNotEnhanced.kt")
public void testCapitalizationNotEnhanced() throws Exception {
runTest("compiler/testData/codegen/box/fir/capitalizationNotEnhanced.kt");
}
@Test
@TestMetadata("ClassBuilder.kt")
public void testClassBuilder() throws Exception {
@@ -501,6 +501,7 @@ abstract class FirJavaFacade(
isStatic = javaField.isStatic
}
returnTypeRef = returnType.toFirJavaTypeRef(session, javaTypeParameterStack)
.resolveIfJavaType(session, javaTypeParameterStack, mode = FirJavaTypeConversionMode.ANNOTATION_MEMBER)
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
origin = javaOrigin(javaField.isFromSource)
}.apply {
@@ -0,0 +1,53 @@
// TARGET_BACKEND: JVM_IR
// FULL_JDK
// JVM_TARGET: 1.8
// MODULE: m1
// FILE: Nls.java
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE, ElementType.TYPE, ElementType.PACKAGE})
public @interface Nls {
enum Capitalization {
NotSpecified,
Title,
Sentence
}
Capitalization capitalization() default Capitalization.NotSpecified;
}
// FILE: Bundle.java
import java.util.function.Supplier;
public class Bundle {
public static Supplier<@Nls String> pointer() {
return null;
}
}
// MODULE: m2(m1)
// FILE: some.kt
import java.util.function.Supplier
import Nls.Capitalization.Title
object Bar {
fun foo(s: Supplier<@Nls(capitalization = Title) String>?) {}
}
// MODULE: m3(m2, m1)
// FILE: box.kt
fun box(): String {
Bar.foo(Bundle.pointer())
return "OK"
}
+1 -1
View File
@@ -2,7 +2,7 @@ FILE fqName:<root> fileName:/javaEnum.kt
PROPERTY name:test visibility:public modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:test type:<root>.JEnum visibility:private [final,static]
EXPRESSION_BODY
GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:ONE' type=@[EnhancedNullability] <root>.JEnum
GET_ENUM 'ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:ONE' type=<root>.JEnum
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-test> visibility:public modality:FINAL <> () returnType:<root>.JEnum
correspondingProperty: PROPERTY name:test visibility:public modality:FINAL [val]
BLOCK_BODY
@@ -1,7 +1,7 @@
public final enum class AnnotatedEnumEntry : R|kotlin/Enum<test/AnnotatedEnumEntry!>| {
@R|test/AnnotatedEnumEntry.Anno|(value = String(a)) public final static enum entry E1: R|@EnhancedNullability test/AnnotatedEnumEntry|
@R|test/AnnotatedEnumEntry.Anno|(value = String(b)) @R|test/AnnotatedEnumEntry.Anno2|() public final static enum entry E2: R|@EnhancedNullability test/AnnotatedEnumEntry|
public final static enum entry E3: R|@EnhancedNullability test/AnnotatedEnumEntry|
@R|test/AnnotatedEnumEntry.Anno|(value = String(a)) public final static enum entry E1: R|test/AnnotatedEnumEntry|
@R|test/AnnotatedEnumEntry.Anno|(value = String(b)) @R|test/AnnotatedEnumEntry.Anno2|() public final static enum entry E2: R|test/AnnotatedEnumEntry|
public final static enum entry E3: R|test/AnnotatedEnumEntry|
public final static fun values(): R|kotlin/Array<test/AnnotatedEnumEntry>| {
}
@@ -4,7 +4,7 @@ public abstract interface CustomAnnotation : R|kotlin/Any| {
}
public final enum class MyEnum : R|kotlin/Enum<test/CustomAnnotation.MyEnum!>| {
public final static enum entry ONE: R|@EnhancedNullability test/CustomAnnotation.MyEnum|
public final static enum entry ONE: R|test/CustomAnnotation.MyEnum|
public final static fun values(): R|kotlin/Array<test/CustomAnnotation.MyEnum>| {
}
@@ -4,7 +4,7 @@ public open class EnumArgumentWithCustomToString : R|kotlin/Any| {
public constructor(): R|test/EnumArgumentWithCustomToString|
public final enum class E : R|kotlin/Enum<test/EnumArgumentWithCustomToString.E!>| {
public final static enum entry CAKE: R|@EnhancedNullability test/EnumArgumentWithCustomToString.E|
public final static enum entry CAKE: R|test/EnumArgumentWithCustomToString.E|
public final static fun values(): R|kotlin/Array<test/EnumArgumentWithCustomToString.E>| {
}
@@ -1,5 +1,5 @@
public final enum class EnumConstructorParameter : R|kotlin/Enum<test/EnumConstructorParameter!>| {
public final static enum entry INSTANCE: R|@EnhancedNullability test/EnumConstructorParameter|
public final static enum entry INSTANCE: R|test/EnumConstructorParameter|
private constructor(@R|test/EnumConstructorParameter.Anno|(value = String(string)) s: R|kotlin/String!|): R|test/EnumConstructorParameter|
private constructor(x: R|kotlin/Int|): R|test/EnumConstructorParameter|
@@ -8,7 +8,7 @@ public open class NestedEnumArgument : R|kotlin/Any| {
}
public final enum class E : R|kotlin/Enum<test/NestedEnumArgument.E!>| {
public final static enum entry FIRST: R|@EnhancedNullability test/NestedEnumArgument.E|
public final static enum entry FIRST: R|test/NestedEnumArgument.E|
public final static fun values(): R|kotlin/Array<test/NestedEnumArgument.E>| {
}
@@ -2,8 +2,8 @@ public final annotation class Api : R|kotlin/Annotation| {
public constructor(status: R|test/Api.Status|): R|test/Api|
public final enum class Status : R|kotlin/Enum<test/Api.Status!>| {
public final static enum entry Ok: R|@EnhancedNullability test/Api.Status|
public final static enum entry Error: R|@EnhancedNullability test/Api.Status|
public final static enum entry Ok: R|test/Api.Status|
public final static enum entry Error: R|test/Api.Status|
public final static fun values(): R|kotlin/Array<test/Api.Status>| {
}
@@ -1,6 +1,6 @@
public final enum class EnumMembers : R|kotlin/Enum<test/EnumMembers!>| {
public final static enum entry FIRST: R|@EnhancedNullability test/EnumMembers|
public final static enum entry SECOND: R|@EnhancedNullability test/EnumMembers|
public final static enum entry FIRST: R|test/EnumMembers|
public final static enum entry SECOND: R|test/EnumMembers|
public final field isFirst: R|kotlin/Boolean|
public open fun first(): R|kotlin/Boolean|
@@ -1,6 +1,6 @@
public final enum class EnumWithSpecializedEntry : R|kotlin/Enum<test/EnumWithSpecializedEntry!>| {
public final static enum entry E1: R|@EnhancedNullability test/EnumWithSpecializedEntry|
public final static enum entry E2: R|@EnhancedNullability test/EnumWithSpecializedEntry|
public final static enum entry E1: R|test/EnumWithSpecializedEntry|
public final static enum entry E2: R|test/EnumWithSpecializedEntry|
public final static fun values(): R|kotlin/Array<test/EnumWithSpecializedEntry>| {
}
@@ -1,6 +1,6 @@
public final enum class JavaEnum : R|kotlin/Enum<test/JavaEnum!>| {
public final static enum entry ENTRY: R|@EnhancedNullability test/JavaEnum|
public final static enum entry ANOTHER: R|@EnhancedNullability test/JavaEnum|
public final static enum entry ENTRY: R|test/JavaEnum|
public final static enum entry ANOTHER: R|test/JavaEnum|
public final static fun values(): R|kotlin/Array<test/JavaEnum>| {
}
@@ -1,7 +1,7 @@
public final enum class Enum : R|kotlin/Enum<test/Enum!>| {
public final static enum entry A: R|@EnhancedNullability test/Enum|
public final static enum entry B: R|@EnhancedNullability test/Enum|
public final static enum entry C: R|@EnhancedNullability test/Enum|
public final static enum entry A: R|test/Enum|
public final static enum entry B: R|test/Enum|
public final static enum entry C: R|test/Enum|
public final static fun values(): R|kotlin/Array<test/Enum>| {
}
@@ -1,5 +1,5 @@
public final enum class StaticMembersInEnum : R|kotlin/Enum<test/StaticMembersInEnum!>| {
public final static enum entry ENTRY: R|@EnhancedNullability test/StaticMembersInEnum|
public final static enum entry ENTRY: R|test/StaticMembersInEnum|
public open static field STATIC_FIELD: R|kotlin/Int|
public final static field CONSTANT: R|test/StaticMembersInEnum!|
@@ -18383,6 +18383,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/fir/cannotCastToFunctionInIf.kt");
}
@Test
@TestMetadata("capitalizationNotEnhanced.kt")
public void testCapitalizationNotEnhanced() throws Exception {
runTest("compiler/testData/codegen/box/fir/capitalizationNotEnhanced.kt");
}
@Test
@TestMetadata("ClassBuilder.kt")
public void testClassBuilder() throws Exception {
@@ -18383,6 +18383,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/fir/cannotCastToFunctionInIf.kt");
}
@Test
@TestMetadata("capitalizationNotEnhanced.kt")
public void testCapitalizationNotEnhanced() throws Exception {
runTest("compiler/testData/codegen/box/fir/capitalizationNotEnhanced.kt");
}
@Test
@TestMetadata("ClassBuilder.kt")
public void testClassBuilder() throws Exception {
@@ -15275,6 +15275,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/fir/cannotCastToFunctionInIf.kt");
}
@TestMetadata("capitalizationNotEnhanced.kt")
public void testCapitalizationNotEnhanced() throws Exception {
runTest("compiler/testData/codegen/box/fir/capitalizationNotEnhanced.kt");
}
@TestMetadata("ClassBuilder.kt")
public void testClassBuilder() throws Exception {
runTest("compiler/testData/codegen/box/fir/ClassBuilder.kt");