package de.ovgu.cide.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.Modifier;
import de.ovgu.cide.typing.jdt.BindingProjectColorCache;
/**
* Structure item which helps to store an inherited method.
*
* @author aDreiling
*
*/
public class MethodPathItem {
final private String key;
final private boolean isAbstract;
final private boolean isDeclClassAbstract;
private List<String> paramKeys;
private Map<String, List<String>> exceptionKeys;
private final IMethodBinding binding;
public MethodPathItem(IMethodBinding binding, boolean isDeclClassAbstract) {
this.binding = binding;
this.isDeclClassAbstract = isDeclClassAbstract;
key = binding.getKey();
isAbstract = Modifier.isAbstract(binding.getModifiers());
}
public IMethodBinding getBinding() {
return binding;
}
public boolean isDeclaringClassAbstract() {
return isDeclClassAbstract;
}
public String getKey() {
return key;
}
public boolean isAbstract() {
return isAbstract;
}
public List<String> getInheritedParamKeys() {
if (paramKeys != null)
return paramKeys;
paramKeys = new ArrayList<String>();
for (int i = 0; i < binding.getParameterTypes().length; i++) {
paramKeys.add(BindingProjectColorCache.getParamKey(key, i));
}
return paramKeys;
}
public Map<String, List<String>> getInheritedExceptionKeys(
IMethodBinding sourceBinding) {
if (exceptionKeys != null)
return exceptionKeys;
exceptionKeys = new HashMap<String, List<String>>();
// add cast compatible exception
for (ITypeBinding tmpExBinding : sourceBinding.getExceptionTypes()) {
ArrayList<String> tmpExceKeys = new ArrayList<String>();
for (ITypeBinding tmpMethExBinding : binding.getExceptionTypes()) {
if (tmpExBinding.isCastCompatible(tmpMethExBinding))
tmpExceKeys.add(BindingProjectColorCache.getExceptionKey(
binding.getKey(), tmpMethExBinding.getKey()));
}
exceptionKeys.put(tmpExBinding.getKey(), tmpExceKeys);
}
return exceptionKeys;
}
}