[
https://issues.apache.org/jira/browse/GROOVY-11492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18135259#comment-18135259
]
ASF GitHub Bot commented on GROOVY-11492:
-----------------------------------------
eric-milles commented on code in PR #3054:
URL: https://github.com/apache/groovy/pull/3054#discussion_r4425456242
##########
src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java:
##########
@@ -2485,10 +2495,30 @@ public DeclarationExpression
visitVariableDeclarator(final VariableDeclaratorCon
),
ctx.variableDeclaratorId()),
token,
-
this.visitVariableInitializer(ctx.variableInitializer())),
+ init),
ctx);
}
+ private void checkArrayInitEdgeCase(final Expression expr) {
+ if (expr instanceof ArrayExpression array && array.hasInitializer()) {
+ ClassNode elementType = array.getElementType();
+
+ ClassNode baseType = elementType;
+ while (baseType.isArray()) baseType = baseType.getComponentType();
+ if (isPrimitiveType(baseType)) {
+ return; // closure coerced to boolean or integer is not likely
+ }
+
+ if (!elementType.isArray()) {
+ if (array.getExpressions().size() == 1 &&
!(array.getExpression(0) instanceof ClosureExpression)) {
Review Comment:
The type is not resolved here. Only primitive types get resolved by name.
Restriction to closure or SAM types is not possible.
> Java compatibility: array initializers without "new Type[]"
> -----------------------------------------------------------
>
> Key: GROOVY-11492
> URL: https://issues.apache.org/jira/browse/GROOVY-11492
> Project: Groovy
> Issue Type: Improvement
> Components: parser-antlr4
> Reporter: Eric Milles
> Assignee: Eric Milles
> Priority: Major
> Labels: arrays
>
> There are a few cases where bare array initializers are not yet supported:
> # {{int[][] array = \{ \{1,2\}, \{3,4\} \};}}
> # {{@Target(\{ ElementType.FIELD, ElementType.METHOD \})}}
> # {code:groovy}@interface A {
> String[] strings() default {}
> }
> {code}
> These were implemented as part of [1] but the PR was closed. It may be worth
> looking back over what was done and re-implementing one or more of these
> cases. It was noted that {{Closure[] array = \{\};}} is one of the edge
> cases that leads to ambiguity.
> [1] https://github.com/apache/groovy/pull/691
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)