From 0f6f9011790f74fafb5f390d14aee1fada167077 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sat, 6 Aug 2022 15:52:19 +0200 Subject: [PATCH] [LL FIR] render type parameters resolve phase in tests --- .../classes/classWithTypeParameters.kt | 1 + .../classes/classWithTypeParameters.txt | 117 ++++++++++++++++++ .../functions/functionWithTypeParameters.kt | 1 + .../functions/functionWithTypeParameters.txt | 57 +++++++++ .../properties/propertyWithTypeParameters.kt | 2 + .../properties/propertyWithTypeParameters.txt | 75 +++++++++++ .../typeAliasWithTypeParameters.kt | 1 + .../typeAliasWithTypeParameters.txt | 52 ++++++++ .../typeParameterOfNonLocalFunction.txt | 26 ++-- .../typeParameterOfTopFunction.txt | 26 ++-- .../testdata/onAirResolve/classInClass.txt | 2 +- .../testdata/onAirResolve/memberInClass.txt | 2 +- .../AbstractFirLazyDeclarationResolveTest.kt | 3 +- ...irLazyDeclarationResolveTestGenerated.java | 64 ++++++++++ .../kotlin/fir/renderer/FirRenderer.kt | 1 + 15 files changed, 401 insertions(+), 29 deletions(-) create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.txt diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.kt b/analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.kt new file mode 100644 index 00000000000..326d9584703 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.kt @@ -0,0 +1 @@ +class ResolveMe() \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.txt b/analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.txt new file mode 100644 index 00000000000..c28c9b1513a --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.txt @@ -0,0 +1,117 @@ + +RAW_FIR: +FILE: classWithTypeParameters.kt + public? final? [RAW_FIR] class ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> : R|kotlin/Any| { + public? [RAW_FIR] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : Int, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +IMPORTS: +FILE: classWithTypeParameters.kt + public? final? [RAW_FIR] class ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> : R|kotlin/Any| { + public? [RAW_FIR] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : Int, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: classWithTypeParameters.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] class ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> : R|kotlin/Any| { + public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : Int, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +COMPANION_GENERATION: +FILE: classWithTypeParameters.kt + public? final? [COMPANION_GENERATION] class ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> : R|kotlin/Any| { + public? [COMPANION_GENERATION] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : Int, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +SUPER_TYPES: +FILE: classWithTypeParameters.kt + public? final? [SUPER_TYPES] class ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> : R|kotlin/Any| { + public? [SUPER_TYPES] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : Int, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +TYPES: +FILE: classWithTypeParameters.kt + public? final? [TYPES] class ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> : R|kotlin/Any| { + public? [TYPES] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +STATUS: +FILE: classWithTypeParameters.kt + public final [STATUS] class ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: classWithTypeParameters.kt + public final [ARGUMENTS_OF_ANNOTATIONS] class ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> : R|kotlin/Any| { + public [ARGUMENTS_OF_ANNOTATIONS] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +CONTRACTS: +FILE: classWithTypeParameters.kt + public final [CONTRACTS] class ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> : R|kotlin/Any| { + public [CONTRACTS] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: classWithTypeParameters.kt + public final [IMPLICIT_TYPES_BODY_RESOLVE] class ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> : R|kotlin/Any| { + public [IMPLICIT_TYPES_BODY_RESOLVE] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +EXPECT_ACTUAL_MATCHING: +FILE: classWithTypeParameters.kt + public final [EXPECT_ACTUAL_MATCHING] class ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> : R|kotlin/Any| { + public [EXPECT_ACTUAL_MATCHING] [ContainingClassKey=ResolveMe] constructor<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K>(): R|ResolveMe| { + super() + } + + } + +BODY_RESOLVE: +FILE: classWithTypeParameters.kt + public final [BODY_RESOLVE] class ResolveMe<[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> : R|kotlin/Any| { + public [BODY_RESOLVE] [ContainingClassKey=ResolveMe] constructor<[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K>(): R|ResolveMe| { + super() + } + + } + +FILE RAW TO BODY: +FILE: classWithTypeParameters.kt + public final [BODY_RESOLVE] class ResolveMe<[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> : R|kotlin/Any| { + public [BODY_RESOLVE] [ContainingClassKey=ResolveMe] constructor<[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K>(): R|ResolveMe| { + super() + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.kt b/analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.kt new file mode 100644 index 00000000000..f006c4bd0b8 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.kt @@ -0,0 +1 @@ +fun resolveMe() {} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.txt b/analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.txt new file mode 100644 index 00000000000..b3def837d9e --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.txt @@ -0,0 +1,57 @@ + +RAW_FIR: +FILE: functionWithTypeParameters.kt + public? final? [RAW_FIR] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: functionWithTypeParameters.kt + public? final? [RAW_FIR] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: functionWithTypeParameters.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: functionWithTypeParameters.kt + public? final? [COMPANION_GENERATION] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: functionWithTypeParameters.kt + public? final? [SUPER_TYPES] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: functionWithTypeParameters.kt + public? final? [TYPES] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: functionWithTypeParameters.kt + public final [STATUS] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: functionWithTypeParameters.kt + public final [ARGUMENTS_OF_ANNOTATIONS] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: functionWithTypeParameters.kt + public final [CONTRACTS] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: functionWithTypeParameters.kt + public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { + } + +EXPECT_ACTUAL_MATCHING: +FILE: functionWithTypeParameters.kt + public final [EXPECT_ACTUAL_MATCHING] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { + } + +BODY_RESOLVE: +FILE: functionWithTypeParameters.kt + public final [BODY_RESOLVE] fun <[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> resolveMe(): R|kotlin/Unit| { + } + +FILE RAW TO BODY: +FILE: functionWithTypeParameters.kt + public final [BODY_RESOLVE] fun <[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> resolveMe(): R|kotlin/Unit| { + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.kt b/analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.kt new file mode 100644 index 00000000000..ca7dd266eab --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.kt @@ -0,0 +1,2 @@ +val T.resolveMe: K + get() = TODO() \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.txt b/analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.txt new file mode 100644 index 00000000000..1b3062fb61b --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.txt @@ -0,0 +1,75 @@ + +RAW_FIR: +FILE: propertyWithTypeParameters.kt + public? final? [RAW_FIR] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K + public? [RAW_FIR] get(): K { LAZY_BLOCK } + +IMPORTS: +FILE: propertyWithTypeParameters.kt + public? final? [RAW_FIR] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K + public? [RAW_FIR] get(): K { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: propertyWithTypeParameters.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K + public? [COMPILER_REQUIRED_ANNOTATIONS] get(): K { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: propertyWithTypeParameters.kt + public? final? [COMPANION_GENERATION] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K + public? [COMPANION_GENERATION] get(): K { LAZY_BLOCK } + +SUPER_TYPES: +FILE: propertyWithTypeParameters.kt + public? final? [SUPER_TYPES] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K + public? [SUPER_TYPES] get(): K { LAZY_BLOCK } + +TYPES: +FILE: propertyWithTypeParameters.kt + public? final? [TYPES] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K| + public? [TYPES] get(): R|K| { LAZY_BLOCK } + +STATUS: +FILE: propertyWithTypeParameters.kt + public final [STATUS] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K| + public [STATUS] get(): R|K| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: propertyWithTypeParameters.kt + public final [ARGUMENTS_OF_ANNOTATIONS] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K| + public [ARGUMENTS_OF_ANNOTATIONS] get(): R|K| { LAZY_BLOCK } + +CONTRACTS: +FILE: propertyWithTypeParameters.kt + public final [CONTRACTS] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K| + public [CONTRACTS] get(): R|K| { + ^ TODO#() + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: propertyWithTypeParameters.kt + public final [IMPLICIT_TYPES_BODY_RESOLVE] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K| + public [IMPLICIT_TYPES_BODY_RESOLVE] get(): R|K| { + ^ TODO#() + } + +EXPECT_ACTUAL_MATCHING: +FILE: propertyWithTypeParameters.kt + public final [EXPECT_ACTUAL_MATCHING] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K| + public [EXPECT_ACTUAL_MATCHING] get(): R|K| { + ^ TODO#() + } + +BODY_RESOLVE: +FILE: propertyWithTypeParameters.kt + public final [BODY_RESOLVE] val <[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> R|T|.resolveMe: R|K| + public [BODY_RESOLVE] get(): R|K| { + ^ R|kotlin/TODO|() + } + +FILE RAW TO BODY: +FILE: propertyWithTypeParameters.kt + public final [BODY_RESOLVE] val <[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> R|T|.resolveMe: R|K| + public [BODY_RESOLVE] get(): R|K| { + ^ R|kotlin/TODO|() + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.kt b/analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.kt new file mode 100644 index 00000000000..436d0800d8a --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.kt @@ -0,0 +1 @@ +typealias ResolveMe = Map \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.txt b/analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.txt new file mode 100644 index 00000000000..790aa034be8 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.txt @@ -0,0 +1,52 @@ + +RAW_FIR: +FILE: typeAliasWithTypeParameters.kt + public? final [RAW_FIR] typealias ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> = Map + +IMPORTS: +FILE: typeAliasWithTypeParameters.kt + public? final [RAW_FIR] typealias ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> = Map + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: typeAliasWithTypeParameters.kt + public? final [COMPILER_REQUIRED_ANNOTATIONS] typealias ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> = Map + +COMPANION_GENERATION: +FILE: typeAliasWithTypeParameters.kt + public? final [COMPANION_GENERATION] typealias ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> = Map + +SUPER_TYPES: +FILE: typeAliasWithTypeParameters.kt + public? final [SUPER_TYPES] typealias ResolveMe<[RAW_FIR] T : Int, [RAW_FIR] K> = R|kotlin/collections/Map| + +TYPES: +FILE: typeAliasWithTypeParameters.kt + public? final [TYPES] typealias ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> = R|kotlin/collections/Map| + +STATUS: +FILE: typeAliasWithTypeParameters.kt + public final [STATUS] typealias ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> = R|kotlin/collections/Map| + +ARGUMENTS_OF_ANNOTATIONS: +FILE: typeAliasWithTypeParameters.kt + public final [ARGUMENTS_OF_ANNOTATIONS] typealias ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> = R|kotlin/collections/Map| + +CONTRACTS: +FILE: typeAliasWithTypeParameters.kt + public final [CONTRACTS] typealias ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> = R|kotlin/collections/Map| + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: typeAliasWithTypeParameters.kt + public final [IMPLICIT_TYPES_BODY_RESOLVE] typealias ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> = R|kotlin/collections/Map| + +EXPECT_ACTUAL_MATCHING: +FILE: typeAliasWithTypeParameters.kt + public final [EXPECT_ACTUAL_MATCHING] typealias ResolveMe<[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> = R|kotlin/collections/Map| + +BODY_RESOLVE: +FILE: typeAliasWithTypeParameters.kt + public final [BODY_RESOLVE] typealias ResolveMe<[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> = R|kotlin/collections/Map| + +FILE RAW TO BODY: +FILE: typeAliasWithTypeParameters.kt + public final [BODY_RESOLVE] typealias ResolveMe<[BODY_RESOLVE] T : R|kotlin/Int|, [BODY_RESOLVE] K> = R|kotlin/collections/Map| diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt b/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt index bbb8d8f55b7..9695cb8d3ae 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt @@ -6,7 +6,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public? final? [RAW_FIR] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [RAW_FIR] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -17,7 +17,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public? final? [RAW_FIR] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [RAW_FIR] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -28,7 +28,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -39,7 +39,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public? final? [COMPANION_GENERATION] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [COMPANION_GENERATION] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -50,7 +50,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public? final? [SUPER_TYPES] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [SUPER_TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -61,7 +61,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public? final? [TYPES] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -72,7 +72,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [STATUS] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public final [STATUS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -83,7 +83,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [ARGUMENTS_OF_ANNOTATIONS] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public final [ARGUMENTS_OF_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -94,7 +94,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [CONTRACTS] fun ddd(): R|kotlin/Unit| { + public final [CONTRACTS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { } } @@ -106,7 +106,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [IMPLICIT_TYPES_BODY_RESOLVE] fun ddd(): R|kotlin/Unit| { + public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { } } @@ -118,7 +118,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [EXPECT_ACTUAL_MATCHING] fun ddd(): R|kotlin/Unit| { + public final [EXPECT_ACTUAL_MATCHING] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { } } @@ -130,7 +130,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [BODY_RESOLVE] fun ddd(): R|kotlin/Unit| { + public final [BODY_RESOLVE] fun <[BODY_RESOLVE] resolveMe> ddd(): R|kotlin/Unit| { } } @@ -142,7 +142,7 @@ FILE: typeParameterOfNonLocalFunction.kt super() } - public final [BODY_RESOLVE] fun ddd(): R|kotlin/Unit| { + public final [BODY_RESOLVE] fun <[BODY_RESOLVE] resolveMe> ddd(): R|kotlin/Unit| { } } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfTopFunction.txt b/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfTopFunction.txt index 3b70d35322f..6421f6a7a1c 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfTopFunction.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfTopFunction.txt @@ -1,57 +1,57 @@ RAW_FIR: FILE: typeParameterOfTopFunction.kt - public? final? [RAW_FIR] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [RAW_FIR] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } IMPORTS: FILE: typeParameterOfTopFunction.kt - public? final? [RAW_FIR] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [RAW_FIR] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } COMPILER_REQUIRED_ANNOTATIONS: FILE: typeParameterOfTopFunction.kt - public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } COMPANION_GENERATION: FILE: typeParameterOfTopFunction.kt - public? final? [COMPANION_GENERATION] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [COMPANION_GENERATION] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } SUPER_TYPES: FILE: typeParameterOfTopFunction.kt - public? final? [SUPER_TYPES] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [SUPER_TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } TYPES: FILE: typeParameterOfTopFunction.kt - public? final? [TYPES] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public? final? [TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } STATUS: FILE: typeParameterOfTopFunction.kt - public final [STATUS] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public final [STATUS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } ARGUMENTS_OF_ANNOTATIONS: FILE: typeParameterOfTopFunction.kt - public final [ARGUMENTS_OF_ANNOTATIONS] fun ddd(): R|kotlin/Unit| { LAZY_BLOCK } + public final [ARGUMENTS_OF_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK } CONTRACTS: FILE: typeParameterOfTopFunction.kt - public final [CONTRACTS] fun ddd(): R|kotlin/Unit| { + public final [CONTRACTS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { } IMPLICIT_TYPES_BODY_RESOLVE: FILE: typeParameterOfTopFunction.kt - public final [IMPLICIT_TYPES_BODY_RESOLVE] fun ddd(): R|kotlin/Unit| { + public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { } EXPECT_ACTUAL_MATCHING: FILE: typeParameterOfTopFunction.kt - public final [EXPECT_ACTUAL_MATCHING] fun ddd(): R|kotlin/Unit| { + public final [EXPECT_ACTUAL_MATCHING] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { } BODY_RESOLVE: FILE: typeParameterOfTopFunction.kt - public final [BODY_RESOLVE] fun ddd(): R|kotlin/Unit| { + public final [BODY_RESOLVE] fun <[BODY_RESOLVE] resolveMe> ddd(): R|kotlin/Unit| { } FILE RAW TO BODY: FILE: typeParameterOfTopFunction.kt - public final [BODY_RESOLVE] fun ddd(): R|kotlin/Unit| { + public final [BODY_RESOLVE] fun <[BODY_RESOLVE] resolveMe> ddd(): R|kotlin/Unit| { } diff --git a/analysis/low-level-api-fir/testdata/onAirResolve/classInClass.txt b/analysis/low-level-api-fir/testdata/onAirResolve/classInClass.txt index 572976b84c2..568ea03436c 100644 --- a/analysis/low-level-api-fir/testdata/onAirResolve/classInClass.txt +++ b/analysis/low-level-api-fir/testdata/onAirResolve/classInClass.txt @@ -1,4 +1,4 @@ -public final inner [BODY_RESOLVE] class ONAIR : R|X.BASE| { +public final inner [BODY_RESOLVE] class ONAIR<[RAW_FIR] T> : R|X.BASE| { public [BODY_RESOLVE] X.constructor(): R|X.ONAIR| { super() } diff --git a/analysis/low-level-api-fir/testdata/onAirResolve/memberInClass.txt b/analysis/low-level-api-fir/testdata/onAirResolve/memberInClass.txt index 21e5cf140bc..6bf89751dba 100644 --- a/analysis/low-level-api-fir/testdata/onAirResolve/memberInClass.txt +++ b/analysis/low-level-api-fir/testdata/onAirResolve/memberInClass.txt @@ -1,3 +1,3 @@ -public final [BODY_RESOLVE] fun niewbe([BODY_RESOLVE] a: R|kotlin/Char|, [BODY_RESOLVE] b: R|kotlin/Double|): R|kotlin/String| { +public final [BODY_RESOLVE] fun <[BODY_RESOLVE] K> niewbe([BODY_RESOLVE] a: R|kotlin/Char|, [BODY_RESOLVE] b: R|kotlin/Double|): R|kotlin/String| { ^niewbe String(Trololo) } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt index 43cad476144..c4c16b6cf0c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.test.directives.ConfigurationDirectives import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.assertions +import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly import org.junit.jupiter.api.parallel.Execution import org.junit.jupiter.api.parallel.ExecutionMode @@ -39,7 +40,7 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle override fun visitElement(element: FirElement) { if (result != null) return val declaration = element.realPsi as? KtDeclaration - if (element is FirDeclaration && declaration != null && declaration.name == "resolveMe") { + if (element is FirDeclaration && declaration != null && declaration.name?.decapitalizeAsciiOnly() == "resolveMe") { result = element return } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java index 63698230072..c1552492b64 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java @@ -137,4 +137,68 @@ public class FirLazyDeclarationResolveTestGenerated extends AbstractFirLazyDecla public void testTypeParameterOfTopSetter() throws Exception { runTest("analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfTopSetter.kt"); } + + @Nested + @TestMetadata("analysis/low-level-api-fir/testdata/lazyResolve/classes") + @TestDataPath("$PROJECT_ROOT") + public class Classes { + @Test + public void testAllFilesPresentInClasses() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/lazyResolve/classes"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classWithTypeParameters.kt") + public void testClassWithTypeParameters() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/classes/classWithTypeParameters.kt"); + } + } + + @Nested + @TestMetadata("analysis/low-level-api-fir/testdata/lazyResolve/functions") + @TestDataPath("$PROJECT_ROOT") + public class Functions { + @Test + public void testAllFilesPresentInFunctions() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/lazyResolve/functions"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("functionWithTypeParameters.kt") + public void testFunctionWithTypeParameters() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/functions/functionWithTypeParameters.kt"); + } + } + + @Nested + @TestMetadata("analysis/low-level-api-fir/testdata/lazyResolve/properties") + @TestDataPath("$PROJECT_ROOT") + public class Properties { + @Test + public void testAllFilesPresentInProperties() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/lazyResolve/properties"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("propertyWithTypeParameters.kt") + public void testPropertyWithTypeParameters() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/properties/propertyWithTypeParameters.kt"); + } + } + + @Nested + @TestMetadata("analysis/low-level-api-fir/testdata/lazyResolve/typeAliases") + @TestDataPath("$PROJECT_ROOT") + public class TypeAliases { + @Test + public void testAllFilesPresentInTypeAliases() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/lazyResolve/typeAliases"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("typeAliasWithTypeParameters.kt") + public void testTypeAliasWithTypeParameters() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/typeAliases/typeAliasWithTypeParameters.kt"); + } + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index b4a3b52f37b..edc105630c7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -390,6 +390,7 @@ class FirRenderer( override fun visitTypeParameter(typeParameter: FirTypeParameter) { annotationRenderer?.render(typeParameter) modifierRenderer.renderModifiers(typeParameter) + resolvePhaseRenderer?.render(typeParameter) typeParameter.variance.renderVariance() print(typeParameter.name)