mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
remove size() from collection.toArray() smart completion (IDEA-142273)
This commit is contained in:
@@ -115,7 +115,7 @@ class SlowerTypeConversions implements Runnable {
|
||||
|
||||
FromArrayConversion.addConversions(element, prefix, itemType, result, qualifier, expectedType);
|
||||
|
||||
ToArrayConversion.addConversions(element, object, prefix, itemType, result, qualifier, expectedType);
|
||||
ToArrayConversion.addConversions(element, prefix, itemType, result, qualifier, expectedType);
|
||||
|
||||
ArrayMemberAccess.addMemberAccessors(element, prefix, itemType, qualifier, result, (PsiModifierListOwner)object, expectedType);
|
||||
}
|
||||
|
||||
@@ -36,10 +36,9 @@ import static com.intellij.codeInsight.completion.ReferenceExpressionCompletionC
|
||||
* @author peter
|
||||
*/
|
||||
public class ToArrayConversion {
|
||||
static void addConversions(final PsiElement element, final Object object, final String prefix, final PsiType itemType,
|
||||
static void addConversions(final PsiElement element, final String prefix, final PsiType itemType,
|
||||
final Consumer<LookupElement> result, @Nullable final PsiElement qualifier,
|
||||
final PsiType expectedType) {
|
||||
final String callSpace = getSpace(CodeStyleSettingsManager.getSettings(element.getProject()).SPACE_WITHIN_METHOD_CALL_PARENTHESES);
|
||||
final PsiType componentType = PsiUtil.extractIterableTypeParameter(itemType, true);
|
||||
if (componentType == null || !(expectedType instanceof PsiArrayType)) return;
|
||||
|
||||
@@ -50,40 +49,36 @@ public class ToArrayConversion {
|
||||
}
|
||||
|
||||
final String bracketSpace = getSpace(CodeStyleSettingsManager.getSettings(element.getProject()).SPACE_WITHIN_BRACKETS);
|
||||
if (object instanceof PsiVariable && !JavaCompletionUtil.mayHaveSideEffects(qualifier)) {
|
||||
final PsiVariable variable = (PsiVariable)object;
|
||||
addToArrayConversion(element, prefix,
|
||||
"new " + componentType.getCanonicalText() +
|
||||
"[" + bracketSpace + getQualifierText(qualifier) + variable.getName() + ".size(" + callSpace + ")" + bracketSpace + "]",
|
||||
"new " + getQualifierText(qualifier) + componentType.getPresentableText() + "[" + variable.getName() + ".size()]", result, qualifier);
|
||||
} else {
|
||||
boolean hasEmptyArrayField = false;
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(type);
|
||||
if (psiClass != null) {
|
||||
for (final PsiField field : psiClass.getAllFields()) {
|
||||
if (field.hasModifierProperty(PsiModifier.STATIC) && field.hasModifierProperty(PsiModifier.FINAL) &&
|
||||
JavaPsiFacade.getInstance(field.getProject()).getResolveHelper().isAccessible(field, element, null) &&
|
||||
type.isAssignableFrom(field.getType()) && isEmptyArrayInitializer(field.getInitializer())) {
|
||||
boolean needQualify;
|
||||
try {
|
||||
needQualify = !field.isEquivalentTo(((PsiReferenceExpression)createExpression(field.getName(), element)).resolve());
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
addToArrayConversion(element, prefix,
|
||||
(needQualify ? field.getContainingClass().getQualifiedName() + "." : "") + field.getName(),
|
||||
(needQualify ? field.getContainingClass().getName() + "." : "") + field.getName(), result, qualifier);
|
||||
hasEmptyArrayField = true;
|
||||
boolean hasEmptyArrayField = false;
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(type);
|
||||
if (psiClass != null) {
|
||||
for (final PsiField field : psiClass.getAllFields()) {
|
||||
if (field.hasModifierProperty(PsiModifier.STATIC) && field.hasModifierProperty(PsiModifier.FINAL) &&
|
||||
JavaPsiFacade.getInstance(field.getProject()).getResolveHelper().isAccessible(field, element, null) &&
|
||||
type.isAssignableFrom(field.getType()) && isEmptyArrayInitializer(field.getInitializer())) {
|
||||
boolean needQualify;
|
||||
try {
|
||||
needQualify = !field.isEquivalentTo(((PsiReferenceExpression)createExpression(field.getName(), element)).resolve());
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
PsiClass containingClass = field.getContainingClass();
|
||||
if (containingClass == null) continue;
|
||||
|
||||
addToArrayConversion(element, prefix,
|
||||
(needQualify ? containingClass.getQualifiedName() + "." : "") + field.getName(),
|
||||
(needQualify ? containingClass.getName() + "." : "") + field.getName(), result, qualifier);
|
||||
hasEmptyArrayField = true;
|
||||
}
|
||||
}
|
||||
if (!hasEmptyArrayField) {
|
||||
addToArrayConversion(element, prefix,
|
||||
"new " + componentType.getCanonicalText() + "[" + bracketSpace + "0" + bracketSpace + "]",
|
||||
"new " + componentType.getPresentableText() + "[0]", result, qualifier);
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasEmptyArrayField) {
|
||||
addToArrayConversion(element, prefix,
|
||||
"new " + componentType.getCanonicalText() + "[" + bracketSpace + "0" + bracketSpace + "]",
|
||||
"new " + componentType.getPresentableText() + "[0]", result, qualifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
import java.util.Collection;
|
||||
|
||||
class Foo {
|
||||
|
||||
{
|
||||
Collection<Foo> foos;
|
||||
Foo[] f = foos.toArray(new Foo[foos.size()]);<caret>
|
||||
}
|
||||
|
||||
}
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
import java.util.Collection;
|
||||
|
||||
class Foo {
|
||||
|
||||
{
|
||||
Collection<Foo> foos;
|
||||
Foo[] f = <caret>
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -7,7 +7,7 @@ class Bar {
|
||||
class Foo {
|
||||
|
||||
{
|
||||
Foo[] f = Bar.foos.toArray(new Foo[Bar.foos.size()]);<caret>
|
||||
Foo[] f = Bar.foos.toArray(new Foo[0]);<caret>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-2
@@ -59,8 +59,7 @@ public class SecondSmartTypeCompletionTest extends LightFixtureCompletionTestCas
|
||||
public void testSuggestArraysAsListWildcard() throws Throwable { doTest(); }
|
||||
|
||||
public void testSuggestToArrayWithNewEmptyArray() throws Throwable { doTest(); }
|
||||
public void testSuggestToArrayWithNewNonEmptyArray() throws Throwable { doTest(); }
|
||||
|
||||
|
||||
public void testSuggestToArrayWithExistingEmptyArray() throws Throwable {
|
||||
configure();
|
||||
assertStringItems("foos().toArray(EMPTY_ARRAY)", "foos().toArray(EMPTY_ARRAY2)");
|
||||
|
||||
Reference in New Issue
Block a user