FIR: do not eagerly resolve class references in imported annotations

This commit is contained in:
pyos
2021-03-12 11:31:43 +01:00
committed by TeamCityServer
parent e630e00e99
commit 1a57d60f68
2 changed files with 3 additions and 15 deletions
@@ -641,7 +641,7 @@ internal fun JavaAnnotationArgument.toFirExpression(
is JavaClassObjectAnnotationArgument -> buildGetClassCall {
argumentList = buildUnaryArgumentList(
buildClassReferenceExpression {
classTypeRef = getReferencedType().toFirResolvedTypeRef(session, javaTypeParameterStack)
classTypeRef = getReferencedType().toFirJavaTypeRef(session, javaTypeParameterStack)
}
)
}
@@ -704,17 +704,3 @@ private fun FirConstExpression<*>.setProperType(session: FirSession): FirConstEx
replaceTypeRef(typeRef)
return this
}
private fun JavaType.toFirResolvedTypeRef(
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
): FirResolvedTypeRef {
if (this is JavaClassifierType) return toFirResolvedTypeRef(
session,
javaTypeParameterStack,
isForSupertypes = false,
forTypeParameterBounds = false
)
return buildResolvedTypeRef {
type = ConeClassErrorType(ConeSimpleDiagnostic("Unexpected JavaType: $this", DiagnosticKind.Java))
}
}
@@ -25,6 +25,7 @@ import java.lang.annotation.RetentionPolicy;
float e() default 1;
long j() default 1;
String f() default "default";
Class<?> g() default JavaAnn2.class;
}
// MODULE: main(lib)
@@ -47,6 +48,7 @@ fun box(): String {
if (ann2.e != 1F) return "fail for e: expected = 1, but was ${ann2.e}"
if (ann2.j != 1L) return "fail for j: expected = 1, but was ${ann2.j}"
if (ann2.f != "default") return "fail for f: expected = default, but was ${ann2.f}"
if (ann2.g != JavaAnn2::class) return "fail for g: expected = JavaAnn2, but was ${ann2.g}"
return "OK"
}