Consistent use of Collection.toArray with zero-sized array argument
Includes consistent use of ClassUtils.toClassArray (as non-null variant) Issue: SPR-16523
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,9 +17,9 @@
|
||||
package org.springframework.expression.common;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Deque;
|
||||
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.ExpressionParser;
|
||||
@@ -128,7 +128,7 @@ public abstract class TemplateAwareExpressionParser implements ExpressionParser
|
||||
}
|
||||
}
|
||||
|
||||
return expressions.toArray(new Expression[expressions.size()]);
|
||||
return expressions.toArray(new Expression[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -365,7 +365,7 @@ class InternalSpelExpressionParser extends TemplateAwareExpressionParser {
|
||||
}
|
||||
return new CompoundExpression(toPos(start.getStartPosition(),
|
||||
nodes.get(nodes.size() - 1).getEndPosition()),
|
||||
nodes.toArray(new SpelNodeImpl[nodes.size()]));
|
||||
nodes.toArray(new SpelNodeImpl[0]));
|
||||
}
|
||||
|
||||
// node : ((DOT dottedNode) | (SAFE_NAVI dottedNode) | nonDottedNode)+;
|
||||
@@ -443,7 +443,7 @@ class InternalSpelExpressionParser extends TemplateAwareExpressionParser {
|
||||
List<SpelNodeImpl> args = new ArrayList<>();
|
||||
consumeArguments(args);
|
||||
eatToken(TokenKind.RPAREN);
|
||||
return args.toArray(new SpelNodeImpl[args.size()]);
|
||||
return args.toArray(new SpelNodeImpl[0]);
|
||||
}
|
||||
|
||||
private void eatConstructorArgs(List<SpelNodeImpl> accumulatedArguments) {
|
||||
@@ -646,36 +646,33 @@ class InternalSpelExpressionParser extends TemplateAwareExpressionParser {
|
||||
// ',' - more expressions in this list
|
||||
// ':' - this is a map!
|
||||
if (peekToken(TokenKind.RCURLY)) { // list with one item in it
|
||||
List<SpelNodeImpl> listElements = new ArrayList<>();
|
||||
listElements.add(firstExpression);
|
||||
List<SpelNodeImpl> elements = new ArrayList<>();
|
||||
elements.add(firstExpression);
|
||||
closingCurly = eatToken(TokenKind.RCURLY);
|
||||
expr = new InlineList(toPos(t.startPos, closingCurly.endPos),
|
||||
listElements.toArray(new SpelNodeImpl[listElements.size()]));
|
||||
expr = new InlineList(toPos(t.startPos, closingCurly.endPos), elements.toArray(new SpelNodeImpl[0]));
|
||||
}
|
||||
else if (peekToken(TokenKind.COMMA, true)) { // multi-item list
|
||||
List<SpelNodeImpl> listElements = new ArrayList<>();
|
||||
listElements.add(firstExpression);
|
||||
List<SpelNodeImpl> elements = new ArrayList<>();
|
||||
elements.add(firstExpression);
|
||||
do {
|
||||
listElements.add(eatExpression());
|
||||
elements.add(eatExpression());
|
||||
}
|
||||
while (peekToken(TokenKind.COMMA, true));
|
||||
closingCurly = eatToken(TokenKind.RCURLY);
|
||||
expr = new InlineList(toPos(t.startPos, closingCurly.endPos),
|
||||
listElements.toArray(new SpelNodeImpl[listElements.size()]));
|
||||
expr = new InlineList(toPos(t.startPos, closingCurly.endPos), elements.toArray(new SpelNodeImpl[0]));
|
||||
|
||||
}
|
||||
else if (peekToken(TokenKind.COLON, true)) { // map!
|
||||
List<SpelNodeImpl> mapElements = new ArrayList<>();
|
||||
mapElements.add(firstExpression);
|
||||
mapElements.add(eatExpression());
|
||||
List<SpelNodeImpl> elements = new ArrayList<>();
|
||||
elements.add(firstExpression);
|
||||
elements.add(eatExpression());
|
||||
while (peekToken(TokenKind.COMMA, true)) {
|
||||
mapElements.add(eatExpression());
|
||||
elements.add(eatExpression());
|
||||
eatToken(TokenKind.COLON);
|
||||
mapElements.add(eatExpression());
|
||||
elements.add(eatExpression());
|
||||
}
|
||||
closingCurly = eatToken(TokenKind.RCURLY);
|
||||
expr = new InlineMap(toPos(t.startPos, closingCurly.endPos),
|
||||
mapElements.toArray(new SpelNodeImpl[mapElements.size()]));
|
||||
expr = new InlineMap(toPos(t.startPos, closingCurly.endPos), elements.toArray(new SpelNodeImpl[0]));
|
||||
}
|
||||
else {
|
||||
throw internalException(t.startPos, SpelMessage.OOD);
|
||||
@@ -743,10 +740,8 @@ class InternalSpelExpressionParser extends TemplateAwareExpressionParser {
|
||||
throw internalException(node.startPos, SpelMessage.NOT_EXPECTED_TOKEN,
|
||||
"qualified ID", node.getKind().toString().toLowerCase());
|
||||
}
|
||||
int pos = toPos(qualifiedIdPieces.getFirst().getStartPosition(),
|
||||
qualifiedIdPieces.getLast().getEndPosition());
|
||||
return new QualifiedIdentifier(pos,
|
||||
qualifiedIdPieces.toArray(new SpelNodeImpl[qualifiedIdPieces.size()]));
|
||||
int pos = toPos(qualifiedIdPieces.getFirst().getStartPosition(), qualifiedIdPieces.getLast().getEndPosition());
|
||||
return new QualifiedIdentifier(pos, qualifiedIdPieces.toArray(new SpelNodeImpl[0]));
|
||||
}
|
||||
|
||||
private boolean isValidQualifiedId(@Nullable Token node) {
|
||||
@@ -812,15 +807,13 @@ class InternalSpelExpressionParser extends TemplateAwareExpressionParser {
|
||||
nodes.add(pop());
|
||||
}
|
||||
push(new ConstructorReference(toPos(newToken),
|
||||
dimensions.toArray(new SpelNodeImpl[dimensions.size()]),
|
||||
nodes.toArray(new SpelNodeImpl[nodes.size()])));
|
||||
dimensions.toArray(new SpelNodeImpl[0]), nodes.toArray(new SpelNodeImpl[0])));
|
||||
}
|
||||
else {
|
||||
// regular constructor invocation
|
||||
eatConstructorArgs(nodes);
|
||||
// TODO correct end position?
|
||||
push(new ConstructorReference(toPos(newToken),
|
||||
nodes.toArray(new SpelNodeImpl[nodes.size()])));
|
||||
push(new ConstructorReference(toPos(newToken), nodes.toArray(new SpelNodeImpl[0])));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user