From a4df0aaa7d85ece0eef53c8dfb15cff8fb99afed Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 18 Nov 2021 11:51:14 +0300 Subject: [PATCH] FIR: Add test --- ...nosisCompilerFirTestdataTestGenerated.java | 12 ++++ .../annotationArgumentMapping.fir.txt | 66 +++++++++++++++++++ .../delegates/annotationArgumentMapping.kt | 39 +++++++++++ .../delegates/sequentialLazy.fir.txt | 29 ++++++++ .../delegates/sequentialLazy.kt | 13 ++++ .../runners/FirDiagnosticTestGenerated.java | 12 ++++ ...DiagnosticsWithLightTreeTestGenerated.java | 12 ++++ 7 files changed, 183 insertions(+) create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 20e239ca1a6..53210c5640a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -4949,6 +4949,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationArgumentMapping.kt") + public void testAnnotationArgumentMapping() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt"); + } + @Test @TestMetadata("anonymousInDelegate.kt") public void testAnonymousInDelegate() throws Exception { @@ -4997,6 +5003,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/propertyWithFunctionalType.kt"); } + @Test + @TestMetadata("sequentialLazy.kt") + public void testSequentialLazy() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt"); + } + @Test @TestMetadata("simpleDelegateProvider.kt") public void testSimpleDelegateProvider() throws Exception { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.fir.txt new file mode 100644 index 00000000000..56bb47cc6f3 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.fir.txt @@ -0,0 +1,66 @@ +FILE: annotationArgumentMapping.kt + public final class FirAnnotationArgumentMappingBuilder : R|kotlin/Any| { + public constructor(): R|FirAnnotationArgumentMappingBuilder| { + super() + } + + public final val mapping: R|kotlin/collections/MutableMap| = R|kotlin/collections/mutableMapOf|() + public get(): R|kotlin/collections/MutableMap| + + public final fun build(): R|FirAnnotationArgumentMapping| { + ^build R|/FirAnnotationArgumentMapping.FirAnnotationArgumentMapping|(this@R|/FirAnnotationArgumentMappingBuilder|.R|/FirAnnotationArgumentMappingBuilder.mapping|) + } + + } + public final fun buildAnnotationArgumentMapping(init: R|FirAnnotationArgumentMappingBuilder.() -> kotlin/Unit|): R|FirAnnotationArgumentMapping| + [R|Contract description] + < + CallsInPlace(init, EXACTLY_ONCE) + > + { + [StubStatement] + ^buildAnnotationArgumentMapping R|/FirAnnotationArgumentMappingBuilder.FirAnnotationArgumentMappingBuilder|().R|kotlin/apply|(R|/init|).R|/FirAnnotationArgumentMappingBuilder.build|() + } + public final class FirAnnotationArgumentMapping : R|kotlin/Any| { + public constructor(mapping: R|kotlin/collections/Map|): R|FirAnnotationArgumentMapping| { + super() + } + + } + public final class ValueParameter : R|kotlin/Any| { + public constructor(name: R|kotlin/String|): R|ValueParameter| { + super() + } + + public final val name: R|kotlin/String| = R|/name| + public get(): R|kotlin/String| + + } + public final class Argument : R|kotlin/Any| { + public constructor(name: R|kotlin/String|): R|Argument| { + super() + } + + public final val name: R|kotlin/String| = R|/name| + public get(): R|kotlin/String| + + } + public final fun createArgumentMapping(valueParameters: R|kotlin/collections/List?|, arguments: R|kotlin/collections/List|): R|FirAnnotationArgumentMapping| { + ^createArgumentMapping R|/buildAnnotationArgumentMapping|( = build@fun R|FirAnnotationArgumentMappingBuilder|.(): R|kotlin/Unit| { + lval parameterByName: R|kotlin/collections/Map?|by R|kotlin/lazy|?|>( = lazy@fun (): R|kotlin/collections/Map?| { + lval valueParameters: R|kotlin/collections/List| = R|/valueParameters| ?: ^@lazy Null(null) + ^ R|/valueParameters|.R|kotlin/collections/associateBy|( = associateBy@fun (it: R|ValueParameter|): R|kotlin/String| { + ^ R|/it|.R|/ValueParameter.name| + } + ) + } + ) + R|/arguments|.R|kotlin/collections/mapNotNull||>( = mapNotNull@fun (it: R|Argument|): R|kotlin/Pair?| { + lval name: R|kotlin/String| = R|/it|.R|/Argument.name| + lval value: R|kotlin/String| = R|/parameterByName|?.{ $subj$.R|SubstitutionOverride|(R|/name|) }?.{ $subj$.R|/ValueParameter.name| } ?: ^@mapNotNull Null(null) + ^ R|/name|.R|kotlin/to|(R|/value|) + } + ).R|kotlin/collections/toMap||>(this@R|special/anonymous|.R|/FirAnnotationArgumentMappingBuilder.mapping|) + } + ) + } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt new file mode 100644 index 00000000000..0c10fe34d08 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt @@ -0,0 +1,39 @@ +import kotlin.contracts.* + +class FirAnnotationArgumentMappingBuilder { + val mapping: MutableMap = mutableMapOf() + + fun build(): FirAnnotationArgumentMapping { + return FirAnnotationArgumentMapping(mapping) + } +} + +fun buildAnnotationArgumentMapping(init: FirAnnotationArgumentMappingBuilder.() -> Unit): FirAnnotationArgumentMapping { + contract { + callsInPlace(init, InvocationKind.EXACTLY_ONCE) + } + return FirAnnotationArgumentMappingBuilder().apply(init).build() +} + +class FirAnnotationArgumentMapping(mapping: Map) + +class ValueParameter(val name: String) +class Argument(val name: String) + +fun createArgumentMapping( + valueParameters: List?, + arguments: List +): FirAnnotationArgumentMapping { + return buildAnnotationArgumentMapping build@{ + val parameterByName: Map? by lazy { + val valueParameters = valueParameters ?: return@lazy null + valueParameters.associateBy { it.name } + } + + arguments.mapNotNull { + val name = it.name + val value = parameterByName?.get(name)?.name ?: return@mapNotNull null + name to value + }.toMap(mapping) + } +} diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.fir.txt new file mode 100644 index 00000000000..5c818414e05 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.fir.txt @@ -0,0 +1,29 @@ +FILE: sequentialLazy.kt + public final class Some : R|kotlin/Any| { + public constructor(classNames: R|() -> kotlin/collections/Collection|): R|Some| { + super() + } + + internal final val first: R|kotlin/collections/Set|by R|kotlin/lazy||>( = lazy@fun (): R|kotlin/collections/Set| { + ^ R|/classNames|.R|SubstitutionOverride|>|().R|kotlin/collections/toSet|() + } + ) + internal get(): R|kotlin/collections/Set| { + ^ this@R|/Some|.D|/Some.first|.R|kotlin/getValue||>(this@R|/Some|, ::R|/Some.first|) + } + + private final val second: R|kotlin/collections/Set?|by R|kotlin/lazy|?|>( = lazy@fun (): R|kotlin/collections/Set?| { + lval nonDeclaredNames: R|kotlin/collections/Set| = this@R|/Some|.R|/Some.getNonDeclaredClassifierNames|() ?: ^@lazy Null(null) + lval allNames: R|kotlin/collections/Set| = this@R|/Some|.R|/Some.first|.R|kotlin/collections/plus|(R|/nonDeclaredNames|) + ^ R|/allNames| + } + ) + private get(): R|kotlin/collections/Set?| { + ^ this@R|/Some|.D|/Some.second|.R|kotlin/getValue|?|>(this@R|/Some|, ::R|/Some.second|) + } + + public final fun getNonDeclaredClassifierNames(): R|kotlin/collections/Set?| { + ^getNonDeclaredClassifierNames Null(null) + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt new file mode 100644 index 00000000000..6fa06ad3142 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt @@ -0,0 +1,13 @@ +class Some(classNames: () -> Collection) { + internal val first by lazy { + classNames().toSet() + } + + private val second by lazy { + val nonDeclaredNames = getNonDeclaredClassifierNames() ?: return@lazy null + val allNames = first + nonDeclaredNames + allNames + } + + fun getNonDeclaredClassifierNames(): Set? = null +} \ No newline at end of file diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index 2b2ebd4717e..0df3f1c7462 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -4949,6 +4949,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationArgumentMapping.kt") + public void testAnnotationArgumentMapping() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt"); + } + @Test @TestMetadata("anonymousInDelegate.kt") public void testAnonymousInDelegate() throws Exception { @@ -4997,6 +5003,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/propertyWithFunctionalType.kt"); } + @Test + @TestMetadata("sequentialLazy.kt") + public void testSequentialLazy() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt"); + } + @Test @TestMetadata("simpleDelegateProvider.kt") public void testSimpleDelegateProvider() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 5d1ab00b6e5..9000d722457 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -4949,6 +4949,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates"), Pattern.compile("^([^.]+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationArgumentMapping.kt") + public void testAnnotationArgumentMapping() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/annotationArgumentMapping.kt"); + } + @Test @TestMetadata("anonymousInDelegate.kt") public void testAnonymousInDelegate() throws Exception { @@ -4997,6 +5003,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/propertyWithFunctionalType.kt"); } + @Test + @TestMetadata("sequentialLazy.kt") + public void testSequentialLazy() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/sequentialLazy.kt"); + } + @Test @TestMetadata("simpleDelegateProvider.kt") public void testSimpleDelegateProvider() throws Exception {