FIR2IR: Fix "expected FirResolvedTypeRef but was FirJavaTypeRef" crash

The problem was that we were using unenhanced constructors that still
might contain java type refs.
Basically, most of the `firClass.declarations` usages are unsafe in that
meaning.

The test is very complicated because to reproduce the exception there
should be some conditions met:
- MyClass should be compiled with K1, so it has `@EnhancedNullability`
annotation serialized (that is unnecessary, but don't do any harm)
- `@Nls` scope should be properly resolved, so enum entries are converted
to resolved type refs
- That leads to attempt to check if null-check might be needed to be
inserted and to failure at FirTypeUtilsKt.getCanBeNull

While this quite controversial to have this check being performed for
freshly created annotations calls, the problem with improper constructor
lookup anyway existed and fixed correctly.

^KT-57213 Fixed
This commit is contained in:
Denis.Zharkov
2023-03-21 13:37:57 +01:00
committed by Space Team
parent a643dfbe83
commit 9c2c11f7e9
6 changed files with 58 additions and 2 deletions
@@ -0,0 +1,6 @@
fun box(): String {
// This class is only needed to force resolution of `@Nls` scope, so its types would be converted to resolved
class LocalClassToUseAnnotation(val name: @Nls(capitalization = Nls.Capitalization.Title) String)
return MyClass("OK").name
}