Callable Builder: Do not skip unused type parameters
This commit is contained in:
+4
-4
@@ -65,6 +65,7 @@ import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor
|
|||||||
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl
|
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl
|
||||||
import java.util.LinkedHashMap
|
import java.util.LinkedHashMap
|
||||||
import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers
|
import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers
|
||||||
|
import org.jetbrains.jet.utils.addToStdlib.singletonOrEmptyList
|
||||||
|
|
||||||
private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList"
|
private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList"
|
||||||
private val TEMPLATE_FROM_USAGE_FUNCTION_BODY = "New Kotlin Function Body.kt"
|
private val TEMPLATE_FROM_USAGE_FUNCTION_BODY = "New Kotlin Function Body.kt"
|
||||||
@@ -256,6 +257,8 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
(receiverClassDescriptor as ClassDescriptorWithResolutionScopes).getScopeForMemberDeclarationResolution()
|
(receiverClassDescriptor as ClassDescriptorWithResolutionScopes).getScopeForMemberDeclarationResolution()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
receiverTypeCandidate = receiverType?.let { TypeCandidate(it, scope) }
|
||||||
|
|
||||||
val fakeFunction: FunctionDescriptor?
|
val fakeFunction: FunctionDescriptor?
|
||||||
// figure out type substitutions for type parameters
|
// figure out type substitutions for type parameters
|
||||||
val substitutionMap = LinkedHashMap<JetType, JetType>()
|
val substitutionMap = LinkedHashMap<JetType, JetType>()
|
||||||
@@ -270,7 +273,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
.subtract(substitutionMap.keySet())
|
.subtract(substitutionMap.keySet())
|
||||||
fakeFunction = createFakeFunctionDescriptor(scope, typeArgumentsForFakeFunction.size)
|
fakeFunction = createFakeFunctionDescriptor(scope, typeArgumentsForFakeFunction.size)
|
||||||
collectSubstitutionsForCallableTypeParameters(fakeFunction!!, typeArgumentsForFakeFunction, substitutionMap)
|
collectSubstitutionsForCallableTypeParameters(fakeFunction!!, typeArgumentsForFakeFunction, substitutionMap)
|
||||||
mandatoryTypeParametersAsCandidates = typeArgumentsForFakeFunction.map { TypeCandidate(substitutionMap[it], scope) }
|
mandatoryTypeParametersAsCandidates = receiverTypeCandidate.singletonOrEmptyList() + typeArgumentsForFakeFunction.map { TypeCandidate(substitutionMap[it], scope) }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fakeFunction = null
|
fakeFunction = null
|
||||||
@@ -287,9 +290,6 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
|
|||||||
&& returnTypeCandidates.size == 1
|
&& returnTypeCandidates.size == 1
|
||||||
&& returnTypeCandidates.first().theType.isUnit()
|
&& returnTypeCandidates.first().theType.isUnit()
|
||||||
|
|
||||||
// now that we have done substitutions, we can throw it away
|
|
||||||
receiverTypeCandidate = receiverType?.let { TypeCandidate(it, scope) }
|
|
||||||
|
|
||||||
// figure out type parameter renames to avoid conflicts
|
// figure out type parameter renames to avoid conflicts
|
||||||
typeParameterNameMap = getTypeParameterRenames(scope)
|
typeParameterNameMap = getTypeParameterRenames(scope)
|
||||||
callableInfo.parameterInfos.forEach { renderTypeCandidates(it.typeInfo, typeParameterNameMap, fakeFunction) }
|
callableInfo.parameterInfos.forEach { renderTypeCandidates(it.typeInfo, typeParameterNameMap, fakeFunction) }
|
||||||
|
|||||||
Reference in New Issue
Block a user