class HandleAST extends AST {
	private final TagAST tag;
	private final TypeAST owner;
	private final NameAST name;
	private final DescAST desc;

	/**
	 * @param line
	 * 		Line number this node is written on.
	 * @param start
	 * 		Offset from line start this node starts at.
	 * @param tag
	 * 		Handle tag AST.
	 * @param owner
	 * 		Handle reference owner type AST.
	 * @param name
	 * 		Handle reference name AST.
	 * @param desc
	 * 		Handle reference descriptor AST.
	 */
	public HandleAST(int line, int start, TagAST tag, TypeAST owner, NameAST name, DescAST desc) {
		super(line, start);
		this.tag = tag;
		this.owner = owner;
		this.name = name;
		this.desc = desc;
		addChild(tag);
		addChild(owner);
		addChild(name);
		addChild(desc);
	}

	/**
	 * @return Handle tag AST.
	 */
	public TagAST getTag() {
		return tag;
	}

	/**
	 * @return Type AST of reference owner.
	 */
	public TypeAST getOwner() {
		return owner;
	}

	/**
	 * @return Name AST of reference name.
	 */
	public NameAST getName() {
		return name;
	}

	/**
	 * @return Desc AST of reference descriptor.
	 */
	public DescAST getDesc() {
		return desc;
	}

	@Override
	public String print() {<FILL_FUNCTION_BODY>}

	/**
	 * @return ASM handle from AST data.
	 */
	public Handle compile() {
		return new Handle(getTag().getTag(), getOwner().getUnescapedType(), getName().getUnescapedName(),
				getDesc().getUnescapedDesc(), getTag().getTag() == Opcodes.H_INVOKEINTERFACE);
	}
}

		String split = getTag().isMethod() ? "" : " ";
		return "handle[" + getTag().print() + " " +
				owner.print() + "." + name.print() + split + desc.print() + "]";
	
<methods>public void <init>(int, int) ,public void addChild(me.coley.recaf.parse.bytecode.ast.AST) ,public List<me.coley.recaf.parse.bytecode.ast.AST> getChildren() ,public int getLine() ,public me.coley.recaf.parse.bytecode.ast.AST getNext() ,public me.coley.recaf.parse.bytecode.ast.AST getParent() ,public me.coley.recaf.parse.bytecode.ast.AST getPrev() ,public int getStart() ,public abstract java.lang.String print() ,public List<T> search(Class<T>) ,public void setNext(me.coley.recaf.parse.bytecode.ast.AST) ,public void setParent(me.coley.recaf.parse.bytecode.ast.AST) ,public void setPrev(me.coley.recaf.parse.bytecode.ast.AST) ,public java.lang.String toString() <variables>private final List<me.coley.recaf.parse.bytecode.ast.AST> children,private final non-sealed int line,private me.coley.recaf.parse.bytecode.ast.AST next,private me.coley.recaf.parse.bytecode.ast.AST parent,private me.coley.recaf.parse.bytecode.ast.AST prev,private final non-sealed int start