K2: Adjust renaming on import for current package with K1 rules
Namely, once a file in a package `foo` has import `foo.bar as baz`, auto imported `bar` from the package name becomes inivisible in the file ^KT-54854 Fixed
This commit is contained in:
committed by
Space Team
parent
5d7ac18778
commit
60f09f6512
+6
@@ -14202,6 +14202,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentName.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromCurrentWithDifferentNameComplex.kt")
|
||||
public void testImportFromCurrentWithDifferentNameComplex() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentNameComplex.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromObject.kt")
|
||||
public void testImportFromObject() throws Exception {
|
||||
|
||||
+6
@@ -14202,6 +14202,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentName.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromCurrentWithDifferentNameComplex.kt")
|
||||
public void testImportFromCurrentWithDifferentNameComplex() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentNameComplex.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromObject.kt")
|
||||
public void testImportFromObject() throws Exception {
|
||||
|
||||
+6
@@ -14202,6 +14202,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentName.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromCurrentWithDifferentNameComplex.kt")
|
||||
public void testImportFromCurrentWithDifferentNameComplex() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentNameComplex.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromObject.kt")
|
||||
public void testImportFromObject() throws Exception {
|
||||
|
||||
+6
@@ -14208,6 +14208,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentName.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromCurrentWithDifferentNameComplex.kt")
|
||||
public void testImportFromCurrentWithDifferentNameComplex() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentNameComplex.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromObject.kt")
|
||||
public void testImportFromObject() throws Exception {
|
||||
|
||||
+11
-1
@@ -23,17 +23,23 @@ import org.jetbrains.kotlin.utils.SmartList
|
||||
class FirPackageMemberScope(
|
||||
val fqName: FqName,
|
||||
val session: FirSession,
|
||||
private val symbolProvider: FirSymbolProvider = session.symbolProvider
|
||||
private val symbolProvider: FirSymbolProvider = session.symbolProvider,
|
||||
excludedImportNames: Collection<FqName>? = null,
|
||||
) : FirScope() {
|
||||
private val classifierCache: MutableMap<Name, FirClassifierSymbol<*>?> = mutableMapOf()
|
||||
private val functionCache: MutableMap<Name, List<FirNamedFunctionSymbol>> = mutableMapOf()
|
||||
private val propertyCache: MutableMap<Name, List<FirPropertySymbol>> = mutableMapOf()
|
||||
|
||||
private val excludedNames by lazy {
|
||||
excludedImportNames?.mapNotNullTo(mutableSetOf()) { if (it.parent() == fqName) it.shortName() else null }.orEmpty()
|
||||
}
|
||||
|
||||
override fun processClassifiersByNameWithSubstitution(
|
||||
name: Name,
|
||||
processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit
|
||||
) {
|
||||
if (name.asString().isEmpty()) return
|
||||
if (name in excludedNames) return
|
||||
|
||||
val symbol = classifierCache.getOrPut(name) {
|
||||
val unambiguousFqName = ClassId(fqName, name)
|
||||
@@ -46,6 +52,8 @@ class FirPackageMemberScope(
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
if (name in excludedNames) return
|
||||
|
||||
val symbols = functionCache.getOrPut(name) {
|
||||
symbolProvider.getTopLevelFunctionSymbols(fqName, name)
|
||||
}
|
||||
@@ -55,6 +63,8 @@ class FirPackageMemberScope(
|
||||
}
|
||||
|
||||
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
|
||||
if (name in excludedNames) return
|
||||
|
||||
val symbols = propertyCache.getOrPut(name) {
|
||||
symbolProvider.getTopLevelPropertySymbols(fqName, name)
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ private fun doCreateImportingScopes(
|
||||
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH)
|
||||
},
|
||||
scopeSession.getOrBuild(file.packageFqName, PACKAGE_MEMBER) {
|
||||
FirPackageMemberScope(file.packageFqName, session)
|
||||
FirPackageMemberScope(file.packageFqName, session, excludedImportNames = excludedImportNames)
|
||||
},
|
||||
// TODO: explicit simple importing scope should have highest priority (higher than inner scopes added in process)
|
||||
FirExplicitSimpleImportingScope(file.imports, session, scopeSession)
|
||||
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
package a
|
||||
|
||||
import a.A as ER
|
||||
|
||||
interface A {
|
||||
val a: A
|
||||
val b: ER
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package a
|
||||
|
||||
import a.A as ER
|
||||
|
||||
Vendored
+29
@@ -0,0 +1,29 @@
|
||||
// ISSUE: KT-54854
|
||||
package a
|
||||
|
||||
import a.A as ER
|
||||
import a.x as y
|
||||
import a.foo as bar
|
||||
|
||||
val x: Int = 1
|
||||
|
||||
fun foo(): Int = 1
|
||||
|
||||
class A
|
||||
|
||||
interface B {
|
||||
val a: <!UNRESOLVED_REFERENCE!>A<!>
|
||||
val b: ER
|
||||
}
|
||||
|
||||
fun main() {
|
||||
<!UNRESOLVED_REFERENCE!>A<!>()
|
||||
ER()
|
||||
a.A()
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>x<!> + 1
|
||||
y + 1
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>foo<!>() + 1
|
||||
bar() + 1
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// ISSUE: KT-54854
|
||||
package a
|
||||
|
||||
import a.A as ER
|
||||
import a.x as y
|
||||
import a.foo as bar
|
||||
|
||||
val x: Int = 1
|
||||
|
||||
fun foo(): Int = 1
|
||||
|
||||
class A
|
||||
|
||||
interface B {
|
||||
val a: <!UNRESOLVED_REFERENCE!>A<!>
|
||||
val b: ER
|
||||
}
|
||||
|
||||
fun main() {
|
||||
<!UNRESOLVED_REFERENCE!>A<!>()
|
||||
ER()
|
||||
a.A()
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>x<!> <!DEBUG_INFO_MISSING_UNRESOLVED!>+<!> 1
|
||||
y + 1
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>foo<!>() <!DEBUG_INFO_MISSING_UNRESOLVED!>+<!> 1
|
||||
bar() + 1
|
||||
}
|
||||
Generated
+6
@@ -14208,6 +14208,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentName.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromCurrentWithDifferentNameComplex.kt")
|
||||
public void testImportFromCurrentWithDifferentNameComplex() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/imports/ImportFromCurrentWithDifferentNameComplex.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ImportFromObject.kt")
|
||||
public void testImportFromObject() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user