mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
java parameter info: revert unsafe fix for IDEA-184821, add a test (IDEA-CR-28480)
This commit is contained in:
+7
-5
@@ -247,13 +247,15 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
|
||||
for (int i = 0; i < candidates.length; i++) {
|
||||
CandidateInfo candidate = (CandidateInfo)candidates[i];
|
||||
PsiMethod method = (PsiMethod)candidate.getElement();
|
||||
if (!method.isValid() || !candidate.getSubstitutor().isValid()) {
|
||||
// this may sometimes happen e,g, when editing method call in field initializer candidates in the same file get invalidated
|
||||
if (!method.isValid()) continue;
|
||||
PsiSubstitutor substitutor = getCandidateInfoSubstitutor(o, candidate, method == realResolve);
|
||||
assert substitutor != null;
|
||||
|
||||
if (!method.isValid() || !substitutor.isValid()) {
|
||||
// this may sometimes happen e,g, when editing method call in field initializer candidates in the same file get invalidated
|
||||
context.setUIComponentEnabled(i, false);
|
||||
continue;
|
||||
}
|
||||
PsiSubstitutor substitutor = getCandidateInfoSubstitutor(o, candidate, method == realResolve);
|
||||
assert substitutor != null;
|
||||
|
||||
PsiParameter[] parms = method.getParameterList().getParameters();
|
||||
boolean enabled = true;
|
||||
@@ -726,7 +728,7 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
|
||||
if (p instanceof CandidateInfo) {
|
||||
CandidateInfo info = (CandidateInfo)p;
|
||||
PsiMethod method = (PsiMethod)info.getElement();
|
||||
if (!method.isValid() || !info.getSubstitutor().isValid()) {
|
||||
if (!method.isValid()) {
|
||||
context.setUIComponentEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import java.util.ArrayList;
|
||||
|
||||
class A{
|
||||
void foo(){
|
||||
new ArrayList<String>().stream().collect(toSe<caret>)
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
class A{
|
||||
void foo(){
|
||||
new ArrayList<String>().stream().collect(Collectors.toSet())<caret>
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.intellij.codeInsight.hint.api.impls.MethodParameterInfoHandler;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.idea.Bombed;
|
||||
import com.intellij.lang.parameterInfo.CreateParameterInfoContext;
|
||||
import com.intellij.lang.parameterInfo.ParameterInfoUIContextEx;
|
||||
import com.intellij.openapi.actionSystem.IdeActions;
|
||||
@@ -26,6 +27,8 @@ import com.intellij.testFramework.utils.parameterInfo.MockUpdateParameterInfoCon
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class ParameterInfoTest extends LightCodeInsightFixtureTestCase {
|
||||
@Override
|
||||
protected String getBasePath() {
|
||||
@@ -339,4 +342,27 @@ public class ParameterInfoTest extends LightCodeInsightFixtureTestCase {
|
||||
assertEquals(itemsToShow[lineIndex], updateParameterInfo(handler, list, itemsToShow).getHighlightedParameter());
|
||||
}
|
||||
|
||||
@Bombed(month = Calendar.JANUARY, day = 22, user = "anna")
|
||||
public void testTypeInvalidationByCompletion() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java");
|
||||
|
||||
MethodParameterInfoHandler handler = new MethodParameterInfoHandler();
|
||||
CreateParameterInfoContext context = new MockCreateParameterInfoContext(getEditor(), getFile());
|
||||
PsiExpressionList argList = handler.findElementForParameterInfo(context);
|
||||
assertNotNull(argList);
|
||||
Object[] items = context.getItemsToShow();
|
||||
assertSize(2, items);
|
||||
updateParameterInfo(handler, argList, items);
|
||||
|
||||
myFixture.completeBasic();
|
||||
myFixture.type('\n');
|
||||
|
||||
assertTrue(argList.isValid());
|
||||
// items now contain references to invalid PSI
|
||||
updateParameterInfo(handler, argList, items);
|
||||
assertSize(2, context.getItemsToShow());
|
||||
|
||||
myFixture.checkResultByFile(getTestName(false) + "_after.java");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user