/* Copyright (C) 2004 - 2010 Versant Inc. http://www.db4o.com */
package sharpen.core.framework;
import static sharpen.core.framework.BindingUtils.*;
import java.util.*;
import org.eclipse.jdt.core.dom.*;
public class StaticImports {
public static boolean isStaticMethodImport(ImportDeclaration imp, IMethodBinding method) {
final IBinding binding = imp.resolveBinding();
switch (binding.getKind()) {
case IBinding.TYPE:
return imp.isOnDemand() && method.getDeclaringClass() == binding;
case IBinding.METHOD:
IMethodBinding bound = (IMethodBinding) binding;
return bound.getDeclaringClass() == method.getDeclaringClass() && binding.getName().equals(method.getMethodDeclaration().getName());
}
return false;
}
public static boolean isStaticFieldImport(ImportDeclaration imp, IVariableBinding field) {
final IBinding binding = imp.resolveBinding();
if (binding.getKind() == IBinding.VARIABLE)
return binding == field;
return false;
}
public static boolean isStaticImport(IMethodBinding method, List imports) {
if (!isStatic(method))
return false;
for (Object imp : imports)
if (isStaticMethodImport((ImportDeclaration) imp, method))
return true;
return false;
}
public static boolean isStaticImport(IVariableBinding field, List imports) {
if (!isStatic(field))
return false;
for (Object imp : imports)
if (isStaticFieldImport((ImportDeclaration) imp, field))
return true;
return false;
}
public static IMethodBinding staticImportMethodBinding(SimpleName node, List imports) {
if (node.getLocationInParent() != MethodInvocation.NAME_PROPERTY)
return null;
final MethodInvocation invocation = parentMethodInvocation(node);
if (invocation.getExpression() != null)
return null;
final IMethodBinding method = invocation.resolveMethodBinding();
if (!isStaticImport(method, imports))
return null;
return method;
}
private static MethodInvocation parentMethodInvocation(SimpleName node) {
return ((MethodInvocation)node.getParent());
}
}