From 9db9f58fba39843889c81cf232d00e59d263d546 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Wed, 13 Sep 2023 22:29:34 +0200 Subject: [PATCH] [AA] KtFirSymbolProviderByJavaPsi: Remove workaround for missing static callables in Java declared member scopes - Now that combined declared member scopes for Java classes contain static callables, we don't need to search symbols in the static member scope. (Note that the static member scope is too broad for this use case, as it contains symbols from superclasses, but we only need to look at declared members because the correct `containingClass` is already chosen.) ^KT-61901 ^KTIJ-25126 --- .../KtFirSymbolProviderByJavaPsi.kt | 5 +--- ...rceModuleSymbolByJavaPsiTestGenerated.java | 18 +++++++++++++++ ...rceModuleSymbolByJavaPsiTestGenerated.java | 18 +++++++++++++++ .../symbols/symbolByJavaPsi/javaField.kt | 9 ++++++++ .../symbolByJavaPsi/javaField.pretty.txt | 1 + .../symbols/symbolByJavaPsi/javaField.txt | 23 +++++++++++++++++++ .../javaFieldFromSuperclass.kt | 13 +++++++++++ .../javaFieldFromSuperclass.pretty.txt | 1 + .../javaFieldFromSuperclass.txt | 23 +++++++++++++++++++ .../javaStaticFieldFromSuperclass.kt | 13 +++++++++++ .../javaStaticFieldFromSuperclass.pretty.txt | 1 + .../javaStaticFieldFromSuperclass.txt | 19 +++++++++++++++ 12 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.txt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolProviderByJavaPsi.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolProviderByJavaPsi.kt index babe34823a0..b3abe83e7a3 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolProviderByJavaPsi.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirSymbolProviderByJavaPsi.kt @@ -39,10 +39,7 @@ internal class KtFirSymbolProviderByJavaPsi( val containingClass = callable.containingClass ?: return null val classSymbol = getNamedClassSymbol(containingClass) ?: return null return with(analysisSession) { - listOfNotNull(classSymbol.getDeclaredMemberScope(), classSymbol.getStaticMemberScope()) - .asCompositeScope() - .getCallableSymbols(name) - .firstOrNull { it.psi == callable } + classSymbol.getCombinedDeclaredMemberScope().getCallableSymbols(name).firstOrNull { it.psi == callable } } } } \ No newline at end of file diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java index 8a16031d556..ed8ebe79afa 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java @@ -46,9 +46,27 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated extend KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/symbolByJavaPsi"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("javaField.kt") + public void testJavaField() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt"); + } + + @Test + @TestMetadata("javaFieldFromSuperclass.kt") + public void testJavaFieldFromSuperclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.kt"); + } + @Test @TestMetadata("javaStaticField.kt") public void testJavaStaticField() throws Exception { runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticField.kt"); } + + @Test + @TestMetadata("javaStaticFieldFromSuperclass.kt") + public void testJavaStaticFieldFromSuperclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.kt"); + } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java index dfee5d29003..94fa31381fd 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated.java @@ -46,9 +46,27 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByJavaPsiTestGenerated KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/symbolByJavaPsi"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("javaField.kt") + public void testJavaField() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt"); + } + + @Test + @TestMetadata("javaFieldFromSuperclass.kt") + public void testJavaFieldFromSuperclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.kt"); + } + @Test @TestMetadata("javaStaticField.kt") public void testJavaStaticField() throws Exception { runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticField.kt"); } + + @Test + @TestMetadata("javaStaticFieldFromSuperclass.kt") + public void testJavaStaticFieldFromSuperclass() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.kt"); + } } diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt new file mode 100644 index 00000000000..d890218c29e --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.kt @@ -0,0 +1,9 @@ +// FILE: main.kt +fun some() { + JavaClass().count +} + +// FILE: JavaClass.java +public class JavaClass { + public Integer count = 0; +} diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.pretty.txt new file mode 100644 index 00000000000..6acf288ddbe --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.pretty.txt @@ -0,0 +1 @@ +open var count: kotlin.Int! diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.txt new file mode 100644 index 00000000000..34ae05a8089 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaField.txt @@ -0,0 +1,23 @@ +KtJavaFieldSymbol: + annotationsList: [] + callableIdIfNonLocal: /JavaClass.count + contextReceivers: [] + isExtension: false + isStatic: false + isVal: false + modality: OPEN + name: count + origin: JAVA + receiverParameter: null + returnType: KtFlexibleType: + annotationsList: [] + type: kotlin/Int! + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getDispatchReceiver(): KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: JavaClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.kt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.kt new file mode 100644 index 00000000000..1dabf07cbc8 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +fun some() { + JavaClass().count +} + +// FILE: SuperClass.java +public class SuperClass { + public Integer count = 0; +} + +// FILE: JavaClass.java +public class JavaClass extends SuperClass { +} diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.pretty.txt new file mode 100644 index 00000000000..6acf288ddbe --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.pretty.txt @@ -0,0 +1 @@ +open var count: kotlin.Int! diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.txt new file mode 100644 index 00000000000..1b6b16d23f4 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaFieldFromSuperclass.txt @@ -0,0 +1,23 @@ +KtJavaFieldSymbol: + annotationsList: [] + callableIdIfNonLocal: /SuperClass.count + contextReceivers: [] + isExtension: false + isStatic: false + isVal: false + modality: OPEN + name: count + origin: JAVA + receiverParameter: null + returnType: KtFlexibleType: + annotationsList: [] + type: kotlin/Int! + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getDispatchReceiver(): KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: SuperClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.kt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.kt new file mode 100644 index 00000000000..b062551d9c3 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.kt @@ -0,0 +1,13 @@ +// FILE: main.kt +fun some() { + JavaClass.count +} + +// FILE: SuperClass.java +public class SuperClass { + public static Integer count = 0; +} + +// FILE: JavaClass.java +public class JavaClass extends SuperClass { +} diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.pretty.txt new file mode 100644 index 00000000000..6acf288ddbe --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.pretty.txt @@ -0,0 +1 @@ +open var count: kotlin.Int! diff --git a/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.txt b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.txt new file mode 100644 index 00000000000..d022ea631ca --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByJavaPsi/javaStaticFieldFromSuperclass.txt @@ -0,0 +1,19 @@ +KtJavaFieldSymbol: + annotationsList: [] + callableIdIfNonLocal: /SuperClass.count + contextReceivers: [] + isExtension: false + isStatic: true + isVal: false + modality: OPEN + name: count + origin: JAVA + receiverParameter: null + returnType: KtFlexibleType: + annotationsList: [] + type: kotlin/Int! + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null