use of org.sonar.plugins.java.api.tree.VariableTree in project sonar-java by SonarSource.
the class JavaTreeModelTest method try_statement.
/**
* 14.20. The try statement
*/
@Test
public void try_statement() {
TryStatementTree tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try { } finally { } } }");
assertThat(tree.is(Tree.Kind.TRY_STATEMENT)).isTrue();
assertThat(tree.resources()).isEmpty();
assertThat(tree.block()).isNotNull();
assertThat(tree.catches()).isEmpty();
assertThat(tree.finallyKeyword().text()).isEqualTo("finally");
assertThat(tree.finallyBlock()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 4);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try { } catch (RuntimeException e1) { } catch (Exception e2) { } } }");
assertThat(tree.is(Tree.Kind.TRY_STATEMENT)).isTrue();
assertThat(tree.tryKeyword().text()).isEqualTo("try");
assertThat(tree.openParenToken()).isNull();
assertThat(tree.resources()).isEmpty();
assertThat(tree.closeParenToken()).isNull();
assertThat(tree.block()).isNotNull();
assertThat(tree.finallyKeyword()).isNull();
assertThat(tree.finallyBlock()).isNull();
assertThat(tree.catches()).hasSize(2);
assertThatChildrenIteratorHasSize(tree, 4);
CatchTree catchTree = tree.catches().get(0);
assertThat(catchTree.catchKeyword().text()).isEqualTo("catch");
assertThat(catchTree.block()).isNotNull();
assertThat(catchTree.openParenToken().text()).isEqualTo("(");
assertThat(catchTree.closeParenToken().text()).isEqualTo(")");
assertThatChildrenIteratorHasSize(catchTree, 5);
VariableTree parameterTree = catchTree.parameter();
assertThat(parameterTree.type()).isNotNull();
assertThat(parameterTree.simpleName().name()).isEqualTo("e1");
assertThat(parameterTree.initializer()).isNull();
assertThatChildrenIteratorHasSize(parameterTree, 3);
catchTree = tree.catches().get(1);
assertThatChildrenIteratorHasSize(catchTree, 5);
parameterTree = catchTree.parameter();
assertThat(parameterTree.type()).isNotNull();
assertThat(parameterTree.simpleName().name()).isEqualTo("e2");
assertThat(parameterTree.initializer()).isNull();
assertThatChildrenIteratorHasSize(parameterTree, 3);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try { } catch (Exception e) { } finally { } } }");
assertThat(tree.is(Tree.Kind.TRY_STATEMENT)).isTrue();
assertThat(tree.resources()).isEmpty();
assertThat(tree.block()).isNotNull();
assertThat(tree.catches()).hasSize(1);
assertThat(tree.finallyKeyword().text()).isEqualTo("finally");
assertThatChildrenIteratorHasSize(tree.catches().get(0), 5);
assertThat(tree.finallyBlock()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 5);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try { } catch (final @Foo Exception e) { } } }");
assertThat(tree.is(Tree.Kind.TRY_STATEMENT)).isTrue();
assertThat(tree.resources()).isEmpty();
assertThat(tree.block()).isNotNull();
assertThat(tree.catches()).hasSize(1);
assertThat(tree.finallyKeyword()).isNull();
assertThat(tree.finallyBlock()).isNull();
assertThatChildrenIteratorHasSize(tree, 3);
catchTree = tree.catches().get(0);
assertThatChildrenIteratorHasSize(catchTree, 5);
parameterTree = catchTree.parameter();
assertThat(parameterTree.modifiers()).hasSize(2);
assertThat(parameterTree.simpleName().identifierToken().text()).isEqualTo("e");
assertThat(parameterTree.type().is(Tree.Kind.IDENTIFIER)).isTrue();
assertThat(parameterTree.endToken()).isNull();
assertThat(parameterTree.initializer()).isNull();
assertThatChildrenIteratorHasSize(parameterTree, 3);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (final @Foo Resource r = open()) { } } }");
assertThat(tree.is(Tree.Kind.TRY_STATEMENT)).isTrue();
assertThat(tree.block()).isNotNull();
assertThat(tree.catches()).isEmpty();
assertThat(tree.finallyKeyword()).isNull();
assertThat(tree.finallyBlock()).isNull();
assertThat(tree.openParenToken().text()).isEqualTo("(");
assertThat(tree.resources()).hasSize(1);
assertThat(tree.closeParenToken().text()).isEqualTo(")");
assertThatChildrenIteratorHasSize(tree, 5);
VariableTree resource = tree.resources().get(0);
assertThat(resource.simpleName().name()).isEqualTo("r");
assertThat(resource.initializer()).isNotNull();
assertThat(resource.modifiers()).hasSize(2);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (Resource r1 = open(); Resource r2 = open()) { } catch (Exception e) { } finally { } } }");
assertThat(tree.is(Tree.Kind.TRY_STATEMENT)).isTrue();
assertThat(tree.block()).isNotNull();
assertThat(tree.catches()).hasSize(1);
assertThat(tree.finallyKeyword().text()).isEqualTo("finally");
assertThatChildrenIteratorHasSize(tree.catches().get(0), 5);
assertThat(tree.finallyBlock()).isNotNull();
assertThat(tree.openParenToken().text()).isEqualTo("(");
assertThat(tree.resources()).hasSize(2);
assertThat(tree.resources().separators()).hasSize(1);
assertThat(tree.closeParenToken().text()).isEqualTo(")");
resource = tree.resources().get(0);
assertThat(resource.simpleName().name()).isEqualTo("r1");
assertThat(resource.initializer()).isNotNull();
resource = tree.resources().get(1);
assertThat(resource.simpleName().name()).isEqualTo("r2");
assertThat(resource.initializer()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 8);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try { } catch (Exception1 | Exception2 e) { } } }");
parameterTree = tree.catches().get(0).parameter();
assertThatChildrenIteratorHasSize(parameterTree, 3);
UnionTypeTree type = (UnionTypeTree) parameterTree.type();
assertThatChildrenIteratorHasSize(type, 1);
assertThat(type.typeAlternatives()).hasSize(2);
assertThat(type.typeAlternatives().separators()).hasSize(1);
assertThatChildrenIteratorHasSize(tree, 3);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (r1) { } } }");
assertThat(tree.resources()).isEmpty();
assertThat(tree.resources().separators()).isEmpty();
assertThat(tree.resourceList()).hasSize(1);
assertThat(tree.resourceList().separators()).isEmpty();
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (r1; super.field; new A().f) { } } }");
assertThat(tree.resources()).isEmpty();
assertThat(tree.resources().separators()).isEmpty();
assertThat(tree.resourceList()).hasSize(3);
assertThat(tree.resourceList().separators()).hasSize(2);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (r1; Resource r2 = open();) { } } }");
assertThat(tree.resources()).hasSize(1);
assertThat(tree.resources().separators()).hasSize(1);
assertThat(tree.resources().separators().get(0).column()).isEqualTo(50);
assertThat(tree.resourceList()).hasSize(2);
assertThat(tree.resourceList().separators()).hasSize(2);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (r1; Resource r2 = open()) { } } }");
assertThat(tree.resources()).hasSize(1);
assertThat(tree.resources().separators()).isEmpty();
assertThat(tree.resourceList()).hasSize(2);
assertThat(tree.resourceList().separators()).hasSize(1);
tree = (TryStatementTree) firstMethodFirstStatement("class T { void m() { try (Resource r2 = open(); r1;) { } } }");
assertThat(tree.resources()).hasSize(1);
assertThat(tree.resources().separators()).hasSize(1);
assertThat(tree.resources().separators().get(0).column()).isEqualTo(46);
assertThat(tree.resourceList()).hasSize(2);
assertThat(tree.resourceList().separators()).hasSize(2);
}
use of org.sonar.plugins.java.api.tree.VariableTree in project sonar-java by SonarSource.
the class JavaTreeModelTest method interface_field.
@Test
public void interface_field() {
List<Tree> declarations = firstType("interface T { public int f1 = 42, f2[] = { 13 }; }").members();
assertThat(declarations).hasSize(2);
VariableTree tree = (VariableTree) declarations.get(0);
assertThat(tree.is(Tree.Kind.VARIABLE)).isTrue();
assertThat(tree.modifiers().modifiers()).hasSize(1);
assertThat(tree.modifiers().modifiers().get(0).modifier()).isEqualTo(Modifier.PUBLIC);
assertThat(tree.type()).isInstanceOf(PrimitiveTypeTree.class);
assertThat(tree.simpleName().name()).isEqualTo("f1");
assertThat(tree.initializer()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 6);
tree = (VariableTree) declarations.get(1);
assertThat(tree.is(Tree.Kind.VARIABLE)).isTrue();
assertThat(tree.modifiers().modifiers()).hasSize(1);
assertThat(tree.modifiers().modifiers().get(0).modifier()).isEqualTo(Modifier.PUBLIC);
assertThat(tree.type()).isInstanceOf(ArrayTypeTree.class);
assertThatArrayTypeHasBrackets((ArrayTypeTree) tree.type());
assertThat(tree.simpleName().name()).isEqualTo("f2");
assertThat(tree.initializer()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 6);
}
use of org.sonar.plugins.java.api.tree.VariableTree in project sonar-java by SonarSource.
the class JavaTreeModelTest method array_formal_parameter.
@Test
public void array_formal_parameter() {
MethodTree method;
VariableTree variable;
ArrayTypeTree arrayTypeTree, childArrayTypeTree;
method = (MethodTree) firstTypeMember("interface T { void m(int[] a); }");
variable = method.parameters().get(0);
// 1+2, as empty modifiers are always included
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThat(arrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
assertThatArrayTypeHasBrackets(arrayTypeTree);
assertThatChildrenIteratorHasSize(arrayTypeTree, 3);
method = (MethodTree) firstTypeMember("interface T { void m(int... a); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThat(arrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
assertThatArrayTypeHasEllipsis(arrayTypeTree);
assertThatChildrenIteratorHasSize(arrayTypeTree, 2);
method = (MethodTree) firstTypeMember("interface T { void m(int @Foo ... a); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThat(arrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
assertThatArrayTypeHasEllipsisAndAnnotations(arrayTypeTree, 1);
assertThatChildrenIteratorHasSize(arrayTypeTree, 3);
method = (MethodTree) firstTypeMember("interface T { void m(int @Foo ... a[]); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThatArrayTypeHasBrackets(arrayTypeTree);
assertThatChildrenIteratorHasSize(arrayTypeTree, 3);
childArrayTypeTree = (ArrayTypeTree) arrayTypeTree.type();
assertThat(childArrayTypeTree).isInstanceOf(ArrayTypeTree.class);
assertThatArrayTypeHasEllipsisAndAnnotations(childArrayTypeTree, 1);
assertThatChildrenIteratorHasSize(childArrayTypeTree, 3);
assertThat(childArrayTypeTree.ellipsisToken().column() < arrayTypeTree.openBracketToken().column()).isTrue();
assertThat(childArrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
method = (MethodTree) firstTypeMember("interface T { void m(int @Foo [] a); }");
assertThatChildrenIteratorHasSize(variable, 3);
variable = method.parameters().get(0);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThat(arrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
assertThatArrayTypeHasBracketsAndAnnotations(arrayTypeTree, 1);
assertThatChildrenIteratorHasSize(arrayTypeTree, 4);
method = (MethodTree) firstTypeMember("interface T { void m(int @Foo @bar [] a); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThat(arrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
assertThatArrayTypeHasBracketsAndAnnotations(arrayTypeTree, 2);
assertThatChildrenIteratorHasSize(arrayTypeTree, 5);
method = (MethodTree) firstTypeMember("interface T { void m(int[] @Foo [] a); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThatArrayTypeHasBracketsAndAnnotations(arrayTypeTree, 1);
assertThatChildrenIteratorHasSize(arrayTypeTree, 4);
childArrayTypeTree = (ArrayTypeTree) arrayTypeTree.type();
assertThat(childArrayTypeTree).isInstanceOf(ArrayTypeTree.class);
assertThatArrayTypeHasBrackets(childArrayTypeTree);
assertThatChildrenIteratorHasSize(childArrayTypeTree, 3);
assertThat(childArrayTypeTree.openBracketToken().column() < arrayTypeTree.openBracketToken().column()).isTrue();
assertThat(childArrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
method = (MethodTree) firstTypeMember("interface T { void m(int[] a[]); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThatArrayTypeHasBrackets(arrayTypeTree);
assertThatChildrenIteratorHasSize(arrayTypeTree, 3);
childArrayTypeTree = (ArrayTypeTree) arrayTypeTree.type();
assertThat(childArrayTypeTree).isInstanceOf(ArrayTypeTree.class);
assertThatArrayTypeHasBrackets(childArrayTypeTree);
assertThatChildrenIteratorHasSize(childArrayTypeTree, 3);
assertThat(childArrayTypeTree.openBracketToken().column() < arrayTypeTree.openBracketToken().column()).isTrue();
assertThat(childArrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
method = (MethodTree) firstTypeMember("interface T { void m(int[] a @Foo []); }");
variable = method.parameters().get(0);
assertThatChildrenIteratorHasSize(variable, 3);
assertThat(variable.type()).isInstanceOf(ArrayTypeTree.class);
arrayTypeTree = (ArrayTypeTree) variable.type();
assertThat(arrayTypeTree).isInstanceOf(ArrayTypeTree.class);
assertThatArrayTypeHasBracketsAndAnnotations(arrayTypeTree, 1);
assertThatChildrenIteratorHasSize(arrayTypeTree, 4);
childArrayTypeTree = (ArrayTypeTree) arrayTypeTree.type();
assertThat(childArrayTypeTree).isInstanceOf(ArrayTypeTree.class);
assertThatArrayTypeHasBrackets(childArrayTypeTree);
assertThatChildrenIteratorHasSize(childArrayTypeTree, 3);
assertThat(childArrayTypeTree.openBracketToken().column() < arrayTypeTree.openBracketToken().column()).isTrue();
assertThat(childArrayTypeTree.type()).isInstanceOf(PrimitiveTypeTree.class);
}
use of org.sonar.plugins.java.api.tree.VariableTree in project sonar-java by SonarSource.
the class JavaTreeModelTest method class_instance_creation_expression.
/**
* 15.9. Class Instance Creation Expressions
*/
@Test
public void class_instance_creation_expression() {
NewClassTree tree = (NewClassTree) expressionOfReturnStatement("class T { T m() { return new T(true, false) {}; } }");
assertThat(tree.is(Tree.Kind.NEW_CLASS)).isTrue();
assertThat(tree.enclosingExpression()).isNull();
assertThat(tree.dotToken()).isNull();
assertThat(tree.arguments().openParenToken()).isNotNull();
assertThat(tree.arguments()).hasSize(2);
assertThat(tree.arguments().closeParenToken()).isNotNull();
assertThat(tree.identifier()).isNotNull();
assertThat(tree.classBody()).isNotNull();
assertThat(tree.newKeyword()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 4);
// assertThat(tree.typeArguments()).isEmpty();
tree = (NewClassTree) expressionOfReturnStatement("class T { T m() { return Enclosing.new T(true, false) {}; } }");
assertThat(tree.is(Tree.Kind.NEW_CLASS)).isTrue();
assertThat(tree.enclosingExpression()).isNotNull();
assertThat(tree.dotToken()).isNotNull();
assertThat(tree.identifier()).isNotNull();
assertThat(tree.arguments().openParenToken()).isNotNull();
assertThat(tree.arguments()).hasSize(2);
assertThat(tree.arguments().closeParenToken()).isNotNull();
assertThat(tree.classBody()).isNotNull();
assertThat(tree.newKeyword()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 6);
// assertThat(tree.typeArguments()).isEmpty();
tree = (NewClassTree) expressionOfReturnStatement("class T { T m() { return this.new T(true, false) {}; } }");
assertThat(tree.enclosingExpression()).isNotNull();
assertThat(tree.dotToken()).isNotNull();
assertThat(tree.identifier()).isNotNull();
assertThat(tree.arguments().openParenToken()).isNotNull();
assertThat(tree.arguments()).hasSize(2);
assertThat(tree.arguments().closeParenToken()).isNotNull();
assertThat(tree.classBody()).isNotNull();
assertThat(tree.newKeyword()).isNotNull();
assertThatChildrenIteratorHasSize(tree, 6);
// assertThat(tree.typeArguments()).isEmpty();
tree = (NewClassTree) ((VariableTree) firstMethodFirstStatement("class T { void m() { Foo myInt = new<Integer>Foo(42); } }")).initializer();
assertThat(tree.enclosingExpression()).isNull();
assertThat(tree.dotToken()).isNull();
assertThat(tree.identifier()).isNotNull();
assertThat(tree.typeArguments()).isNotNull();
assertThat(tree.typeArguments()).hasSize(1);
assertThatChildrenIteratorHasSize(tree, 4);
}
use of org.sonar.plugins.java.api.tree.VariableTree in project sonar-java by SonarSource.
the class JavaTreeModelTest method annotations.
@Test
public void annotations() {
ClassTree tree = firstType("@SuppressWarnings(\"unchecked\") class T { }");
List<AnnotationTree> annotations = tree.modifiers().annotations();
assertThat(annotations).hasSize(1);
AnnotationTree annotation = annotations.get(0);
assertThat(annotation.annotationType().is(Tree.Kind.IDENTIFIER)).isTrue();
assertThat(annotation.arguments().openParenToken()).isNotNull();
assertThat(annotation.arguments().separators()).isEmpty();
assertThat(annotation.arguments()).hasSize(1);
assertThat(annotation.arguments().get(0).is(Tree.Kind.STRING_LITERAL)).isTrue();
assertThat(annotation.arguments().closeParenToken()).isNotNull();
assertThat(annotation.atToken()).isNotNull();
assertThatChildrenIteratorHasSize(annotation, 3);
tree = firstType("@Target( ) class U {}");
annotations = tree.modifiers().annotations();
assertThat(annotations).hasSize(1);
annotation = annotations.get(0);
assertThat(annotation.arguments().openParenToken()).isNotNull();
assertThat(annotation.arguments()).isEmpty();
assertThat(annotation.arguments().separators()).isEmpty();
assertThat(annotation.arguments().closeParenToken()).isNotNull();
assertThat(annotation.atToken()).isNotNull();
assertThatChildrenIteratorHasSize(annotation, 3);
tree = firstType("@Target({ElementType.METHOD}) class U {}");
annotations = tree.modifiers().annotations();
assertThat(annotations).hasSize(1);
annotation = annotations.get(0);
assertThat(annotation.arguments().openParenToken()).isNotNull();
assertThat(annotation.arguments()).hasSize(1);
assertThat(annotation.arguments().get(0).is(Tree.Kind.NEW_ARRAY)).isTrue();
assertThat(annotation.arguments().separators()).isEmpty();
assertThat(annotation.arguments().closeParenToken()).isNotNull();
assertThat(annotation.atToken()).isNotNull();
assertThatChildrenIteratorHasSize(annotation, 3);
tree = firstType("@SuppressWarnings({\"hello\",}) class U {}");
annotations = tree.modifiers().annotations();
assertThat(annotations).hasSize(1);
annotation = annotations.get(0);
assertThat(annotation.arguments().openParenToken()).isNotNull();
assertThat(annotation.arguments()).hasSize(1);
assertThat(annotation.arguments().get(0).is(Tree.Kind.NEW_ARRAY)).isTrue();
NewArrayTree arg = (NewArrayTree) annotation.arguments().get(0);
assertThat(arg.initializers()).hasSize(1);
assertThat(arg.initializers().get(0).is(Tree.Kind.STRING_LITERAL)).isTrue();
assertThat(arg.initializers().separators()).hasSize(1);
assertThat(annotation.arguments().closeParenToken()).isNotNull();
assertThat(annotation.atToken()).isNotNull();
assertThatChildrenIteratorHasSize(annotation, 3);
tree = firstType("@Target(value={ElementType.METHOD}, value2=\"toto\") class T { }");
annotations = tree.modifiers().annotations();
assertThat(annotations).hasSize(1);
annotation = annotations.get(0);
assertThat(annotation.annotationType().is(Tree.Kind.IDENTIFIER)).isTrue();
assertThat(annotation.arguments().openParenToken()).isNotNull();
assertThat(annotation.arguments()).hasSize(2);
assertThat(annotation.arguments().separators()).hasSize(1);
assertThat(annotation.arguments().get(0).is(Tree.Kind.ASSIGNMENT)).isTrue();
assertThat(annotation.arguments().closeParenToken()).isNotNull();
assertThat(annotation.atToken()).isNotNull();
assertThatChildrenIteratorHasSize(annotation, 3);
VariableTree variable = (VariableTree) firstMethodFirstStatement("class T { private void meth() { @NonNullable String str;}}");
assertThatChildrenIteratorHasSize(variable, 4);
annotations = variable.modifiers().annotations();
assertThat(annotations).hasSize(1);
annotation = annotations.get(0);
assertThat(annotation.annotationType().is(Tree.Kind.IDENTIFIER)).isTrue();
assertThat(annotation.atToken()).isNotNull();
assertThat(annotation.arguments()).isEmpty();
assertThatChildrenIteratorHasSize(annotation, 3);
annotations = compilationUnit("@PackageLevelAnnotation package blammy;").packageDeclaration().annotations();
assertThat(annotations).hasSize(1);
assertThat(annotations.get(0).atToken()).isNotNull();
assertThat(annotation.arguments()).isEmpty();
assertThatChildrenIteratorHasSize(annotation, 3);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { @Foo Integer foo; } }");
assertThat(variable.modifiers().annotations()).hasSize(1);
assertThat(variable.type().is(Tree.Kind.IDENTIFIER)).isTrue();
assertThat(variable.type().annotations()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 4);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { @Foo java.lang.Integer foo; } }");
assertThat(variable.modifiers().annotations()).hasSize(1);
assertThat(variable.type().is(Tree.Kind.MEMBER_SELECT)).isTrue();
assertThat(variable.type().annotations()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 4);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { java.lang.@Foo Integer foo; } }");
assertThat(variable.modifiers()).isEmpty();
assertThat(variable.type().is(Tree.Kind.MEMBER_SELECT)).isTrue();
assertThat(variable.type().annotations()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 4);
assertThat(((MemberSelectExpressionTree) variable.type()).identifier().annotations()).hasSize(1);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { a.B.C foo = a.B.new @Foo C(); } }");
assertThat(variable.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 6);
TypeTree type = ((NewClassTree) variable.initializer()).identifier();
assertThat(type.is(Tree.Kind.IDENTIFIER)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 2);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { a.b.C<Integer> foo = a.B.new @Foo C<Integer>(); } }");
assertThat(variable.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 6);
type = ((NewClassTree) variable.initializer()).identifier();
assertThat(type.is(Tree.Kind.PARAMETERIZED_TYPE)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 3);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { a.B.C foo = new @Foo a.B.C(); } }");
assertThat(variable.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 6);
type = ((NewClassTree) variable.initializer()).identifier();
assertThat(type.is(Tree.Kind.MEMBER_SELECT)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 4);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { a.b.C<Integer> foo = new @Foo a.b.C<Integer>(); } }");
assertThat(variable.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 6);
type = ((NewClassTree) variable.initializer()).identifier();
assertThat(type.is(Tree.Kind.PARAMETERIZED_TYPE)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 3);
variable = (VariableTree) firstMethodFirstStatement("class T { private void m() { int[] foo = new @Foo int[42]; } }");
assertThat(variable.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(variable, 6);
type = ((NewArrayTree) variable.initializer()).type();
assertThat(type.is(Tree.Kind.PRIMITIVE_TYPE)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 2);
variable = ((TryStatementTree) firstMethodFirstStatement("class T { private void m() { try{ } catch (@Foo E1 | E2 e) {}; } }")).catches().get(0).parameter();
assertThat(variable.modifiers()).hasSize(1);
assertThatChildrenIteratorHasSize(variable, 3);
type = variable.type();
assertThat(type.is(Tree.Kind.UNION_TYPE)).isTrue();
assertThat(type.annotations()).isEmpty();
assertThat(((UnionTypeTree) type).typeAlternatives().separators()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 1);
ClassTree classTree = firstType("class T extends @Foo a.b.C {}");
assertThat(classTree.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(classTree, 9);
type = classTree.superClass();
assertThat(type.is(Tree.Kind.MEMBER_SELECT)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 4);
classTree = firstType("class T extends @Foo a.b.C<Integer> {}");
assertThat(classTree.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(classTree, 9);
type = classTree.superClass();
assertThat(type.is(Tree.Kind.PARAMETERIZED_TYPE)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 3);
classTree = (ClassTree) firstMethodFirstStatement("class MyClass<A, B, C> { void foo() { class MyOtherClass extends @Foo MyClass<A, B, C>.MyInnerClass {} } public class MyInnerClass {}}");
assertThat(classTree.modifiers()).isEmpty();
assertThatChildrenIteratorHasSize(classTree, 9);
type = classTree.superClass();
assertThat(type.is(Tree.Kind.MEMBER_SELECT)).isTrue();
assertThat(type.annotations()).hasSize(1);
type = (ParameterizedTypeTree) ((MemberSelectExpressionTree) type).expression();
assertThat(type.is(Tree.Kind.PARAMETERIZED_TYPE)).isTrue();
assertThat(type.annotations()).hasSize(0);
assertThatChildrenIteratorHasSize(type, 2);
TypeCastTree typeCast = (TypeCastTree) ((ReturnStatementTree) firstMethodFirstStatement("class T { private long m(int a) { return (@Foo long) a; } }")).expression();
assertThat(typeCast.type()).isNotNull();
assertThatChildrenIteratorHasSize(typeCast, 5);
type = typeCast.type();
assertThat(type.is(Tree.Kind.PRIMITIVE_TYPE)).isTrue();
assertThat(type.annotations()).hasSize(1);
assertThatChildrenIteratorHasSize(type, 2);
}
Aggregations