Refactor function descriptors copy mechanism
Pull up CopyBuilder to interface and inline some custom usages
This commit is contained in:
+2
-1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.load.java
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
|
||||
import org.jetbrains.kotlin.load.java.lazy.types.RawSubstitution
|
||||
@@ -45,7 +46,7 @@ class ErasedOverridabilityCondition : ExternalOverridabilityCondition {
|
||||
|
||||
if (erasedSuper is SimpleFunctionDescriptor && erasedSuper.typeParameters.isNotEmpty()) {
|
||||
// Only simple functions are supported now for erased overrides
|
||||
erasedSuper = erasedSuper.createCopyWithNewTypeParameters(emptyList())
|
||||
erasedSuper = erasedSuper.newCopyBuilder().setTypeParameters(emptyList()).build()!!
|
||||
}
|
||||
|
||||
val overridabilityResult =
|
||||
|
||||
+16
-6
@@ -144,6 +144,13 @@ class LazyJavaClassMemberScope(
|
||||
}
|
||||
}
|
||||
|
||||
private fun SimpleFunctionDescriptor.createRenamedCopy(builtinName: Name): SimpleFunctionDescriptor =
|
||||
this.newCopyBuilder().apply {
|
||||
setName(builtinName)
|
||||
setSignatureChange()
|
||||
setPreserveSourceElement()
|
||||
}.build()!!
|
||||
|
||||
private fun isOverridableRenamedDescriptor(superDescriptor: FunctionDescriptor, subDescriptor: FunctionDescriptor): Boolean {
|
||||
// if we check 'removeAt', get original sub-descriptor to distinct `remove(int)` and `remove(E)` in Java
|
||||
val subDescriptorToCheck = if (superDescriptor.isRemoveAtByIndex) subDescriptor.original else subDescriptor
|
||||
@@ -222,7 +229,7 @@ class LazyJavaClassMemberScope(
|
||||
return
|
||||
}
|
||||
|
||||
var specialBuiltinsFromSuperTypes = SmartSet.create<SimpleFunctionDescriptor>()
|
||||
val specialBuiltinsFromSuperTypes = SmartSet.create<SimpleFunctionDescriptor>()
|
||||
|
||||
// Merge functions with same signatures
|
||||
val mergedFunctionFromSuperTypes = resolveOverridesForNonStaticMembers(
|
||||
@@ -316,10 +323,11 @@ class LazyJavaClassMemberScope(
|
||||
private fun SimpleFunctionDescriptor.createHiddenCopyIfBuiltinAlreadyAccidentallyOverridden(
|
||||
specialBuiltin: CallableDescriptor,
|
||||
alreadyDeclaredFunctions: Collection<SimpleFunctionDescriptor>
|
||||
) = if (alreadyDeclaredFunctions.none { this != it && it.doesOverride(specialBuiltin) })
|
||||
): SimpleFunctionDescriptor =
|
||||
if (alreadyDeclaredFunctions.none { this != it && it.doesOverride(specialBuiltin) })
|
||||
this
|
||||
else
|
||||
createHiddenCopyToOvercomeSignatureClash()
|
||||
newCopyBuilder().setHiddenToOvercomeSignatureClash().build()!!
|
||||
|
||||
private fun createOverrideForBuiltinFunctionWithErasedParameterIfNeeded(
|
||||
overridden: FunctionDescriptor,
|
||||
@@ -329,9 +337,11 @@ class LazyJavaClassMemberScope(
|
||||
it.doesOverrideBuiltinFunctionWithErasedValueParameters(overridden)
|
||||
}?.let {
|
||||
override ->
|
||||
override.createCopyWithNewValueParameters(
|
||||
copyValueParameters(overridden.valueParameters.map { it.type }, override.valueParameters, overridden))
|
||||
|
||||
override.newCopyBuilder().apply {
|
||||
setValueParameters(copyValueParameters(overridden.valueParameters.map { it.type }, override.valueParameters, overridden))
|
||||
setSignatureChange()
|
||||
setPreserveSourceElement()
|
||||
}.build()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user