Skip to content

Commit

Permalink
Merge branch 'master' of github.com:javaparser/javaparser
Browse files Browse the repository at this point in the history
  • Loading branch information
arturbosch committed Jan 15, 2017
2 parents c9ad85d + d5dd852 commit 22a97ae
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 10 deletions.
Expand Up @@ -111,4 +111,8 @@ public ArrayCreationLevel setAnnotations(NodeList<AnnotationExpr> annotations) {
public List<NodeList<?>> getNodeLists() {
return Arrays.asList(annotations);
}

public void removeDimension() {
setDimension(null);
}
}
Expand Up @@ -91,7 +91,11 @@ public static Type wrapInArrayTypes(Type type, List<ArrayBracketPair>... arrayBr
if (arrayBracketPairList != null) {
for (int j = arrayBracketPairList.size() - 1; j >= 0; j--) {
ArrayBracketPair pair = arrayBracketPairList.get(j);
type = new ArrayType(pair.getRange().orElse(null), type, pair.getAnnotations());
Range range = null;
if (type.getRange().isPresent() && pair.getRange().isPresent()) {
range = new Range(type.getBegin().get(), pair.getRange().get().end);
}
type = new ArrayType(range, type, pair.getAnnotations());
}
}
}
Expand Down
Expand Up @@ -49,7 +49,7 @@ private void makeIndent() {
}
}

SourcePrinter print(final String arg) {
public SourcePrinter print(final String arg) {
if (!indented) {
makeIndent();
indented = true;
Expand All @@ -58,13 +58,13 @@ SourcePrinter print(final String arg) {
return this;
}

SourcePrinter println(final String arg) {
public SourcePrinter println(final String arg) {
print(arg);
println();
return this;
}

SourcePrinter println() {
public SourcePrinter println() {
buf.append(EOL);
indented = false;
return this;
Expand Down
14 changes: 8 additions & 6 deletions javaparser-core/src/main/javacc/java_1_8.jj
Expand Up @@ -192,11 +192,11 @@ final class ASTParser {
return ret;
}

private ArrayCreationExpr juggleArrayCreation(Range range, Type type, NodeList<Expression> dimensions, List<NodeList<AnnotationExpr>> arrayAnnotations, ArrayInitializerExpr arrayInitializerExpr) {
private ArrayCreationExpr juggleArrayCreation(Range range, List<Range> levelRanges, Type type, NodeList<Expression> dimensions, List<NodeList<AnnotationExpr>> arrayAnnotations, ArrayInitializerExpr arrayInitializerExpr) {
NodeList<ArrayCreationLevel> levels = new NodeList<ArrayCreationLevel>();

for(int i = 0; i < arrayAnnotations.size(); i++){
levels.add(new ArrayCreationLevel(range, dimensions.get(i), arrayAnnotations.get(i)));
levels.add(new ArrayCreationLevel(levelRanges.get(i), dimensions.get(i), arrayAnnotations.get(i)));
}
return new ArrayCreationExpr(range, type, levels, arrayInitializerExpr);
}
Expand Down Expand Up @@ -2717,17 +2717,19 @@ ArrayCreationExpr ArrayCreation(Position begin, Type type):
NodeList<Expression> inits = emptyList();
List<NodeList<AnnotationExpr>> accum = new ArrayList<NodeList<AnnotationExpr>>();
NodeList<AnnotationExpr> annotations = new NodeList<AnnotationExpr>();
Position arrayCreationLevelStart = null;
List<Range> levelRanges = new ArrayList<Range>();
}
{
( LOOKAHEAD(2)
annotations = Annotations()
"["
annotations = Annotations()
"[" { arrayCreationLevelStart = annotations.isEmpty() ? tokenBegin() : annotations.get(0).getRange().get().begin; }
(expr = Expression())? { accum = add(accum, annotations); inits = add(inits, expr); annotations=null; expr=null; }
"]"
"]" { levelRanges.add(new Range(arrayCreationLevelStart,tokenEnd())); }
)+
(arrayInitializerExpr = ArrayInitializer())?
{
return juggleArrayCreation(range(begin, tokenEnd()), type, inits, accum, arrayInitializerExpr);
return juggleArrayCreation(range(begin, tokenEnd()), levelRanges, type, inits, accum, arrayInitializerExpr);
}
}

Expand Down
Expand Up @@ -21,10 +21,15 @@

package com.github.javaparser;

import com.github.javaparser.ast.ArrayCreationLevel;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.AnnotationMemberDeclaration;
import com.github.javaparser.ast.expr.ArrayCreationExpr;
import com.github.javaparser.ast.expr.Expression;
import org.junit.Test;

import java.util.Optional;

import static org.junit.Assert.assertEquals;

public class JavaParserTest {
Expand All @@ -37,4 +42,43 @@ public void rangeOfAnnotationMemberDeclarationIsCorrect() {
assertEquals(true, memberDeclaration.getRange().isPresent());
assertEquals(new Range(new Position(1, 17), new Position(1, 29)), memberDeclaration.getRange().get());
}

@Test
public void rangeOfAnnotationMemberDeclarationWithArrayTypeIsCorrect() {
String code = "@interface AD { String[] foo(); }";
CompilationUnit cu = JavaParser.parse(code);
AnnotationMemberDeclaration memberDeclaration = (AnnotationMemberDeclaration) cu.getAnnotationDeclarationByName("AD").get().getMember(0);
assertEquals(true, memberDeclaration.getRange().isPresent());
assertEquals(new Range(new Position(1, 17), new Position(1, 31)), memberDeclaration.getRange().get());
}

@Test
public void rangeOfArrayCreationLevelWithExpressionIsCorrect() {
String code = "new int[123][456]";
ArrayCreationExpr expression = (ArrayCreationExpr)JavaParser.parseExpression(code);
Optional<Range> range;

range = expression.getLevels().get(0).getRange();
assertEquals(true, range.isPresent());
assertEquals(new Range(new Position(1, 8), new Position(1, 12)), range.get());

range = expression.getLevels().get(1).getRange();
assertEquals(true, range.isPresent());
assertEquals(new Range(new Position(1, 13), new Position(1, 17)), range.get());
}

@Test
public void rangeOfArrayCreationLevelWithoutExpressionIsCorrect() {
String code = "new int[][]";
ArrayCreationExpr expression = (ArrayCreationExpr)JavaParser.parseExpression(code);
Optional<Range> range;

range = expression.getLevels().get(0).getRange();
assertEquals(true, range.isPresent());
assertEquals(new Range(new Position(1, 8), new Position(1, 9)), range.get());

range = expression.getLevels().get(1).getRange();
assertEquals(true, range.isPresent());
assertEquals(new Range(new Position(1, 10), new Position(1, 11)), range.get());
}
}
Expand Up @@ -89,4 +89,12 @@ public void strictlyContainedRangesOnStrictlyContains() throws IOException {
assertEquals(false, r2.strictlyContains(r1));
}

@Test
public void containsConsiderLines() {
Range r1 = Range.range(22, 9, 22, 29);
Range r2 = Range.range(26, 19, 26, 28);
assertEquals(false, r1.contains(r2));
assertEquals(false, r2.contains(r1));
}

}

0 comments on commit 22a97ae

Please sign in to comment.