From fa2c49a311a5e537faab2bfef2f7e4d9bce01fed Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Wed, 12 Aug 2020 15:10:30 +0300 Subject: [PATCH] [Plugin API] Add extension point to contribute synthetic properties - needs to fix KT_41006 --- .../resolve/extensions/SyntheticResolveExtension.kt | 6 ++++++ .../resolve/lazy/descriptors/LazyClassMemberScope.kt | 11 +++++++++++ libraries/tools/kotlin-maven-serialization/pom.xml | 3 +++ 3 files changed, 20 insertions(+) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/SyntheticResolveExtension.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/SyntheticResolveExtension.kt index 30c7a96f4d8..2a0f755bcb4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/SyntheticResolveExtension.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/SyntheticResolveExtension.kt @@ -54,6 +54,9 @@ interface SyntheticResolveExtension { override fun getSyntheticFunctionNames(thisDescriptor: ClassDescriptor): List = instances.flatMap { withLinkageErrorLogger(it) { getSyntheticFunctionNames(thisDescriptor) } } + override fun getSyntheticPropertiesNames(thisDescriptor: ClassDescriptor): List = + instances.flatMap { withLinkageErrorLogger(it) { getSyntheticPropertiesNames(thisDescriptor) } } + override fun generateSyntheticClasses( thisDescriptor: ClassDescriptor, name: Name, ctx: LazyClassContext, declarationProvider: ClassMemberDeclarationProvider, @@ -142,6 +145,9 @@ interface SyntheticResolveExtension { fun getSyntheticFunctionNames(thisDescriptor: ClassDescriptor): List = emptyList() + @JvmDefault + fun getSyntheticPropertiesNames(thisDescriptor: ClassDescriptor): List = emptyList() + fun getSyntheticNestedClassNames(thisDescriptor: ClassDescriptor): List = emptyList() /** diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt index 006b1b63d3f..c1b429f25d0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassMemberScope.kt @@ -90,6 +90,7 @@ open class LazyClassMemberScope( addDataClassMethods(result, location) addSyntheticFunctions(result, location) + addSyntheticVariables(result, location) addSyntheticCompanionObject(result, location) addSyntheticNestedClasses(result, location) @@ -106,6 +107,7 @@ open class LazyClassMemberScope( by storageManager.createLazyValue { mutableSetOf().apply { addAll(declarationProvider.getDeclarationNames()) + addAll(c.syntheticResolveExtension.getSyntheticPropertiesNames(thisDescriptor)) supertypes.flatMapTo(this) { it.memberScope.getVariableNames() } @@ -344,6 +346,15 @@ open class LazyClassMemberScope( }.toList()) } + private fun addSyntheticVariables(result: MutableCollection, location: LookupLocation) { + result.addAll(c.syntheticResolveExtension.getSyntheticPropertiesNames(thisDescriptor).flatMap { + getContributedVariables( + it, + location + ) + }.toList()) + } + private fun addSyntheticNestedClasses(result: MutableCollection, location: LookupLocation) { result.addAll(c.syntheticResolveExtension.getSyntheticNestedClassNames(thisDescriptor).mapNotNull { getContributedClassifier( diff --git a/libraries/tools/kotlin-maven-serialization/pom.xml b/libraries/tools/kotlin-maven-serialization/pom.xml index 88e9cc4a166..834834c0744 100755 --- a/libraries/tools/kotlin-maven-serialization/pom.xml +++ b/libraries/tools/kotlin-maven-serialization/pom.xml @@ -74,6 +74,9 @@ 1.8 + + -Xjvm-default=enable +