package fr.inria.diversify.codeFragment;
import spoon.reflect.reference.CtTypeReference;
public class Context {
protected InputContext inputContext;
protected CtTypeReference<?> outputContext;
public Context(InputContext inputContext, CtTypeReference<?> outputContext) {
this.inputContext = inputContext;
this.outputContext = outputContext;
}
public InputContext getInputContext() {
return inputContext;
}
public CtTypeReference<?> getOutputContext() {
return outputContext;
}
@Override
public boolean equals(Object obj) {
if(obj == null || !(obj instanceof Context))
return false;
Context other = (Context)obj;
return inputContext.equals(other.inputContext)
&& outputContext.equals(other.outputContext)
&& outputContext.getActualTypeArguments().equals(other.outputContext.getActualTypeArguments());
}
@Override
public int hashCode() {
return inputContext.hashCode() * outputContext.hashCode();
}
public boolean isReplaceableBy(Context other, boolean varNameMatch, boolean subType) {
if(varNameMatch)
return inputContext.getAllVarName().containsAll(other.inputContext.getAllVarName());
else
return inputContext.containsAll(other.inputContext, subType)
&& outputContext.equals(other.outputContext)
&& outputContext.getActualTypeArguments().equals(other.outputContext.getActualTypeArguments());
}
public String equalString() {
return inputContext.equalString()+ " "
+ outputContext.toString();
}
public int size() {
return inputContext.size();
}
}