[FIR] fix NPE on missing java annotations qualifier

^KTIJ-23075 fixed
This commit is contained in:
Ilya Kirillov
2022-12-09 13:05:22 +01:00
committed by Space Team
parent f07f7885c5
commit 68a17242b3
16 changed files with 128 additions and 3 deletions
@@ -94,6 +94,12 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated ext
runTest("analysis/analysis-api/testData/symbols/symbolByReference/implicitLambdaParameter.kt");
}
@Test
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() throws Exception {
@@ -94,6 +94,12 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated exte
runTest("analysis/analysis-api/testData/symbols/symbolByReference/implicitLambdaParameter.kt");
}
@Test
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() throws Exception {
@@ -94,6 +94,12 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerat
runTest("analysis/analysis-api/testData/symbols/symbolByReference/implicitLambdaParameter.kt");
}
@Test
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt");
}
@Test
@TestMetadata("javaField.kt")
public void testJavaField() throws Exception {
@@ -0,0 +1,2 @@
@`<Error class: unknown class>`
open class JavaClass
@@ -0,0 +1,25 @@
KtNamedClassOrObjectSymbol:
annotationsList: [
<Error class: unknown class>()
psi: null
]
classIdIfNonLocal: JavaClass
classKind: CLASS
companionObject: null
contextReceivers: []
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: OPEN
name: JavaClass
origin: JAVA
superTypes: [
kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -0,0 +1,10 @@
// FILE: main.kt
fun main() {
val j: Java<caret>Class = JavaClass()
}
// FILE: JavaClass.java
@()
public class JavaClass {}
@@ -0,0 +1,2 @@
@`<error>`
open class JavaClass
@@ -0,0 +1,2 @@
@`<error>`
open class JavaClass
@@ -0,0 +1,25 @@
KtNamedClassOrObjectSymbol:
annotationsList: [
<error>()
psi: null
]
classIdIfNonLocal: JavaClass
classKind: CLASS
companionObject: null
contextReceivers: []
isData: false
isExternal: false
isFun: false
isInline: false
isInner: false
modality: OPEN
name: JavaClass
origin: JAVA
superTypes: [
kotlin/Any
]
symbolKind: TOP_LEVEL
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
deprecationStatus: null
@@ -3431,6 +3431,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis
runTest("compiler/fir/analysis-tests/testData/resolve/problems/innerClassHierarchy.kt");
}
@Test
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt");
}
@Test
@TestMetadata("javaQualifier.kt")
public void testJavaQualifier() throws Exception {
@@ -3025,6 +3025,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract
runTest("compiler/fir/analysis-tests/testData/resolve/problems/innerClassHierarchy.kt");
}
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt");
}
@TestMetadata("javaQualifier.kt")
public void testJavaQualifier() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/problems/javaQualifier.kt");
@@ -0,0 +1,4 @@
FILE: main.kt
public final fun main(): R|kotlin/Unit| {
lval j: R|JavaClass| = R|/JavaClass.JavaClass|()
}
@@ -0,0 +1,10 @@
// FILE: main.kt
fun main() {
val j: JavaClass = JavaClass()
}
// FILE: JavaClass.java
@()
public class JavaClass {}
@@ -3431,6 +3431,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest {
runTest("compiler/fir/analysis-tests/testData/resolve/problems/innerClassHierarchy.kt");
}
@Test
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt");
}
@Test
@TestMetadata("javaQualifier.kt")
public void testJavaQualifier() throws Exception {
@@ -3431,6 +3431,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
runTest("compiler/fir/analysis-tests/testData/resolve/problems/innerClassHierarchy.kt");
}
@Test
@TestMetadata("javaClassWithEmptyAnnotationName.kt")
public void testJavaClassWithEmptyAnnotationName() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt");
}
@Test
@TestMetadata("javaQualifier.kt")
public void testJavaQualifier() throws Exception {
@@ -12,9 +12,11 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.buildUnaryArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameter
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
@@ -247,7 +249,9 @@ private fun JavaAnnotation.toFirAnnotationCall(
"Deprecated in Java".createConstantOrError(session)
}
else -> {
fillAnnotationArgumentMapping(session, javaTypeParameterStack, lookupTag!!, arguments, mapping)
if (lookupTag != null) {
fillAnnotationArgumentMapping(session, javaTypeParameterStack, lookupTag, arguments, mapping)
}
}
}
}