From 4497be0b6882264261981214e319652c755b3b0e Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 3 Nov 2022 23:09:26 -0700 Subject: [PATCH] AA: do not parse signature with NO_NAME_PROVIDED ^KTIJ-23503 Fixed --- .../descriptors/components/KtFe10PsiTypeProvider.kt | 5 ++--- .../api/fir/components/KtFirPsiTypeProvider.kt | 4 ++-- ...sisApiExpressionPsiTypeProviderTestGenerated.java | 12 ++++++++++++ ...sisApiExpressionPsiTypeProviderTestGenerated.java | 12 ++++++++++++ ...sisApiExpressionPsiTypeProviderTestGenerated.java | 12 ++++++++++++ .../psiType/forExpression/class_object_call.kt | 11 +++++++++++ .../psiType/forExpression/class_object_call.txt | 2 ++ .../forExpression/class_object_constructor.kt | 11 +++++++++++ .../forExpression/class_object_constructor.txt | 2 ++ 9 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt create mode 100644 analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.txt create mode 100644 analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt create mode 100644 analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10PsiTypeProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10PsiTypeProvider.kt index 08d38b6c8ef..b453b5e45d1 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10PsiTypeProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10PsiTypeProvider.kt @@ -85,9 +85,8 @@ internal class KtFe10PsiTypeProvider( val canonicalSignature = signatureWriter.toString() require(!canonicalSignature.contains(SpecialNames.ANONYMOUS_STRING)) - if (canonicalSignature.contains("L")) { - return null - } + if (canonicalSignature.contains("L")) return null + if (canonicalSignature.contains(SpecialNames.NO_NAME_PROVIDED.asString())) return null val signature = StringCharacterIterator(canonicalSignature) val javaType = SignatureParsing.parseTypeString(signature, StubBuildingVisitor.GUESSING_MAPPER) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt index a7b4aad9764..932edc1e5d6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt @@ -191,10 +191,10 @@ internal fun ConeKotlinType.asPsiType( session.jvmTypeMapper.mapType(correctedType, mode, signatureWriter) val canonicalSignature = signatureWriter.toString() + require(!canonicalSignature.contains(SpecialNames.ANONYMOUS_STRING)) if (canonicalSignature.contains("L")) return null - - require(!canonicalSignature.contains(SpecialNames.ANONYMOUS_STRING)) + if (canonicalSignature.contains(SpecialNames.NO_NAME_PROVIDED.asString())) return null val signature = StringCharacterIterator(canonicalSignature) val javaType = SignatureParsing.parseTypeString(signature, StubBuildingVisitor.GUESSING_MAPPER) diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java index 8d28eb91ecb..45279c0ba40 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java @@ -46,6 +46,18 @@ public class FirIdeDependentAnalysisSourceModuleAnalysisApiExpressionPsiTypeProv KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("class_object_call.kt") + public void testClass_object_call() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt"); + } + + @Test + @TestMetadata("class_object_constructor.kt") + public void testClass_object_constructor() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt"); + } + @Test @TestMetadata("typeParamFlexibleUpperBound.kt") public void testTypeParamFlexibleUpperBound() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java index 807f6629d16..6cedaac04e3 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java @@ -46,6 +46,18 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProvide KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("class_object_call.kt") + public void testClass_object_call() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt"); + } + + @Test + @TestMetadata("class_object_constructor.kt") + public void testClass_object_constructor() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt"); + } + @Test @TestMetadata("typeParamFlexibleUpperBound.kt") public void testTypeParamFlexibleUpperBound() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java index 1a11bf42687..0b62b2dd116 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiTypeProviderTestGenerated.java @@ -46,6 +46,18 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiExpressionPsiType KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("class_object_call.kt") + public void testClass_object_call() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt"); + } + + @Test + @TestMetadata("class_object_constructor.kt") + public void testClass_object_constructor() throws Exception { + runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt"); + } + @Test @TestMetadata("typeParamFlexibleUpperBound.kt") public void testTypeParamFlexibleUpperBound() throws Exception { diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt new file mode 100644 index 00000000000..bef5c88e791 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.kt @@ -0,0 +1,11 @@ +class Outer() { + object { // + class Inner() {} + + fun getInner() = Inner() + } +} + +fun main(args: Array) { + val inner = Outer.getInner() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.txt new file mode 100644 index 00000000000..5615d699ced --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_call.txt @@ -0,0 +1,2 @@ +KtType: getInner +PsiType: null diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt new file mode 100644 index 00000000000..73bf36e3e1c --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.kt @@ -0,0 +1,11 @@ +class Outer() { + object { // + class Inner() {} + + fun getInner() = Inner() + } +} + +fun main(args: Array) { + val inner = Outer.getInner() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt new file mode 100644 index 00000000000..87bfa573ae0 --- /dev/null +++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt @@ -0,0 +1,2 @@ +KtType: Outer..Inner +PsiType: null