KTIJ-26785 [AA] Filter JavaClassMembersEnhancementScope when shortening types
The same way as `FirClassUseSiteMemberScope` is present when there is an implicit receiver with a pure Kotlin type, `JavaClassMembersEnhancementScope` is present when the receiver's type comes from Java sources ^KTIJ-26785 Fixed
This commit is contained in:
+12
-3
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.fir.expressions.*
|
|||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall
|
import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||||
|
import org.jetbrains.kotlin.fir.java.scopes.JavaClassMembersEnhancementScope
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
@@ -694,10 +695,18 @@ private class ElementsToShortenCollector(
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class use-site member scopes may contain classifiers which are not actually available without explicit import.
|
* Class use-site member scopes may contain classifiers which are not actually available without explicit import.
|
||||||
*
|
* And if the class is declared in Java, it can be represented with JavaClassMembersEnhancementScope.
|
||||||
* See KTIJ-24684 and KTIJ-24662 for examples.
|
|
||||||
*/
|
*/
|
||||||
val scopes = positionScopes.filterNot { it is FirClassUseSiteMemberScope }
|
val scopes = positionScopes.filter {
|
||||||
|
when (it) {
|
||||||
|
// KTIJ-24684, KTIJ-24662
|
||||||
|
is FirClassUseSiteMemberScope -> false
|
||||||
|
// KTIJ-26785
|
||||||
|
is JavaClassMembersEnhancementScope -> false
|
||||||
|
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val name = classId.shortClassName
|
val name = classId.shortClassName
|
||||||
val availableClassifiers = shorteningContext.findClassifiersInScopesByName(scopes, name)
|
val availableClassifiers = shorteningContext.findClassifiersInScopesByName(scopes, name)
|
||||||
|
|||||||
+33
-3
@@ -518,9 +518,15 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes.kt")
|
@TestMetadata("nestedClassFromSupertypes1.kt")
|
||||||
public void testNestedClassFromSupertypes() throws Exception {
|
public void testNestedClassFromSupertypes1() throws Exception {
|
||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes1.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes1_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes1_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes1_java.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -529,12 +535,24 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
|||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes2.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes2_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes2_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes2_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes3.kt")
|
@TestMetadata("nestedClassFromSupertypes3.kt")
|
||||||
public void testNestedClassFromSupertypes3() throws Exception {
|
public void testNestedClassFromSupertypes3() throws Exception {
|
||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes3.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes3.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes3_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes3_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes3_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes4.kt")
|
@TestMetadata("nestedClassFromSupertypes4.kt")
|
||||||
public void testNestedClassFromSupertypes4() throws Exception {
|
public void testNestedClassFromSupertypes4() throws Exception {
|
||||||
@@ -547,12 +565,24 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
|||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes5.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes5.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes5_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes5_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes5_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes6.kt")
|
@TestMetadata("nestedClassFromSupertypes6.kt")
|
||||||
public void testNestedClassFromSupertypes6() throws Exception {
|
public void testNestedClassFromSupertypes6() throws Exception {
|
||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes6.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes6.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes6_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes6_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes6_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions")
|
@TestMetadata("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+33
-3
@@ -518,9 +518,15 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes.kt")
|
@TestMetadata("nestedClassFromSupertypes1.kt")
|
||||||
public void testNestedClassFromSupertypes() throws Exception {
|
public void testNestedClassFromSupertypes1() throws Exception {
|
||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes1.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes1_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes1_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes1_java.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -529,12 +535,24 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
|
|||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes2.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes2_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes2_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes2_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes3.kt")
|
@TestMetadata("nestedClassFromSupertypes3.kt")
|
||||||
public void testNestedClassFromSupertypes3() throws Exception {
|
public void testNestedClassFromSupertypes3() throws Exception {
|
||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes3.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes3.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes3_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes3_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes3_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes4.kt")
|
@TestMetadata("nestedClassFromSupertypes4.kt")
|
||||||
public void testNestedClassFromSupertypes4() throws Exception {
|
public void testNestedClassFromSupertypes4() throws Exception {
|
||||||
@@ -547,12 +565,24 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
|
|||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes5.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes5.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes5_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes5_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes5_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("nestedClassFromSupertypes6.kt")
|
@TestMetadata("nestedClassFromSupertypes6.kt")
|
||||||
public void testNestedClassFromSupertypes6() throws Exception {
|
public void testNestedClassFromSupertypes6() throws Exception {
|
||||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes6.kt");
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes6.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("nestedClassFromSupertypes6_java.kt")
|
||||||
|
public void testNestedClassFromSupertypes6_java() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/nestedClassFromSupertypes6_java.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions")
|
@TestMetadata("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.JavaInterface
|
||||||
|
|
||||||
|
class Foo : JavaInterface {
|
||||||
|
<expr>val prop: JavaInterface.Nested = JavaInterface.Nested()</expr>
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: dependency/JavaInterface.java
|
||||||
|
package dependency;
|
||||||
|
|
||||||
|
public interface JavaInterface {
|
||||||
|
public class Nested {}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
Before shortening: val prop: JavaInterface.Nested = JavaInterface.Nested()
|
||||||
|
with DO_NOT_SHORTEN:
|
||||||
|
with SHORTEN_IF_ALREADY_IMPORTED:
|
||||||
|
with SHORTEN_AND_IMPORT:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
|
with SHORTEN_AND_STAR_IMPORT:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.JavaInterface
|
||||||
|
import dependency.JavaInterface.Nested
|
||||||
|
|
||||||
|
class Foo : JavaInterface {
|
||||||
|
<expr>val prop: JavaInterface.Nested = JavaInterface.Nested()</expr>
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: dependency/JavaInterface.java
|
||||||
|
package dependency;
|
||||||
|
|
||||||
|
public interface JavaInterface {
|
||||||
|
public class Nested {}
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
Before shortening: val prop: JavaInterface.Nested = JavaInterface.Nested()
|
||||||
|
with DO_NOT_SHORTEN:
|
||||||
|
with SHORTEN_IF_ALREADY_IMPORTED:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
|
with SHORTEN_AND_IMPORT:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
|
with SHORTEN_AND_STAR_IMPORT:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.JavaBaseClass
|
||||||
|
|
||||||
|
class Foo : JavaBaseClass() {
|
||||||
|
<expr>val prop: JavaBaseClass.Nested = JavaBaseClass.Nested()</expr>
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: dependency/JavaBaseClass.java
|
||||||
|
package dependency;
|
||||||
|
|
||||||
|
public class JavaBaseClass {
|
||||||
|
public static class Nested {}
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
Before shortening: val prop: JavaBaseClass.Nested = JavaBaseClass.Nested()
|
||||||
|
with DO_NOT_SHORTEN:
|
||||||
|
with SHORTEN_IF_ALREADY_IMPORTED:
|
||||||
|
[type] JavaBaseClass.Nested
|
||||||
|
[qualifier] JavaBaseClass.Nested()
|
||||||
|
with SHORTEN_AND_IMPORT:
|
||||||
|
[type] JavaBaseClass.Nested
|
||||||
|
[qualifier] JavaBaseClass.Nested()
|
||||||
|
with SHORTEN_AND_STAR_IMPORT:
|
||||||
|
[type] JavaBaseClass.Nested
|
||||||
|
[qualifier] JavaBaseClass.Nested()
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.JavaInterface
|
||||||
|
|
||||||
|
fun JavaInterface.foo() {
|
||||||
|
<expr>val prop: JavaInterface.Nested = JavaInterface.Nested()</expr>
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: dependency/JavaInterface.java
|
||||||
|
package dependency;
|
||||||
|
|
||||||
|
public interface JavaInterface {
|
||||||
|
public class Nested {}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
Before shortening: val prop: JavaInterface.Nested = JavaInterface.Nested()
|
||||||
|
with DO_NOT_SHORTEN:
|
||||||
|
with SHORTEN_IF_ALREADY_IMPORTED:
|
||||||
|
with SHORTEN_AND_IMPORT:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
|
with SHORTEN_AND_STAR_IMPORT:
|
||||||
|
[type] JavaInterface.Nested
|
||||||
|
[qualifier] JavaInterface.Nested()
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.JavaBaseClass
|
||||||
|
|
||||||
|
fun JavaBaseClass.foo() {
|
||||||
|
<expr>val prop: JavaBaseClass.Nested = JavaBaseClass.Nested()</expr>
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: dependency/JavaBaseClass.java
|
||||||
|
package dependency;
|
||||||
|
|
||||||
|
public class JavaBaseClass {
|
||||||
|
public static class Nested {}
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
Before shortening: val prop: JavaBaseClass.Nested = JavaBaseClass.Nested()
|
||||||
|
with DO_NOT_SHORTEN:
|
||||||
|
with SHORTEN_IF_ALREADY_IMPORTED:
|
||||||
|
with SHORTEN_AND_IMPORT:
|
||||||
|
[type] JavaBaseClass.Nested
|
||||||
|
[qualifier] JavaBaseClass.Nested()
|
||||||
|
with SHORTEN_AND_STAR_IMPORT:
|
||||||
|
[type] JavaBaseClass.Nested
|
||||||
|
[qualifier] JavaBaseClass.Nested()
|
||||||
Reference in New Issue
Block a user