[API Usage] Use type refinements in overrides-related facilities
This commit is contained in:
committed by
Dmitry Savvinov
parent
694f521bfd
commit
b7e011a29b
+5
-2
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsPackageFragmentImpl
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker
|
||||
|
||||
class JvmBuiltInsPackageFragmentProvider(
|
||||
storageManager: StorageManager,
|
||||
@@ -25,7 +26,8 @@ class JvmBuiltInsPackageFragmentProvider(
|
||||
notFoundClasses: NotFoundClasses,
|
||||
additionalClassPartsProvider: AdditionalClassPartsProvider,
|
||||
platformDependentDeclarationFilter: PlatformDependentDeclarationFilter,
|
||||
deserializationConfiguration: DeserializationConfiguration
|
||||
deserializationConfiguration: DeserializationConfiguration,
|
||||
kotlinTypeChecker: NewKotlinTypeChecker
|
||||
) : AbstractDeserializedPackageFragmentProvider(storageManager, finder, moduleDescriptor) {
|
||||
init {
|
||||
components = DeserializationComponents(
|
||||
@@ -46,7 +48,8 @@ class JvmBuiltInsPackageFragmentProvider(
|
||||
notFoundClasses,
|
||||
ContractDeserializer.DEFAULT,
|
||||
additionalClassPartsProvider, platformDependentDeclarationFilter,
|
||||
BuiltInSerializerProtocol.extensionRegistry
|
||||
BuiltInSerializerProtocol.extensionRegistry,
|
||||
kotlinTypeChecker
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+12
-9
@@ -42,18 +42,20 @@ public final class DescriptorResolverUtils {
|
||||
|
||||
@NotNull
|
||||
public static <D extends CallableMemberDescriptor> Collection<D> resolveOverridesForNonStaticMembers(
|
||||
@NotNull Name name, @NotNull Collection<D> membersFromSupertypes, @NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor, @NotNull ErrorReporter errorReporter
|
||||
) {
|
||||
return resolveOverrides(name, membersFromSupertypes, membersFromCurrent, classDescriptor, errorReporter, false);
|
||||
@NotNull Name name, @NotNull Collection<D> membersFromSupertypes, @NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor, @NotNull ErrorReporter errorReporter,
|
||||
@NotNull OverridingUtil overridingUtil
|
||||
) {
|
||||
return resolveOverrides(name, membersFromSupertypes, membersFromCurrent, classDescriptor, errorReporter, overridingUtil, false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static <D extends CallableMemberDescriptor> Collection<D> resolveOverridesForStaticMembers(
|
||||
@NotNull Name name, @NotNull Collection<D> membersFromSupertypes, @NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor, @NotNull ErrorReporter errorReporter
|
||||
) {
|
||||
return resolveOverrides(name, membersFromSupertypes, membersFromCurrent, classDescriptor, errorReporter, true);
|
||||
@NotNull Name name, @NotNull Collection<D> membersFromSupertypes, @NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor, @NotNull ErrorReporter errorReporter,
|
||||
@NotNull OverridingUtil overridingUtil
|
||||
) {
|
||||
return resolveOverrides(name, membersFromSupertypes, membersFromCurrent, classDescriptor, errorReporter, overridingUtil, true);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -63,11 +65,12 @@ public final class DescriptorResolverUtils {
|
||||
@NotNull Collection<D> membersFromCurrent,
|
||||
@NotNull ClassDescriptor classDescriptor,
|
||||
@NotNull final ErrorReporter errorReporter,
|
||||
@NotNull OverridingUtil overridingUtil,
|
||||
final boolean isStaticContext
|
||||
) {
|
||||
final Set<D> result = new LinkedHashSet<D>();
|
||||
|
||||
OverridingUtil.generateOverridesInFunctionGroup(
|
||||
overridingUtil.generateOverridesInFunctionGroup(
|
||||
name, membersFromSupertypes, membersFromCurrent, classDescriptor,
|
||||
new NonReportingOverrideStrategy() {
|
||||
@Override
|
||||
|
||||
@@ -42,6 +42,7 @@ import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker
|
||||
import java.util.*
|
||||
|
||||
class JavaResolverComponents(
|
||||
@@ -64,7 +65,8 @@ class JavaResolverComponents(
|
||||
val annotationTypeQualifierResolver: AnnotationTypeQualifierResolver,
|
||||
val signatureEnhancement: SignatureEnhancement,
|
||||
val javaClassesTracker: JavaClassesTracker,
|
||||
val settings: JavaResolverSettings
|
||||
val settings: JavaResolverSettings,
|
||||
val kotlinTypeChecker: NewKotlinTypeChecker
|
||||
) {
|
||||
fun replace(
|
||||
javaResolverCache: JavaResolverCache = this.javaResolverCache
|
||||
@@ -73,7 +75,8 @@ class JavaResolverComponents(
|
||||
signaturePropagator, errorReporter, javaResolverCache,
|
||||
javaPropertyInitializerEvaluator, samConversionResolver, sourceElementFactory,
|
||||
moduleClassResolver, packagePartProvider, supertypeLoopChecker, lookupTracker, module, reflectionTypes,
|
||||
annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings
|
||||
annotationTypeQualifierResolver, signatureEnhancement, javaClassesTracker, settings,
|
||||
kotlinTypeChecker
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+11
-3
@@ -57,6 +57,7 @@ import org.jetbrains.kotlin.storage.NotNullLazyValue
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.types.refinement.TypeRefinement
|
||||
import org.jetbrains.kotlin.utils.SmartSet
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
@@ -280,7 +281,8 @@ class LazyJavaClassMemberScope(
|
||||
|
||||
// Merge functions with same signatures
|
||||
val mergedFunctionFromSuperTypes = resolveOverridesForNonStaticMembers(
|
||||
name, functionsFromSupertypes, emptyList(), ownerDescriptor, ErrorReporter.DO_NOTHING
|
||||
name, functionsFromSupertypes, emptyList(), ownerDescriptor, ErrorReporter.DO_NOTHING,
|
||||
c.components.kotlinTypeChecker.overridingUtil
|
||||
)
|
||||
|
||||
// add declarations
|
||||
@@ -309,7 +311,8 @@ class LazyJavaClassMemberScope(
|
||||
) {
|
||||
|
||||
val additionalOverrides = resolveOverridesForNonStaticMembers(
|
||||
name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter
|
||||
name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter,
|
||||
c.components.kotlinTypeChecker.overridingUtil
|
||||
)
|
||||
|
||||
if (!isSpecialBuiltinName) {
|
||||
@@ -451,7 +454,12 @@ class LazyJavaClassMemberScope(
|
||||
|
||||
result.addAll(
|
||||
resolveOverridesForNonStaticMembers(
|
||||
name, propertiesFromSupertypes + propertiesOverridesFromSuperTypes, result, ownerDescriptor, c.components.errorReporter
|
||||
name,
|
||||
propertiesFromSupertypes + propertiesOverridesFromSuperTypes,
|
||||
result,
|
||||
ownerDescriptor,
|
||||
c.components.errorReporter,
|
||||
c.components.kotlinTypeChecker.overridingUtil
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
+20
-3
@@ -64,7 +64,14 @@ class LazyJavaStaticClassScope(
|
||||
|
||||
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
|
||||
val functionsFromSupertypes = getStaticFunctionsFromJavaSuperClasses(name, ownerDescriptor)
|
||||
result.addAll(resolveOverridesForStaticMembers(name, functionsFromSupertypes, result, ownerDescriptor, c.components.errorReporter))
|
||||
result.addAll(resolveOverridesForStaticMembers(
|
||||
name,
|
||||
functionsFromSupertypes,
|
||||
result,
|
||||
ownerDescriptor,
|
||||
c.components.errorReporter,
|
||||
c.components.kotlinTypeChecker.overridingUtil
|
||||
))
|
||||
|
||||
if (jClass.isEnum) {
|
||||
when (name) {
|
||||
@@ -81,13 +88,23 @@ class LazyJavaStaticClassScope(
|
||||
|
||||
if (result.isNotEmpty()) {
|
||||
result.addAll(
|
||||
resolveOverridesForStaticMembers(name, propertiesFromSupertypes, result, ownerDescriptor, c.components.errorReporter)
|
||||
resolveOverridesForStaticMembers(
|
||||
name,
|
||||
propertiesFromSupertypes,
|
||||
result,
|
||||
ownerDescriptor,
|
||||
c.components.errorReporter,
|
||||
c.components.kotlinTypeChecker.overridingUtil
|
||||
)
|
||||
)
|
||||
} else {
|
||||
result.addAll(propertiesFromSupertypes.groupBy {
|
||||
it.realOriginal
|
||||
}.flatMap {
|
||||
resolveOverridesForStaticMembers(name, it.value, result, ownerDescriptor, c.components.errorReporter)
|
||||
resolveOverridesForStaticMembers(
|
||||
name, it.value, result, ownerDescriptor, c.components.errorReporter,
|
||||
c.components.kotlinTypeChecker.overridingUtil
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker
|
||||
|
||||
// This class is needed only for easier injection: exact types of needed components are specified in the constructor here.
|
||||
// Otherwise injector generator is not smart enough to deduce, for example, which package fragment provider DeserializationComponents needs
|
||||
@@ -39,7 +40,8 @@ class DeserializationComponentsForJava(
|
||||
notFoundClasses: NotFoundClasses,
|
||||
errorReporter: ErrorReporter,
|
||||
lookupTracker: LookupTracker,
|
||||
contractDeserializer: ContractDeserializer
|
||||
contractDeserializer: ContractDeserializer,
|
||||
kotlinTypeChecker: NewKotlinTypeChecker
|
||||
) {
|
||||
val components: DeserializationComponents
|
||||
|
||||
@@ -52,7 +54,8 @@ class DeserializationComponentsForJava(
|
||||
emptyList(), notFoundClasses, contractDeserializer,
|
||||
additionalClassPartsProvider = jvmBuiltIns?.settings ?: AdditionalClassPartsProvider.None,
|
||||
platformDependentDeclarationFilter = jvmBuiltIns?.settings ?: PlatformDependentDeclarationFilter.NoPlatformDependent,
|
||||
extensionRegistryLite = JvmProtoBufUtil.EXTENSION_REGISTRY
|
||||
extensionRegistryLite = JvmProtoBufUtil.EXTENSION_REGISTRY,
|
||||
kotlinTypeChecker = kotlinTypeChecker
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user