From 68a17242b36fcba99ae9a341302b8c05794eccac Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 9 Dec 2022 13:05:22 +0100 Subject: [PATCH] [FIR] fix NPE on missing java annotations qualifier ^KTIJ-23075 fixed --- ...eModuleSymbolByReferenceTestGenerated.java | 6 +++++ ...eModuleSymbolByReferenceTestGenerated.java | 6 +++++ ...eModuleSymbolByReferenceTestGenerated.java | 6 +++++ ...EmptyAnnotationName.descriptors.pretty.txt | 2 ++ ...assWithEmptyAnnotationName.descriptors.txt | 25 +++++++++++++++++++ .../javaClassWithEmptyAnnotationName.kt | 10 ++++++++ ...EmptyAnnotationName.pretty.descriptors.txt | 2 ++ ...avaClassWithEmptyAnnotationName.pretty.txt | 2 ++ .../javaClassWithEmptyAnnotationName.txt | 25 +++++++++++++++++++ ...nosisCompilerFirTestdataTestGenerated.java | 6 +++++ ...TouchedTilContractsPhaseTestGenerated.java | 5 ++++ .../javaClassWithEmptyAnnotationName.fir.txt | 4 +++ .../javaClassWithEmptyAnnotationName.kt | 10 ++++++++ .../runners/FirDiagnosticTestGenerated.java | 6 +++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++++ .../kotlin/fir/java/javaAnnotationsMapping.kt | 10 +++++--- 16 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.descriptors.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.txt create mode 100644 compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java index 74490f420b8..8e66b750f87 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java index ef87a9eb23b..a77f3704310 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java index 4a47267499f..8d128cff88a 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByReferenceTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.pretty.txt new file mode 100644 index 00000000000..7ab878546a1 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.pretty.txt @@ -0,0 +1,2 @@ +@`` +open class JavaClass \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.txt new file mode 100644 index 00000000000..c431483cb3f --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.descriptors.txt @@ -0,0 +1,25 @@ +KtNamedClassOrObjectSymbol: + annotationsList: [ + () + 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 \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt new file mode 100644 index 00000000000..0de0bc491cc --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.kt @@ -0,0 +1,10 @@ +// FILE: main.kt + +fun main() { + val j: JavaClass = JavaClass() +} + +// FILE: JavaClass.java + +@() +public class JavaClass {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.descriptors.txt new file mode 100644 index 00000000000..859452b880a --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.descriptors.txt @@ -0,0 +1,2 @@ +@`` +open class JavaClass diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.txt new file mode 100644 index 00000000000..8e969f1cdca --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.pretty.txt @@ -0,0 +1,2 @@ +@`` +open class JavaClass \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.txt b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.txt new file mode 100644 index 00000000000..142a44ecea7 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByReference/javaClassWithEmptyAnnotationName.txt @@ -0,0 +1,25 @@ +KtNamedClassOrObjectSymbol: + annotationsList: [ + () + 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 \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 5d296f04e48..df9b30f0827 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -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 { diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index d48d0278bb8..46d5bd47efb 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -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"); diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.fir.txt b/compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.fir.txt new file mode 100644 index 00000000000..ef8b3d8b95f --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.fir.txt @@ -0,0 +1,4 @@ +FILE: main.kt + public final fun main(): R|kotlin/Unit| { + lval j: R|JavaClass| = R|/JavaClass.JavaClass|() + } diff --git a/compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt b/compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt new file mode 100644 index 00000000000..e83c487ad00 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/problems/javaClassWithEmptyAnnotationName.kt @@ -0,0 +1,10 @@ +// FILE: main.kt + +fun main() { + val j: JavaClass = JavaClass() +} + +// FILE: JavaClass.java + +@() +public class JavaClass {} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index b3f43199a04..0b731d6a965 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -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 { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 232fae1d75e..2c5c0dca552 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -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 { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt index 12f73990034..e0ae2bdd574 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt @@ -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) + } } } }