⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treepath.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
字号:
/** * @(#)TreePath.java	1.3 06/06/12 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * Use and Distribution is subject to the Java Research License available * at <http://wwws.sun.com/software/communitysource/jrl.html>. */package com.sun.source.util;import com.sun.source.tree.*;import java.util.Iterator;/** * A path of tree nodes, typically used to represent the sequence of ancestor * nodes of a tree node up to the top level CompilationUnitTree node. * * @author Jonathan Gibbons * @since 1.6 */public class TreePath implements Iterable<Tree> {    /**     * Gets a tree path for a tree node within a compilation unit.     * @return null if the node is not found     */    public static TreePath getPath(CompilationUnitTree unit, Tree target) {	return getPath(new TreePath(unit), target);    }        /**     * Gets a tree path for a tree node within a subtree identified by a TreePath object.     * @return null if the node is not found     */    public static TreePath getPath(TreePath path, Tree target) {	path.getClass();	target.getClass();		class Result extends Error {	    static final long serialVersionUID = -5942088234594905625L;	    TreePath path;	    Result(TreePath path) {		this.path = path;	    }	}	class PathFinder extends TreePathScanner<TreePath,Tree> {	    public TreePath scan(Tree tree, Tree target) {		if (tree == target)		    throw new Result(new TreePath(getCurrentPath(), target));		return super.scan(tree, target);	    }	}		try {	    new PathFinder().scan(path, target);	} catch (Result result) {	    return result.path;	}        return null;    }        /**     * Creates a TreePath for a root node.     */    public TreePath(CompilationUnitTree t) {        this(null, t);    }        /**     * Creates a TreePath for a child node.     */    public TreePath(TreePath p, Tree t) {        if (t.getKind() == Tree.Kind.COMPILATION_UNIT) {            compilationUnit = (CompilationUnitTree) t;            parent = null;         }        else {            compilationUnit = p.compilationUnit;            parent = p;        }        leaf = t;    }    /**     * Get the compilation unit associated with this path.     */    public CompilationUnitTree getCompilationUnit() {	return compilationUnit;    }        /**     * Get the leaf node for this path.     */    public Tree getLeaf() {	return leaf;    }        /**     * Get the path for the enclosing node, or null if there is no enclosing node.     */    public TreePath getParentPath() {	return parent;    }    public Iterator<Tree> iterator() {	return new Iterator<Tree>() {	    public boolean hasNext() {		return curr.parent != null;	    }	    	    public Tree next() {		curr = curr.parent;		return curr.leaf;	    }	    	    public void remove() {		throw new UnsupportedOperationException();	    }	    	    private TreePath curr;	};    }        private CompilationUnitTree compilationUnit;    private Tree leaf;    private TreePath parent;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -