More correct and simple code
This commit is contained in:
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor
|
|||||||
import org.jetbrains.jet.lang.types.Variance
|
import org.jetbrains.jet.lang.types.Variance
|
||||||
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintPosition
|
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintPosition
|
||||||
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintsUtil
|
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintsUtil
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name
|
|
||||||
import org.jetbrains.jet.utils.addIfNotNull
|
import org.jetbrains.jet.utils.addIfNotNull
|
||||||
import java.util.HashSet
|
import java.util.HashSet
|
||||||
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor
|
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor
|
||||||
@@ -66,14 +65,14 @@ private fun checkReceiverResolution(
|
|||||||
receiverParameter: ReceiverParameterDescriptor,
|
receiverParameter: ReceiverParameterDescriptor,
|
||||||
typeParameters: List<TypeParameterDescriptor>
|
typeParameters: List<TypeParameterDescriptor>
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val typeNamesInReceiver = HashSet<Name>()
|
val typeNamesInReceiver = HashSet<TypeParameterDescriptor>()
|
||||||
typeNamesInReceiver.addUsedTypeNames(receiverParameter.getType())
|
typeNamesInReceiver.addUsedTypeParameters(receiverParameter.getType())
|
||||||
|
|
||||||
val constraintSystem = ConstraintSystemImpl()
|
val constraintSystem = ConstraintSystemImpl()
|
||||||
val typeVariables = LinkedHashMap<TypeParameterDescriptor, Variance>()
|
val typeVariables = LinkedHashMap<TypeParameterDescriptor, Variance>()
|
||||||
for (typeParameter in typeParameters) {
|
for (typeParameter in typeParameters) {
|
||||||
if (typeNamesInReceiver.contains(typeParameter.getName())) {
|
if (typeNamesInReceiver.contains(typeParameter)) {
|
||||||
typeVariables.put(typeParameter, Variance.INVARIANT)
|
typeVariables[typeParameter] = Variance.INVARIANT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
constraintSystem.registerTypeVariables(typeVariables)
|
constraintSystem.registerTypeVariables(typeVariables)
|
||||||
@@ -82,12 +81,11 @@ private fun checkReceiverResolution(
|
|||||||
return constraintSystem.getStatus().isSuccessful() && ConstraintsUtil.checkBoundsAreSatisfied(constraintSystem, true)
|
return constraintSystem.getStatus().isSuccessful() && ConstraintsUtil.checkBoundsAreSatisfied(constraintSystem, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MutableSet<Name>.addUsedTypeNames(jetType: JetType) {
|
private fun MutableSet<TypeParameterDescriptor>.addUsedTypeParameters(jetType: JetType) {
|
||||||
val descriptor = jetType.getConstructor().getDeclarationDescriptor()
|
addIfNotNull(jetType.getConstructor().getDeclarationDescriptor() as? TypeParameterDescriptor)
|
||||||
addIfNotNull(descriptor?.getName())
|
|
||||||
|
|
||||||
for (argument in jetType.getArguments()) {
|
for (argument in jetType.getArguments()) {
|
||||||
addUsedTypeNames(argument.getType())
|
addUsedTypeParameters(argument.getType())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user