package org.projectusus.core.filerelations.model;
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.FieldAccess;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SimpleType;
public class BoundTypeConverter {
private final TypeBindingChecker bindingChecker = new TypeBindingChecker();
private ASTNodeHelper nodeHelper;
public BoundTypeConverter( ASTNodeHelper nodeHelper ) {
this.nodeHelper = nodeHelper;
}
public WrappedTypeBinding wrap( AbstractTypeDeclaration node ) {
if( node != null ) {
return wrap( nodeHelper.resolveBindingOf( node ) );
}
return null;
}
public WrappedTypeBinding wrap( SimpleType node ) {
if( node != null ) {
return wrap( nodeHelper.resolveBindingOf( node ) );
}
return null;
}
public WrappedTypeBinding wrap( SimpleName node ) {
if( node != null ) {
IBinding binding = nodeHelper.resolveBindingOf( node );
if( binding instanceof ITypeBinding ) {
return wrap( ((ITypeBinding)binding) );
}
if( binding instanceof IVariableBinding ) {
return wrap( ((IVariableBinding)binding).getDeclaringClass() );
}
}
return null;
}
public WrappedTypeBinding wrap( MethodInvocation node ) {
if( node != null ) {
IMethodBinding methodBinding = node.resolveMethodBinding();
if( methodBinding != null ) {
return wrap( methodBinding.getDeclaringClass() );
}
}
return null;
}
public WrappedTypeBinding wrap( FieldAccess node ) {
if( node != null ) {
return wrap( nodeHelper.resolveTypeBindingOf( node ) );
}
return null;
}
public WrappedTypeBinding wrap( QualifiedName qualifier ) {
if( qualifier != null ) {
return wrap( nodeHelper.resolveTypeBindingOf( qualifier ) );
}
return null;
}
private WrappedTypeBinding wrap( ITypeBinding binding ) {
return bindingChecker.checkForRelevanceAndWrap( binding );
}
}