From 2ad93a0330420d38f6022cec95eeddeefba6d2ac Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 7 Feb 2018 11:17:22 +0300 Subject: [PATCH] Use extension registry when unpacking serialized type alias It's funny here that "extension" here means protobuf extensions while initial issue is about extension function types #Fixed KT-22728 --- .../compiledKotlin/typealias/TypeAliasToExtension.kt | 7 +++++++ .../compiledKotlin/typealias/TypeAliasToExtension.txt | 8 ++++++++ .../kotlin/jvm/compiler/LoadJavaTestGenerated.java | 6 ++++++ .../compiler/LoadKotlinWithTypeTableTestGenerated.java | 6 ++++++ .../compiler/javac/LoadJavaUsingJavacTestGenerated.java | 6 ++++++ .../runtime/JvmRuntimeDescriptorLoaderTestGenerated.java | 6 ++++++ .../descriptors/DeserializedMemberScope.kt | 5 ++++- 7 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt create mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.txt diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt b/compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt new file mode 100644 index 00000000000..5c923963e79 --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt @@ -0,0 +1,7 @@ +package test + +class Foo + +fun

foo(x: Foo

.() -> Unit) {} + +typealias MyHandler

= Foo

.() -> Unit diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.txt b/compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.txt new file mode 100644 index 00000000000..a47a21590ee --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.txt @@ -0,0 +1,8 @@ +package test + +public fun foo(/*0*/ x: test.Foo

.() -> kotlin.Unit): kotlin.Unit + +public final class Foo { + /*primary*/ public constructor Foo() +} +public typealias MyHandler = test.Foo

.() -> kotlin.Unit diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java index 66dc2ba41d6..303472f22a8 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java @@ -4870,6 +4870,12 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/Generic.kt"); doTestCompiledKotlin(fileName); } + + @TestMetadata("TypeAliasToExtension.kt") + public void testTypeAliasToExtension() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt"); + doTestCompiledKotlin(fileName); + } } @TestMetadata("compiler/testData/loadJava/compiledKotlin/visibility") diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java index cf35a7eda58..1d9b2d39a69 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java @@ -3077,6 +3077,12 @@ public class LoadKotlinWithTypeTableTestGenerated extends AbstractLoadKotlinWith String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/Generic.kt"); doTest(fileName); } + + @TestMetadata("TypeAliasToExtension.kt") + public void testTypeAliasToExtension() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/loadJava/compiledKotlin/visibility") diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java index e0829a4b528..36e4bf571be 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java @@ -4870,6 +4870,12 @@ public class LoadJavaUsingJavacTestGenerated extends AbstractLoadJavaUsingJavacT String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/Generic.kt"); doTestCompiledKotlin(fileName); } + + @TestMetadata("TypeAliasToExtension.kt") + public void testTypeAliasToExtension() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt"); + doTestCompiledKotlin(fileName); + } } @TestMetadata("compiler/testData/loadJava/compiledKotlin/visibility") diff --git a/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java b/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java index 6bada32d13d..51f71daceac 100644 --- a/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java +++ b/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java @@ -3079,6 +3079,12 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/Generic.kt"); doTest(fileName); } + + @TestMetadata("TypeAliasToExtension.kt") + public void testTypeAliasToExtension() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/loadJava/compiledKotlin/typealias/TypeAliasToExtension.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/loadJava/compiledKotlin/visibility") diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt index 81ac2083344..d01c7bb5d00 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt @@ -152,7 +152,10 @@ abstract class DeserializedMemberScope protected constructor( private fun createTypeAlias(name: Name): TypeAliasDescriptor? { val byteArray = typeAliasBytes[name] ?: return null - val proto = ProtoBuf.TypeAlias.parseDelimitedFrom(ByteArrayInputStream(byteArray)) ?: return null + val proto = + ProtoBuf.TypeAlias.parseDelimitedFrom( + ByteArrayInputStream(byteArray), c.components.extensionRegistryLite + ) ?: return null return c.memberDeserializer.loadTypeAlias(proto) }