import java.util.ArrayList;
import java.util.Collections;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import com.sun.source.util.JavacTask;
import com.sun.tools.javac.code.Symtab;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.api.JavacTool;
import com.sun.tools.javac.api.JavacTaskImpl;

public class T {
    public static void main(String... args) throws Exception {
        JavacTool tool = JavacTool.create();
        StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null);
        Iterable<? extends JavaFileObject> fos = fm.getJavaFileObjectsFromStrings(new ArrayList<String>());
        JavacTask task = tool.getTask(null, fm, null, new ArrayList<String>(), null, fos);
	Context ctx = ((JavacTaskImpl)task).getContext();

	final TreeMaker   treeMaker        = TreeMaker.instance(ctx);
	final Symtab      syms             = Symtab.instance(ctx);
	final DPrinter    dp		   = DPrinter.instance(ctx);
	dp.source(true).treeSymbols(true).treeTypes(true).source(Integer.MAX_VALUE);

	dp.printTree("test ", treeMaker.QualIdent(syms.stringType.tsym));

	System.out.println("================================");
	dp.printSymbol("S.o.o ",  syms.stringType.tsym.owner.owner);
	System.out.println("================================");
	dp.printSymbol("S.o.o.o ", syms.stringType.tsym.owner.owner.owner);
	System.out.println("================================");
    }
}
/*
treeMaker.QualIdent
	isUnqualifiable(sym)
		if sym.owner == null...
*/
