diff options
Diffstat (limited to 'third_party/checker_framework_dataflow/java/org/checkerframework/dataflow/util/NodeUtils.java')
-rw-r--r-- | third_party/checker_framework_dataflow/java/org/checkerframework/dataflow/util/NodeUtils.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/third_party/checker_framework_dataflow/java/org/checkerframework/dataflow/util/NodeUtils.java b/third_party/checker_framework_dataflow/java/org/checkerframework/dataflow/util/NodeUtils.java new file mode 100644 index 0000000000..3c2efc548e --- /dev/null +++ b/third_party/checker_framework_dataflow/java/org/checkerframework/dataflow/util/NodeUtils.java @@ -0,0 +1,45 @@ +package org.checkerframework.dataflow.util; + +import org.checkerframework.javacutil.TypesUtils; + +import org.checkerframework.dataflow.cfg.node.ConditionalOrNode; +import org.checkerframework.dataflow.cfg.node.Node; + +import com.sun.source.tree.Tree; +import com.sun.tools.javac.code.Type; +import com.sun.tools.javac.tree.JCTree; + +/** + * A utility class to operate on a given {@link Node}. + * + * @author Stefan Heule + * + */ +public class NodeUtils { + + /** + * @return true iff {@code node} corresponds to a boolean typed + * expression (either the primitive type {@code boolean}, or + * class type {@link java.lang.Boolean}) + */ + public static boolean isBooleanTypeNode(Node node) { + + if (node instanceof ConditionalOrNode) { + return true; + } + + // not all nodes have an associated tree, but those are all not of a + // boolean type. + Tree tree = node.getTree(); + if (tree == null) { + return false; + } + + Type type = ((JCTree) tree).type; + if (TypesUtils.isBooleanType(type)) { + return true; + } + + return false; + } +} |