package com.example.lawofdemeter;
import java.util.Arrays;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
public class IJavaElementVisitor {
ASTParser parser;
public void visit(ICompilationUnit unit) {
parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setProject(unit.getJavaProject());
try {
this.visitCompilationUnit(unit);
} catch (JavaModelException ex) {
System.out.println("EX: " + ex);
throw new RuntimeException(ex);
}
}
public void visitCompilationUnit(ICompilationUnit unit) throws JavaModelException {
System.out.println(unit.getHandleIdentifier());
for (IJavaElement each: unit.getChildren()) {
if (each instanceof IType) {
this.visitTopLevelType((IType) each);
}
}
}
public void visitTopLevelType(IType type) throws JavaModelException {
System.out.println(type.getHandleIdentifier());
for (IJavaElement each: type.getChildren()) {
if (each instanceof IField) {
this.visitField((IField) each);
}
else if (each instanceof IMethod) {
this.visitMethod((IMethod) each);
}
else if (each instanceof IType) {
this.visitInnerType((IType) each);
}
}
}
private void visitInnerType(IType each) {
// TODO Auto-generated method stub
}
private void visitMethod(IMethod each) throws JavaModelException {
System.out.println("IJavaElementVisitor.visitMethod()");
// TODO Auto-generated method stub
System.out.println(Arrays.asList(each.getChildren()));
}
private void visitField(IField field) throws JavaModelException {
System.out.println("IJavaElementVisitor.visitField()");
System.out.println(Arrays.asList(field.getChildren()));
System.out.println(field.getClass());
System.out.println(field);
System.out.println(field.getSource());
System.out.println(field.getTypeSignature());
System.out.println(field.getTypeRoot());
// System.out.println("**b*");
// try {
// parser.setProject(field.getJavaProject());
// IBinding[] bindings = parser.createBindings(new IJavaElement[] { field }, null);
// System.out.println(bindings[0]);
// System.out.println(bindings[0].getClass());
// System.out.println(((IVariableBinding) bindings[0]).getType().getQualifiedName());
// } catch (Exception e) {
// e.printStackTrace();
// }
// System.out.println("**e*");
}
}