Check JvmRecordSupport language feature before generating synthetic properties

This commit is contained in:
Denis.Zharkov
2020-12-02 13:29:42 +03:00
parent a4bf36aee7
commit 695d0dbfbb
7 changed files with 37 additions and 11 deletions
@@ -94,7 +94,11 @@ interface SyntheticJavaPropertyDescriptor : PropertyDescriptor, SyntheticPropert
}
}
class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val lookupTracker: LookupTracker) : SyntheticScope.Default() {
class JavaSyntheticPropertiesScope(
storageManager: StorageManager,
private val lookupTracker: LookupTracker,
private val supportJavaRecords: Boolean,
) : SyntheticScope.Default() {
private val syntheticPropertyInClass =
storageManager.createMemoizedFunction<Pair<ClassDescriptor, Name>, SyntheticPropertyHolder> { pair ->
syntheticPropertyInClassNotCached(pair.first, pair.second)
@@ -178,6 +182,8 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l
name: Name,
ownerClass: ClassDescriptor
): PropertyDescriptor? {
if (!supportJavaRecords) return null
val componentLikeMethod =
ownerClass.unsubstitutedMemberScope
.getContributedFunctions(name, NoLookupLocation.FROM_SYNTHETIC_SCOPE)
@@ -22,9 +22,9 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.resolve.sam.SamConversionResolver
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
import org.jetbrains.kotlin.resolve.sam.SamConversionOracle
import org.jetbrains.kotlin.resolve.sam.SamConversionResolver
import org.jetbrains.kotlin.resolve.scopes.SyntheticScope
import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes
import org.jetbrains.kotlin.resolve.scopes.synthetic.FunInterfaceConstructorsSyntheticScope
@@ -52,7 +52,11 @@ class JavaSyntheticScopes(
languageVersionSettings.supportsFeature(LanguageFeature.SamConversionPerArgument) &&
languageVersionSettings.supportsFeature(LanguageFeature.NewInference)
val javaSyntheticPropertiesScope = JavaSyntheticPropertiesScope(storageManager, lookupTracker)
val javaSyntheticPropertiesScope =
JavaSyntheticPropertiesScope(
storageManager, lookupTracker,
supportJavaRecords = languageVersionSettings.supportsFeature(LanguageFeature.JvmRecordSupport)
)
val scopesFromExtensions = SyntheticScopeProviderExtension
.getInstances(project)
.flatMap { it.getScopes(moduleDescriptor, javaSyntheticPropertiesScope) }
@@ -100,4 +104,4 @@ interface SyntheticScopeProviderExtension {
)
fun getScopes(moduleDescriptor: ModuleDescriptor, javaSyntheticPropertiesScope: JavaSyntheticPropertiesScope): List<SyntheticScope>
}
}