Refactored TipsManager to filter by visibility
This commit is contained in:
@@ -33,7 +33,11 @@ import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension
|
|||||||
|
|
||||||
public object TipsManager{
|
public object TipsManager{
|
||||||
|
|
||||||
public fun getReferenceVariants(expression: JetSimpleNameExpression, context: BindingContext): Collection<DeclarationDescriptor> {
|
public fun getReferenceVariants(expression: JetSimpleNameExpression, context: BindingContext, visibilityFilter: (DeclarationDescriptor) -> Boolean): Collection<DeclarationDescriptor> {
|
||||||
|
return getReferenceVariants(expression, context).filter(visibilityFilter)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getReferenceVariants(expression: JetSimpleNameExpression, context: BindingContext): Collection<DeclarationDescriptor> {
|
||||||
val receiverExpression = expression.getReceiverExpression()
|
val receiverExpression = expression.getReceiverExpression()
|
||||||
val parent = expression.getParent()
|
val parent = expression.getParent()
|
||||||
val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf()
|
val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf()
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addReferenceVariants(filterCondition: (DeclarationDescriptor) -> Boolean = { true }) {
|
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)
|
collector.addDescriptorElements(descriptors.filter { filterCondition(it) }, suppressAutoInsertion = false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,8 +211,8 @@ class SmartCompletionSession(configuration: CompletionSessionConfiguration, para
|
|||||||
|
|
||||||
val filter = result.declarationFilter
|
val filter = result.declarationFilter
|
||||||
if (filter != null) {
|
if (filter != null) {
|
||||||
TipsManager.getReferenceVariants(jetReference.expression, bindingContext!!)
|
TipsManager.getReferenceVariants(jetReference.expression, bindingContext!!) { isVisibleDescriptor(it) }
|
||||||
.forEach { if (prefixMatcher.prefixMatches(it.getName().asString()) && isVisibleDescriptor(it)) collector.addElements(filter(it)) }
|
.forEach { if (prefixMatcher.prefixMatches(it.getName().asString())) collector.addElements(filter(it)) }
|
||||||
|
|
||||||
flushToResultSet()
|
flushToResultSet()
|
||||||
|
|
||||||
|
|||||||
+12
-8
@@ -30,6 +30,7 @@ import com.intellij.psi.util.PsiTreeUtil;
|
|||||||
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 com.intellij.util.ArrayUtil;
|
||||||
|
import kotlin.Function1;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
@@ -384,12 +385,21 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith
|
|||||||
BindingContext bindingContext = resolveSession.resolveToElement(callNameExpression);
|
BindingContext bindingContext = resolveSession.resolveToElement(callNameExpression);
|
||||||
|
|
||||||
JetScope scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, callNameExpression);
|
JetScope scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, callNameExpression);
|
||||||
DeclarationDescriptor placeDescriptor = null;
|
final DeclarationDescriptor placeDescriptor;
|
||||||
if (scope != null) {
|
if (scope != null) {
|
||||||
placeDescriptor = scope.getContainingDeclaration();
|
placeDescriptor = scope.getContainingDeclaration();
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
placeDescriptor = null;
|
||||||
|
}
|
||||||
|
Function1<DeclarationDescriptor, Boolean> visibilityFilter = new Function1<DeclarationDescriptor, Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean invoke(DeclarationDescriptor descriptor) {
|
||||||
|
return placeDescriptor == null || JetVisibilityChecker.isVisible(placeDescriptor, descriptor);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Collection<DeclarationDescriptor> variants = TipsManager.INSTANCE$.getReferenceVariants(callNameExpression, bindingContext);
|
Collection<DeclarationDescriptor> variants = TipsManager.INSTANCE$.getReferenceVariants(callNameExpression, bindingContext, visibilityFilter);
|
||||||
|
|
||||||
Name refName = callNameExpression.getReferencedNameAsName();
|
Name refName = callNameExpression.getReferencedNameAsName();
|
||||||
|
|
||||||
@@ -399,9 +409,6 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith
|
|||||||
FunctionDescriptor functionDescriptor = (FunctionDescriptor) variant;
|
FunctionDescriptor functionDescriptor = (FunctionDescriptor) variant;
|
||||||
if (functionDescriptor.getName().equals(refName)) {
|
if (functionDescriptor.getName().equals(refName)) {
|
||||||
//todo: renamed functions?
|
//todo: renamed functions?
|
||||||
if (placeDescriptor != null && !JetVisibilityChecker.isVisible(placeDescriptor, functionDescriptor)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
itemsToShow.add(Pair.create(functionDescriptor, resolveSession));
|
itemsToShow.add(Pair.create(functionDescriptor, resolveSession));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -410,9 +417,6 @@ public class JetFunctionParameterInfoHandler implements ParameterInfoHandlerWith
|
|||||||
if (classDescriptor.getName().equals(refName)) {
|
if (classDescriptor.getName().equals(refName)) {
|
||||||
//todo: renamed classes?
|
//todo: renamed classes?
|
||||||
for (ConstructorDescriptor constructorDescriptor : classDescriptor.getConstructors()) {
|
for (ConstructorDescriptor constructorDescriptor : classDescriptor.getConstructors()) {
|
||||||
if (placeDescriptor != null && !JetVisibilityChecker.isVisible(placeDescriptor, constructorDescriptor)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
itemsToShow.add(Pair.create(constructorDescriptor, resolveSession));
|
itemsToShow.add(Pair.create(constructorDescriptor, resolveSession));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user