diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt index a4beae6fad0..140364d6d9a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinFunctionParameterInfoHandler.kt @@ -66,7 +66,51 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp override fun getParametersForDocumentation(item: FunctionDescriptor, context: ParameterInfoContext) = emptyArray() //todo: ? override fun findElementForParameterInfo(context: CreateParameterInfoContext): JetValueArgumentList? { - return findCall(context) + //todo: calls to this constructors, when we will have auxiliary constructors + val file = context.file as? JetFile ?: return null + + val argumentList = file.findElementAt(context.offset)?.getStrictParentOfType() ?: return null + + val callNameExpression = getCallNameExpression(argumentList) ?: return null + + val references = callNameExpression.references + if (references.isEmpty()) return null + + val resolutionFacade = file.getResolutionFacade() + val bindingContext = callNameExpression.analyze(BodyResolveMode.FULL) + + val scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, callNameExpression) + val placeDescriptor = scope?.getContainingDeclaration() + + val visibilityFilter = { descriptor: DeclarationDescriptor -> + placeDescriptor == null + || descriptor !is DeclarationDescriptorWithVisibility + || descriptor.isVisible(placeDescriptor, bindingContext, callNameExpression) + } + + val refName = callNameExpression.getReferencedNameAsName() + + val descriptorKindFilter = DescriptorKindFilter(DescriptorKindFilter.FUNCTIONS_MASK or DescriptorKindFilter.CLASSIFIERS_MASK, emptyList()) + + val variants = ReferenceVariantsHelper(bindingContext, resolutionFacade, visibilityFilter) + .getReferenceVariants(callNameExpression, descriptorKindFilter, { it == refName }) + + val itemsToShow = ArrayList() + for (variant in variants) { + if (variant is FunctionDescriptor) { + //todo: renamed functions? + itemsToShow.add(variant) + } + else if (variant is ClassDescriptor) { + //todo: renamed classes? + for (constructorDescriptor in variant.constructors) { + itemsToShow.add(constructorDescriptor) + } + } + } + + context.itemsToShow = itemsToShow.toArray() + return argumentList } override fun showParameterInfo(element: JetValueArgumentList, context: CreateParameterInfoContext) { @@ -290,54 +334,6 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp return false } - private fun findCall(context: CreateParameterInfoContext): JetValueArgumentList? { - //todo: calls to this constructors, when we will have auxiliary constructors - val file = context.file as? JetFile ?: return null - - val argumentList = file.findElementAt(context.offset)?.getStrictParentOfType() ?: return null - - val callNameExpression = getCallNameExpression(argumentList) ?: return null - - val references = callNameExpression.references - if (references.isEmpty()) return null - - val resolutionFacade = file.getResolutionFacade() - val bindingContext = callNameExpression.analyze(BodyResolveMode.FULL) - - val scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, callNameExpression) - val placeDescriptor = scope?.getContainingDeclaration() - - val visibilityFilter = { descriptor: DeclarationDescriptor -> - placeDescriptor == null - || descriptor !is DeclarationDescriptorWithVisibility - || descriptor.isVisible(placeDescriptor, bindingContext, callNameExpression) - } - - val refName = callNameExpression.getReferencedNameAsName() - - val descriptorKindFilter = DescriptorKindFilter(DescriptorKindFilter.FUNCTIONS_MASK or DescriptorKindFilter.CLASSIFIERS_MASK, emptyList()) - - val variants = ReferenceVariantsHelper(bindingContext, resolutionFacade, visibilityFilter) - .getReferenceVariants(callNameExpression, descriptorKindFilter, { it == refName }) - - val itemsToShow = ArrayList() - for (variant in variants) { - if (variant is FunctionDescriptor) { - //todo: renamed functions? - itemsToShow.add(variant) - } - else if (variant is ClassDescriptor) { - //todo: renamed classes? - for (constructorDescriptor in variant.constructors) { - itemsToShow.add(constructorDescriptor) - } - } - } - - context.itemsToShow = itemsToShow.toArray() - return argumentList - } - private fun getCallNameExpression(argumentList: JetValueArgumentList): JetSimpleNameExpression? { return (argumentList.parent as? JetCallElement)?.getCallNameExpression() }