From 042e4466941a91d585b1bbaf7dd91fbac313ee8d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 20 Oct 2014 14:45:07 +0400 Subject: [PATCH] Refactored TipsManager to filter by visibility --- .../jet/plugin/codeInsight/TipsManager.kt | 6 +++++- .../plugin/completion/CompletionSession.kt | 6 +++--- .../JetFunctionParameterInfoHandler.java | 20 +++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt index 43fb2370af2..d2d1622a32c 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt @@ -33,7 +33,11 @@ import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension public object TipsManager{ - public fun getReferenceVariants(expression: JetSimpleNameExpression, context: BindingContext): Collection { + public fun getReferenceVariants(expression: JetSimpleNameExpression, context: BindingContext, visibilityFilter: (DeclarationDescriptor) -> Boolean): Collection { + return getReferenceVariants(expression, context).filter(visibilityFilter) + } + + private fun getReferenceVariants(expression: JetSimpleNameExpression, context: BindingContext): Collection { val receiverExpression = expression.getReceiverExpression() val parent = expression.getParent() val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf() diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt index 1d330446000..8b2d5662673 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt @@ -194,7 +194,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, } private fun addReferenceVariants(filterCondition: (DeclarationDescriptor) -> Boolean = { true }) { - val descriptors = TipsManager.getReferenceVariants(jetReference!!.expression, bindingContext!!) + val descriptors = TipsManager.getReferenceVariants(jetReference!!.expression, bindingContext!!) { isVisibleDescriptor(it) } collector.addDescriptorElements(descriptors.filter { filterCondition(it) }, suppressAutoInsertion = false) } } @@ -211,8 +211,8 @@ class SmartCompletionSession(configuration: CompletionSessionConfiguration, para val filter = result.declarationFilter if (filter != null) { - TipsManager.getReferenceVariants(jetReference.expression, bindingContext!!) - .forEach { if (prefixMatcher.prefixMatches(it.getName().asString()) && isVisibleDescriptor(it)) collector.addElements(filter(it)) } + TipsManager.getReferenceVariants(jetReference.expression, bindingContext!!) { isVisibleDescriptor(it) } + .forEach { if (prefixMatcher.prefixMatches(it.getName().asString())) collector.addElements(filter(it)) } flushToResultSet() diff --git a/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java b/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java index 6978ff698f0..a155446b236 100644 --- a/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoHandler.java @@ -30,6 +30,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.util.ArrayUtil; +import kotlin.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; @@ -384,12 +385,21 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith BindingContext bindingContext = resolveSession.resolveToElement(callNameExpression); JetScope scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, callNameExpression); - DeclarationDescriptor placeDescriptor = null; + final DeclarationDescriptor placeDescriptor; if (scope != null) { placeDescriptor = scope.getContainingDeclaration(); } + else { + placeDescriptor = null; + } + Function1 visibilityFilter = new Function1() { + @Override + public Boolean invoke(DeclarationDescriptor descriptor) { + return placeDescriptor == null || JetVisibilityChecker.isVisible(placeDescriptor, descriptor); + } + }; - Collection variants = TipsManager.INSTANCE$.getReferenceVariants(callNameExpression, bindingContext); + Collection variants = TipsManager.INSTANCE$.getReferenceVariants(callNameExpression, bindingContext, visibilityFilter); Name refName = callNameExpression.getReferencedNameAsName(); @@ -399,9 +409,6 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith FunctionDescriptor functionDescriptor = (FunctionDescriptor) variant; if (functionDescriptor.getName().equals(refName)) { //todo: renamed functions? - if (placeDescriptor != null && !JetVisibilityChecker.isVisible(placeDescriptor, functionDescriptor)) { - continue; - } itemsToShow.add(Pair.create(functionDescriptor, resolveSession)); } } @@ -410,9 +417,6 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith if (classDescriptor.getName().equals(refName)) { //todo: renamed classes? for (ConstructorDescriptor constructorDescriptor : classDescriptor.getConstructors()) { - if (placeDescriptor != null && !JetVisibilityChecker.isVisible(placeDescriptor, constructorDescriptor)) { - continue; - } itemsToShow.add(Pair.create(constructorDescriptor, resolveSession)); } }