[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
This commit is contained in:
Marco Pennekamp
2023-09-13 22:29:34 +02:00
committed by Space Team
parent df54540a81
commit 9db9f58fba
12 changed files with 140 additions and 4 deletions
@@ -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 }
}
}
}
@@ -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");
}
}
@@ -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");
}
}
@@ -0,0 +1,9 @@
// FILE: main.kt
fun some() {
JavaClass().<caret>count
}
// FILE: JavaClass.java
public class JavaClass {
public Integer count = 0;
}
@@ -0,0 +1 @@
open var count: kotlin.Int!
@@ -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
@@ -0,0 +1,13 @@
// FILE: main.kt
fun some() {
JavaClass().<caret>count
}
// FILE: SuperClass.java
public class SuperClass {
public Integer count = 0;
}
// FILE: JavaClass.java
public class JavaClass extends SuperClass {
}
@@ -0,0 +1 @@
open var count: kotlin.Int!
@@ -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
@@ -0,0 +1,13 @@
// FILE: main.kt
fun some() {
JavaClass.<caret>count
}
// FILE: SuperClass.java
public class SuperClass {
public static Integer count = 0;
}
// FILE: JavaClass.java
public class JavaClass extends SuperClass {
}
@@ -0,0 +1 @@
open var count: kotlin.Int!
@@ -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