KTIJ-26501 [Analysis API] Do not ignore vararg type references in KtFirImportOptimizer
Turns out they have fake sources, so ignoring all
type qualifiers with fake sources in e1ebbc10d9
was incorrect.
^KTIJ-26501 Fixed
This commit is contained in:
+12
@@ -124,6 +124,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
|
|||||||
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unusedTypeAsVarargType.kt")
|
||||||
|
public void testUnusedTypeAsVarargType() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedTypeAsVarargType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
|
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
|
||||||
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
|
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
|
||||||
@@ -220,6 +226,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
|
|||||||
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("usedTypeAsVarargType.kt")
|
||||||
|
public void testUsedTypeAsVarargType() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsVarargType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
|
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+14
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.fir.components
|
package org.jetbrains.kotlin.analysis.api.fir.components
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.KtRealSourceElementKind
|
import org.jetbrains.kotlin.KtRealSourceElementKind
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizer
|
import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizer
|
||||||
import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizerResult
|
import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizerResult
|
||||||
@@ -490,8 +491,11 @@ private sealed interface TypeQualifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
val FirResolvedQualifier.isPresentInSource: Boolean
|
||||||
|
get() = source?.kind is KtRealSourceElementKind
|
||||||
|
|
||||||
fun createFor(qualifier: FirResolvedQualifier): TypeQualifier? {
|
fun createFor(qualifier: FirResolvedQualifier): TypeQualifier? {
|
||||||
if (qualifier.source?.kind !is KtRealSourceElementKind) return null
|
if (!qualifier.isPresentInSource) return null
|
||||||
|
|
||||||
val wholeClassId = qualifier.classId ?: return null
|
val wholeClassId = qualifier.classId ?: return null
|
||||||
val psi = qualifier.psi as? KtExpression ?: return null
|
val psi = qualifier.psi as? KtExpression ?: return null
|
||||||
@@ -505,8 +509,16 @@ private sealed interface TypeQualifier {
|
|||||||
return KtDotExpressionTypeQualifier(wholeClassId, wholeQualifier)
|
return KtDotExpressionTypeQualifier(wholeClassId, wholeQualifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val FirResolvedTypeRef.isPresentInSource: Boolean
|
||||||
|
get() = when (source?.kind) {
|
||||||
|
is KtRealSourceElementKind -> true
|
||||||
|
is KtFakeSourceElementKind.ArrayTypeFromVarargParameter -> true
|
||||||
|
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
|
||||||
fun createFor(typeRef: FirResolvedTypeRef): TypeQualifier? {
|
fun createFor(typeRef: FirResolvedTypeRef): TypeQualifier? {
|
||||||
if (typeRef.source?.kind !is KtRealSourceElementKind) return null
|
if (!typeRef.isPresentInSource) return null
|
||||||
|
|
||||||
val wholeClassId = typeRef.resolvedClassId ?: return null
|
val wholeClassId = typeRef.resolvedClassId ?: return null
|
||||||
val psi = typeRef.psi as? KtTypeReference ?: return null
|
val psi = typeRef.psi as? KtTypeReference ?: return null
|
||||||
|
|||||||
+12
@@ -124,6 +124,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
|
|||||||
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unusedTypeAsVarargType.kt")
|
||||||
|
public void testUnusedTypeAsVarargType() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedTypeAsVarargType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
|
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
|
||||||
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
|
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
|
||||||
@@ -220,6 +226,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
|
|||||||
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("usedTypeAsVarargType.kt")
|
||||||
|
public void testUsedTypeAsVarargType() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsVarargType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
|
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+12
@@ -124,6 +124,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
|
|||||||
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unusedTypeAsVarargType.kt")
|
||||||
|
public void testUnusedTypeAsVarargType() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedTypeAsVarargType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
|
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
|
||||||
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
|
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
|
||||||
@@ -220,6 +226,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
|
|||||||
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("usedTypeAsVarargType.kt")
|
||||||
|
public void testUsedTypeAsVarargType() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsVarargType.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
|
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
dependency.Bar
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.Bar
|
||||||
|
|
||||||
|
fun usage(vararg p: dependency.Bar) {}
|
||||||
|
|
||||||
|
// FILE: dependency.kt
|
||||||
|
package dependency
|
||||||
|
|
||||||
|
class Bar
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
// FILE: main.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
import dependency.Bar
|
||||||
|
|
||||||
|
fun usage(vararg p: Bar) {}
|
||||||
|
|
||||||
|
// FILE: dependency.kt
|
||||||
|
package dependency
|
||||||
|
|
||||||
|
class Bar
|
||||||
Reference in New Issue
Block a user