mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-21 22:11:40 +07:00
parameter popup: don't show hidden methods (IDEA-144944)
This commit is contained in:
@@ -29,6 +29,11 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.CompletionParameterTypeInferencePolicy;
|
||||
import com.intellij.psi.infos.CandidateInfo;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
import com.intellij.psi.scope.MethodProcessorSetupFailedException;
|
||||
import com.intellij.psi.scope.PsiConflictResolver;
|
||||
import com.intellij.psi.scope.processor.MethodCandidatesProcessor;
|
||||
import com.intellij.psi.scope.processor.MethodResolverProcessor;
|
||||
import com.intellij.psi.scope.util.PsiScopesUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.MethodSignatureUtil;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
@@ -308,12 +313,14 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static CandidateInfo[] getMethods(PsiExpressionList argList) {
|
||||
final PsiCall call = getCall(argList);
|
||||
PsiResolveHelper helper = JavaPsiFacade.getInstance(argList.getProject()).getResolveHelper();
|
||||
|
||||
if (call instanceof PsiCallExpression) {
|
||||
CandidateInfo[] candidates = helper.getReferencedMethodCandidates((PsiCallExpression)call, true);
|
||||
CandidateInfo[] candidates = getCandidates((PsiCallExpression)call);
|
||||
ArrayList<CandidateInfo> result = new ArrayList<CandidateInfo>();
|
||||
|
||||
if (!(argList.getParent() instanceof PsiAnonymousClass)) {
|
||||
@@ -360,6 +367,24 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
|
||||
}
|
||||
}
|
||||
|
||||
private static CandidateInfo[] getCandidates(PsiCallExpression call) {
|
||||
final MethodCandidatesProcessor processor = new MethodResolverProcessor(call, call.getContainingFile(), new PsiConflictResolver[0]) {
|
||||
@Override
|
||||
protected boolean acceptVarargs() {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
PsiScopesUtil.setupAndRunProcessor(processor, call, true);
|
||||
}
|
||||
catch (MethodProcessorSetupFailedException e) {
|
||||
return CandidateInfo.EMPTY_ARRAY;
|
||||
}
|
||||
final List<CandidateInfo> results = processor.getResults();
|
||||
return results.toArray(new CandidateInfo[results.size()]);
|
||||
}
|
||||
|
||||
public static String updateMethodPresentation(@NotNull PsiMethod method, @Nullable PsiSubstitutor substitutor, @NotNull ParameterInfoUIContext context) {
|
||||
CodeInsightSettings settings = CodeInsightSettings.getInstance();
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
class A {
|
||||
static void foo(int x){}
|
||||
class Inner {
|
||||
void foo(){}
|
||||
|
||||
void test() {
|
||||
foo(<caret>1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,6 +109,19 @@ public class ParameterInfoTest extends LightCodeInsightTestCase {
|
||||
assertTrue(updateParameterInfoContext.isUIComponentEnabled(0) || updateParameterInfoContext.isUIComponentEnabled(1));
|
||||
}
|
||||
|
||||
public void testStopAtAccessibleStaticCorrectCandidate() throws Exception {
|
||||
configureByFile(BASE_PATH + getTestName(false) + ".java");
|
||||
|
||||
final MethodParameterInfoHandler handler = new MethodParameterInfoHandler();
|
||||
final CreateParameterInfoContext context = new MockCreateParameterInfoContext(myEditor, myFile);
|
||||
final PsiExpressionList list = handler.findElementForParameterInfo(context);
|
||||
assertNotNull(list);
|
||||
final Object[] itemsToShow = context.getItemsToShow();
|
||||
assertNotNull(itemsToShow);
|
||||
assertEquals(1, itemsToShow.length);
|
||||
assertEquals(0, ((MethodCandidateInfo)itemsToShow[0]).getElement().getParameterList().getParametersCount());
|
||||
}
|
||||
|
||||
public void testAfterGenericsInsideCall() throws Exception {
|
||||
configureByFile(BASE_PATH + getTestName(false) + ".java");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user