From cd483ad2318176b331810366f769d4082b5c9230 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 11 Feb 2021 10:38:28 +0300 Subject: [PATCH] FIR2IR: fix raw SAM conversion (avoid * in type arguments) --- .../generators/CallAndReferenceGenerator.kt | 5 +- .../FirBlackBoxCodegenTestGenerated.java | 6 ++ .../box/fir/KotlinDocumentationProvider.kt | 61 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++ .../LightAnalysisModeTestGenerated.java | 5 ++ 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 9b778371d07..77205c24102 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -626,7 +626,10 @@ class CallAndReferenceGenerator( if (!needSamConversion(argument, parameter)) { return this } - val samFirType = parameter.returnTypeRef.coneTypeSafe()?.let { substitutor.substituteOrSelf(it) } + val samFirType = parameter.returnTypeRef.coneTypeSafe()?.let { + val substituted = substitutor.substituteOrSelf(it) + if (substituted is ConeRawType) substituted.lowerBound else substituted + } var samType = samFirType?.toIrType(ConversionTypeContext.WITH_INVARIANT) ?: createErrorType() if (shouldUnwrapVarargType) { samType = samType.getArrayElementType(irBuiltIns) diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index b4bf69ddaf2..1da51faae4f 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -14882,6 +14882,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt"); } + @Test + @TestMetadata("KotlinDocumentationProvider.kt") + public void testKotlinDocumentationProvider() throws Exception { + runTest("compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt"); + } + @Test @TestMetadata("LookupTags.kt") public void testLookupTags() throws Exception { diff --git a/compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt b/compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt new file mode 100644 index 00000000000..eb84f4a9dae --- /dev/null +++ b/compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt @@ -0,0 +1,61 @@ +// TARGET_BACKEND: JVM +// FULL_JDK + +// MODULE: lib +// FILE: PsiElement.java + +public interface PsiElement { + +} + +// FILE: PsiElementProcessor.java + +import org.jetbrains.annotations.NotNull; + +public interface PsiElementProcessor { + boolean execute (@NotNull T element); +} + +// FILE: PsiTreeUtil.java + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PsiTreeUtil { + public static boolean processElements(@Nullable PsiElement element, @NotNull PsiElementProcessor processor) { + return element != null; + } +} + +// MODULE: main(lib) +// FILE: KotlinDocumentationProvider.kt + +import java.util.function.Consumer + +interface PsiFile : PsiElement { + val name: String +} + +class KtFile(override val name: String) : PsiFile { + val docComment: PsiDocCommentBase get() = PsiDocCommentBase() +} + +class PsiDocCommentBase : PsiElement + +fun collectDocComments(file: PsiFile, sink: Consumer): String { + if (file !is KtFile) return "FAIL" + + PsiTreeUtil.processElements(file) { + val comment = (it as? KtFile)?.docComment + if (comment != null) sink.accept(comment) + true + } + + return file.name +} + +fun box(): String { + return collectDocComments(KtFile("OK")) { + + } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index e22a1d45533..422a0c5d6cb 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -14882,6 +14882,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt"); } + @Test + @TestMetadata("KotlinDocumentationProvider.kt") + public void testKotlinDocumentationProvider() throws Exception { + runTest("compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt"); + } + @Test @TestMetadata("LookupTags.kt") public void testLookupTags() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 670868564e0..87555c2b540 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -14882,6 +14882,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt"); } + @Test + @TestMetadata("KotlinDocumentationProvider.kt") + public void testKotlinDocumentationProvider() throws Exception { + runTest("compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt"); + } + @Test @TestMetadata("LookupTags.kt") public void testLookupTags() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 6c8a248169c..8c224ed249f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12308,6 +12308,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt"); } + @TestMetadata("KotlinDocumentationProvider.kt") + public void testKotlinDocumentationProvider() throws Exception { + runTest("compiler/testData/codegen/box/fir/KotlinDocumentationProvider.kt"); + } + @TestMetadata("LookupTags.kt") public void testLookupTags() throws Exception { runTest("compiler/testData/codegen/box/fir/LookupTags.kt"); -- GitLab