code: package gr.uom.java.ast.util;
  
  import java.util.ArrayList;
  import java.util.LinkedHashSet;
  import java.util.List;
  import java.util.Set;
  
  import org.eclipse.jdt.core.dom.ASTVisitor;
  import org.eclipse.jdt.core.dom.IBinding;
  import org.eclipse.jdt.core.dom.ITypeBinding;
  import org.eclipse.jdt.core.dom.SimpleName;
  import org.eclipse.jdt.core.dom.SimpleType;
  import org.eclipse.jdt.core.dom.Type;
  
  public class TypeVisitor extends ASTVisitor {
  	private Set<ITypeBinding> typeBindings = new LinkedHashSet<ITypeBinding>();
  	private List<Type> types = new ArrayList<Type>();
  	
  	public boolean visit(SimpleType node) {
  		ITypeBinding typeBinding = node.resolveBinding();
  		if(typeBinding != null)
  			typeBindings.add(typeBinding);
  		types.add(node);
  		return super.visit(node);
  	}
  
  	public boolean visit(SimpleName node) {
  		IBinding binding = node.resolveBinding();
  		if(binding != null && binding.getKind() == IBinding.TYPE) {
  			ITypeBinding typeBinding = (ITypeBinding)binding;
  			typeBindings.add(typeBinding);
  		}
  		return super.visit(node);
  	}
  
  	public Set<ITypeBinding> getTypeBindings() {
  		return typeBindings;
  	}
  
  	public List<Type> getTypes() {
  		return types;
  	}
  }
  