No need to put ResolutionFacade into parameter info items
This commit is contained in:
+12
-17
@@ -22,14 +22,12 @@ import com.intellij.lang.parameterInfo.*
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.ui.Gray
|
import com.intellij.ui.Gray
|
||||||
import com.intellij.ui.JBColor
|
import com.intellij.ui.JBColor
|
||||||
import com.intellij.util.ArrayUtil
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
import org.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelper
|
||||||
import org.jetbrains.kotlin.idea.core.isVisible
|
import org.jetbrains.kotlin.idea.core.isVisible
|
||||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.allChildren
|
import org.jetbrains.kotlin.psi.psiUtil.allChildren
|
||||||
@@ -47,7 +45,7 @@ import org.jetbrains.kotlin.types.checker.JetTypeChecker
|
|||||||
import java.awt.Color
|
import java.awt.Color
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupport<JetValueArgumentList, Pair<FunctionDescriptor, ResolutionFacade>, JetValueArgument> {
|
class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupport<JetValueArgumentList, FunctionDescriptor, JetValueArgument> {
|
||||||
|
|
||||||
override fun getActualParameters(arguments: JetValueArgumentList) = arguments.arguments.toTypedArray()
|
override fun getActualParameters(arguments: JetValueArgumentList) = arguments.arguments.toTypedArray()
|
||||||
|
|
||||||
@@ -65,7 +63,7 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp
|
|||||||
|
|
||||||
override fun getParametersForLookup(item: LookupElement, context: ParameterInfoContext) = emptyArray<Any>() //todo: ?
|
override fun getParametersForLookup(item: LookupElement, context: ParameterInfoContext) = emptyArray<Any>() //todo: ?
|
||||||
|
|
||||||
override fun getParametersForDocumentation(p: Pair<FunctionDescriptor, ResolutionFacade>, context: ParameterInfoContext) = emptyArray<Any>() //todo: ?
|
override fun getParametersForDocumentation(item: FunctionDescriptor, context: ParameterInfoContext) = emptyArray<Any>() //todo: ?
|
||||||
|
|
||||||
override fun findElementForParameterInfo(context: CreateParameterInfoContext): JetValueArgumentList? {
|
override fun findElementForParameterInfo(context: CreateParameterInfoContext): JetValueArgumentList? {
|
||||||
return findCall(context)
|
return findCall(context)
|
||||||
@@ -95,7 +93,7 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp
|
|||||||
|
|
||||||
override fun tracksParameterIndex() = true
|
override fun tracksParameterIndex() = true
|
||||||
|
|
||||||
override fun updateUI(itemToShow: Pair<FunctionDescriptor, ResolutionFacade>, context: ParameterInfoUIContext) {
|
override fun updateUI(itemToShow: FunctionDescriptor, context: ParameterInfoUIContext) {
|
||||||
//todo: when we will have ability to pass Array as vararg, implement such feature here too?
|
//todo: when we will have ability to pass Array as vararg, implement such feature here too?
|
||||||
if (context.parameterOwner == null || !context.parameterOwner.isValid) {
|
if (context.parameterOwner == null || !context.parameterOwner.isValid) {
|
||||||
context.isUIComponentEnabled = false
|
context.isUIComponentEnabled = false
|
||||||
@@ -108,17 +106,14 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val functionDescriptor = itemToShow.first
|
val valueParameters = itemToShow.valueParameters
|
||||||
val resolutionFacade = itemToShow.second
|
|
||||||
|
|
||||||
val valueParameters = functionDescriptor.valueParameters
|
|
||||||
val valueArguments = parameterOwner.arguments
|
val valueArguments = parameterOwner.arguments
|
||||||
|
|
||||||
val currentParameterIndex = context.currentParameterIndex
|
val currentParameterIndex = context.currentParameterIndex
|
||||||
var boldStartOffset = -1
|
var boldStartOffset = -1
|
||||||
var boldEndOffset = -1
|
var boldEndOffset = -1
|
||||||
var isGrey = false
|
var isGrey = false
|
||||||
val isDeprecated = KotlinBuiltIns.isDeprecated(functionDescriptor)
|
val isDeprecated = KotlinBuiltIns.isDeprecated(itemToShow)
|
||||||
|
|
||||||
val usedIndexes = BooleanArray(valueParameters.size())
|
val usedIndexes = BooleanArray(valueParameters.size())
|
||||||
Arrays.fill(usedIndexes, false)
|
Arrays.fill(usedIndexes, false)
|
||||||
@@ -130,7 +125,7 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp
|
|||||||
}
|
}
|
||||||
|
|
||||||
val owner = context.parameterOwner
|
val owner = context.parameterOwner
|
||||||
val bindingContext = resolutionFacade.analyze(owner as JetElement, BodyResolveMode.FULL)
|
val bindingContext = (owner as JetElement).analyze(BodyResolveMode.FULL)
|
||||||
|
|
||||||
val text = StringBuilder {
|
val text = StringBuilder {
|
||||||
for (i in valueParameters.indices) {
|
for (i in valueParameters.indices) {
|
||||||
@@ -213,9 +208,9 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp
|
|||||||
}.toString()
|
}.toString()
|
||||||
|
|
||||||
|
|
||||||
assert(!text.isEmpty()) { "A message about 'no parameters' or some parameters should be present: $functionDescriptor" }
|
assert(!text.isEmpty()) { "A message about 'no parameters' or some parameters should be present: $itemToShow" }
|
||||||
|
|
||||||
val color = if (isResolvedToDescriptor(parameterOwner, functionDescriptor, bindingContext))
|
val color = if (isResolvedToDescriptor(parameterOwner, itemToShow, bindingContext))
|
||||||
GREEN_BACKGROUND
|
GREEN_BACKGROUND
|
||||||
else
|
else
|
||||||
context.defaultParameterColor
|
context.defaultParameterColor
|
||||||
@@ -325,21 +320,21 @@ class KotlinFunctionParameterInfoHandler : ParameterInfoHandlerWithTabActionSupp
|
|||||||
val variants = ReferenceVariantsHelper(bindingContext, resolutionFacade, visibilityFilter)
|
val variants = ReferenceVariantsHelper(bindingContext, resolutionFacade, visibilityFilter)
|
||||||
.getReferenceVariants(callNameExpression, descriptorKindFilter, { it == refName })
|
.getReferenceVariants(callNameExpression, descriptorKindFilter, { it == refName })
|
||||||
|
|
||||||
val itemsToShow = ArrayList<Pair<DeclarationDescriptor, ResolutionFacade>>()
|
val itemsToShow = ArrayList<DeclarationDescriptor>()
|
||||||
for (variant in variants) {
|
for (variant in variants) {
|
||||||
if (variant is FunctionDescriptor) {
|
if (variant is FunctionDescriptor) {
|
||||||
//todo: renamed functions?
|
//todo: renamed functions?
|
||||||
itemsToShow.add(Pair(variant, resolutionFacade))
|
itemsToShow.add(variant)
|
||||||
}
|
}
|
||||||
else if (variant is ClassDescriptor) {
|
else if (variant is ClassDescriptor) {
|
||||||
//todo: renamed classes?
|
//todo: renamed classes?
|
||||||
for (constructorDescriptor in variant.constructors) {
|
for (constructorDescriptor in variant.constructors) {
|
||||||
itemsToShow.add(Pair(constructorDescriptor, resolutionFacade))
|
itemsToShow.add(constructorDescriptor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context.itemsToShow = ArrayUtil.toObjectArray(itemsToShow)
|
context.itemsToShow = itemsToShow.toArray()
|
||||||
return argumentList
|
return argumentList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -18,9 +18,7 @@ package org.jetbrains.kotlin.idea.parameterInfo;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
||||||
import kotlin.Pair;
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade;
|
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens;
|
import org.jetbrains.kotlin.lexer.JetTokens;
|
||||||
import org.jetbrains.kotlin.psi.JetFile;
|
import org.jetbrains.kotlin.psi.JetFile;
|
||||||
@@ -64,7 +62,7 @@ public abstract class AbstractFunctionParameterInfoTest extends LightCodeInsight
|
|||||||
|
|
||||||
for (Object item : mockCreateParameterInfoContext.getItemsToShow()) {
|
for (Object item : mockCreateParameterInfoContext.getItemsToShow()) {
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
parameterInfoHandler.updateUI((Pair<? extends FunctionDescriptor, ResolutionFacade>)item, parameterInfoUIContext);
|
parameterInfoHandler.updateUI((FunctionDescriptor)item, parameterInfoUIContext);
|
||||||
}
|
}
|
||||||
assertEquals(expectedResultText, parameterInfoUIContext.getResultText());
|
assertEquals(expectedResultText, parameterInfoUIContext.getResultText());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user