/*
* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6341023
* @summary Tree API: Tree.Kind should have mapping to interface
* @modules jdk.compiler
*/
import com.sun.source.tree.*;
public class TreeKindTest {
public static void main(String... args) {
boolean ok = true;
for (Tree.Kind k: Tree.Kind.values()) {
//System.err.println(k + " " + k.asInterface());
Class<? extends Tree> i = k.asInterface();
switch (k) {
case POSTFIX_INCREMENT:
case POSTFIX_DECREMENT:
case PREFIX_INCREMENT:
case PREFIX_DECREMENT:
case UNARY_PLUS:
case UNARY_MINUS:
case BITWISE_COMPLEMENT:
case LOGICAL_COMPLEMENT:
ok = ok & verify(k, i, i == UnaryTree.class);
break;
case MULTIPLY:
case DIVIDE:
case REMAINDER:
case PLUS:
case MINUS:
case LEFT_SHIFT:
case RIGHT_SHIFT:
case UNSIGNED_RIGHT_SHIFT:
case LESS_THAN:
case GREATER_THAN:
case LESS_THAN_EQUAL:
case GREATER_THAN_EQUAL:
case EQUAL_TO:
case NOT_EQUAL_TO:
case AND:
case XOR:
case OR:
case CONDITIONAL_AND:
case CONDITIONAL_OR:
ok = ok & verify(k, i, i == BinaryTree.class);
break;
case MULTIPLY_ASSIGNMENT:
case DIVIDE_ASSIGNMENT:
case REMAINDER_ASSIGNMENT:
case PLUS_ASSIGNMENT:
case MINUS_ASSIGNMENT:
case LEFT_SHIFT_ASSIGNMENT:
case RIGHT_SHIFT_ASSIGNMENT:
case UNSIGNED_RIGHT_SHIFT_ASSIGNMENT:
case AND_ASSIGNMENT:
case XOR_ASSIGNMENT:
case OR_ASSIGNMENT:
ok = ok & verify(k, i, i == CompoundAssignmentTree.class);
break;
case INT_LITERAL:
case LONG_LITERAL:
case FLOAT_LITERAL:
case DOUBLE_LITERAL:
case BOOLEAN_LITERAL:
case CHAR_LITERAL:
case STRING_LITERAL:
case NULL_LITERAL:
ok = ok & verify(k, i, i == LiteralTree.class);
break;
case UNBOUNDED_WILDCARD:
case EXTENDS_WILDCARD:
case SUPER_WILDCARD:
ok = ok & verify(k, i, i == WildcardTree.class);
break;
case INTERFACE:
case ANNOTATION_TYPE:
case ENUM:
case CLASS:
ok = ok & verify(k, i, i == ClassTree.class);
break;
case ANNOTATION:
case TYPE_ANNOTATION:
ok = ok & verify(k, i, i == AnnotationTree.class);
break;
case EXPORTS:
ok = ok & verify(k, i, i == ExportsTree.class);
break;
case OPENS:
ok = ok & verify(k, i, i == OpensTree.class);
break;
case OTHER:
ok = ok & verify(k, i, i == null);
break;
default:
String ks = k.toString().replace("_", "") + "tree";
String iName = i.getName();
String is = iName.substring(iName.lastIndexOf(".") + 1);
ok = ok & verify(k, i, ks.equalsIgnoreCase(is));
}
}
if (!ok)
throw new AssertionError("test failed");
}
static boolean verify(Tree.Kind k, Class<?> c, boolean b) {
if (!b)
System.err.println("error: " + k + " " + c);
return b;
}
}