[FIR] Fix cycle when loading nested enum within java annotation

This commit is contained in:
Simon Ogorodnik
2021-07-27 15:18:34 +03:00
committed by Mikhail Glukhikh
parent 947e97511b
commit 7422571c72
6 changed files with 42 additions and 1 deletions
@@ -0,0 +1,3 @@
FILE: jvm.kt
@R|some/Nls|(R|some/Nls.Capitalization.Title|) public final fun f(): R|kotlin/Unit| {
}
@@ -0,0 +1,17 @@
// FILE: some/Nls.java
package some
public @interface Nls {
Capitalization capitalization() default Capitalization.NotSpecified;
enum Capitalization { NotSpecified, Title, Sentence }
}
// FILE: jvm.kt
import some.Nls.Capitalization.*
import some.Nls
@Nls(Title)
fun f() {
}
@@ -5003,6 +5003,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("AnnotationWithEnum.kt")
public void testAnnotationWithEnum() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.kt");
}
@Test
@TestMetadata("BasicWithAnnotatedJava.kt")
public void testBasicWithAnnotatedJava() throws Exception {
@@ -5003,6 +5003,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("AnnotationWithEnum.kt")
public void testAnnotationWithEnum() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.kt");
}
@Test
@TestMetadata("BasicWithAnnotatedJava.kt")
public void testBasicWithAnnotatedJava() throws Exception {
@@ -148,6 +148,7 @@ class JavaSymbolProvider(
override fun getClassLikeSymbolByFqName(classId: ClassId): FirRegularClassSymbol? {
return try {
if (!hasTopLevelClassOf(classId)) return null
getFirJavaClass(classId)
} catch (e: ProcessCanceledException) {
null
@@ -155,7 +156,9 @@ class JavaSymbolProvider(
}
fun getFirJavaClass(classId: ClassId, content: KotlinClassFinder.Result.ClassFileContent? = null): FirRegularClassSymbol? {
if (!hasTopLevelClassOf(classId)) return null
// Enforce loading of outer class first
classId.outerClassId?.let { getFirJavaClass(it) }
return classCache.getValue(classId, content)
}
@@ -5003,6 +5003,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("AnnotationWithEnum.kt")
public void testAnnotationWithEnum() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.kt");
}
@Test
@TestMetadata("BasicWithAnnotatedJava.kt")
public void testBasicWithAnnotatedJava() throws Exception {