SortContentAction: support generic types in vararg: IDEA-185852

This commit is contained in:
Roman Ivanov
2018-01-31 16:23:10 +07:00
parent 907ac1e8c3
commit 465f4124a2
3 changed files with 37 additions and 10 deletions
@@ -186,11 +186,10 @@ public class SortContentAction extends PsiElementBaseIntentionAction {
if (initializerExpression == null) return null;
PsiExpression[] initializers = initializerExpression.getInitializers();
if (initializers.length < MIN_EXPRESSION_COUNT) return null;
PsiArrayType arrayType = tryCast(initializerExpression.getType(), PsiArrayType.class);
if (arrayType == null) return null;
PsiType componentType = arrayType.getComponentType();
if (!isSortableExpressions(initializers, componentType)) return null;
Comparator<PsiExpression> comparator = getComparator(componentType);
PsiType type = initializerExpression.getInitializers()[0].getType();
if (type == null) return null;
if (!isSortableExpressions(initializers, type)) return null;
Comparator<PsiExpression> comparator = getComparator(type);
if (comparator == null) return null;
if (isOrdered(initializers, comparator)) return null;
return initializerExpression;
@@ -241,11 +240,11 @@ public class SortContentAction extends PsiElementBaseIntentionAction {
PsiParameter[] parameters = parameterList.getParameters();
PsiExpression[] varargArguments = getVarargArguments(arguments, originElement, parameters);
if(varargArguments == null) return null;
PsiParameter varargParameter = parameters[parameters.length - 1];
PsiEllipsisType ellipsisType = tryCast(varargParameter.getType(), PsiEllipsisType.class);
if(ellipsisType == null) return null;
if (!isSortableExpressions(varargArguments, ellipsisType.getComponentType())) return null;
Comparator<PsiExpression> comparator = getComparator(ellipsisType.getComponentType());
PsiExpression argument = varargArguments[0];
PsiType type = argument.getType();
if(type == null) return null;
if (!isSortableExpressions(varargArguments, type)) return null;
Comparator<PsiExpression> comparator = getComparator(type);
if (comparator == null) return null;
if(isOrdered(varargArguments, comparator)) return null;
return new VarargContext(list, varargArguments);
@@ -0,0 +1,14 @@
// "Sort content" "true"
import java.util.*;
public class Main {
private void test() {
List<String> names = Arrays.asList(
"David",
"John",
"Richard",
"Rose",
"Samuel");
}
}
@@ -0,0 +1,14 @@
// "Sort content" "true"
import java.util.*;
public class Main {
private void test() {
List<String> names = Arrays.asList(
"David",
"Richard",
"Samuel",
"Rose",<caret>
"John");
}
}