Skip to content

Commit b239239

Browse files
mglukhikhSpace Team
authored and
Space Team
committed
K2: build outer classes sequence in FirImplicitBodyResolve properly
Before this commit, we used classId-based methods which didn't work correctly on local classes / objects, thus provoking exceptions. Now we use lookupTag-based methods which don't have such problems. #KT-67993 Fixed (cherry picked from commit 865f6fa)
1 parent afc5b49 commit b239239

File tree

29 files changed

+217
-3
lines changed

29 files changed

+217
-3
lines changed

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.resolve.FirRegularTowerDataContexts
1919
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
2020
import org.jetbrains.kotlin.fir.resolve.ScopeSession
2121
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
22+
import org.jetbrains.kotlin.fir.resolve.toSymbol
2223
import org.jetbrains.kotlin.fir.resolve.transformers.AdapterForResolveProcessor
2324
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
2425
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
@@ -310,9 +311,10 @@ open class ReturnTypeCalculatorWithJump(
310311
val file = provider.getFirCallableContainerFile(symbol)
311312
val script = file?.declarations?.firstIsInstanceOrNull<FirScript>()
312313

313-
val outerClasses = generateSequence(symbol.containingClassLookupTag()?.classId) { classId ->
314-
classId.outerClassId
315-
}.mapTo(mutableListOf()) { provider.getFirClassifierByFqName(it) }
314+
val containingClassLookupTag = symbol.containingClassLookupTag()
315+
val outerClasses = generateSequence(containingClassLookupTag) { lookupTag ->
316+
lookupTag.toSymbol(session)?.getContainingClassLookupTag()
317+
}.mapTo(mutableListOf()) { it.toSymbol(session)?.fir }
316318

317319
if (file == null || outerClasses.any { it == null }) {
318320
return buildErrorTypeRef {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// ISSUE: KT-67993
2+
// IGNORE_REVERSED_RESOLVE
3+
// IGNORE_NON_REVERSED_RESOLVE
4+
// Reason: see KT-68031
5+
6+
class Builder<T> {
7+
var res: T? = null
8+
9+
fun add(x: T) {
10+
res = x
11+
}
12+
}
13+
14+
fun <T> foo(build: Builder<T>.() -> Unit): T {
15+
return Builder<T>().apply(build).res!!
16+
}
17+
18+
class C {
19+
val a = foo {
20+
object {
21+
fun bar() {
22+
add(foo())
23+
}
24+
25+
private fun foo() = "OK"
26+
}.bar()
27+
}
28+
}
29+
30+
fun box(): String {
31+
return C().a
32+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// FIR_IDENTICAL
2+
// ISSUE: KT-67993
3+
// IGNORE_REVERSED_RESOLVE
4+
// IGNORE_NON_REVERSED_RESOLVE
5+
// Reason: see KT-68031
6+
7+
class Builder<T> {
8+
fun add(x: T) {}
9+
}
10+
11+
fun <T> foo(build: Builder<T>.() -> Unit) {
12+
Builder<T>().apply(build)
13+
}
14+
15+
class C {
16+
val a = foo {
17+
object {
18+
fun bar() {
19+
add(foo())
20+
}
21+
22+
private fun foo() = "..."
23+
}
24+
}
25+
}

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeCodegenBoxTestNoPLGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)