// string == string
// char == char
// etc.
if (isAbsolute(relation)) {
boolean equals = relation == Relation.EQUAL;
VariableType lefttype = context.fromSootType(v.getOp1().getType());
VariableType righttype = context.fromSootType(v.getOp2().getType());
if (lefttype.leastUpperBound(VariableType.NONE) != VariableType.NONE
&& righttype.leastUpperBound(VariableType.NONE) != VariableType.NONE) {
Variable left = context.getExpressionVariable(v.getOp1());
Variable right = context.getExpressionVariable(v.getOp2());
if (equals == true) {
makeBinaryAssertion(left, right, new AssertEquals());
makeBinaryAssertion(right, left, new AssertEquals());
// assert aliases as well
if (lefttype.mightBeUsefulMutable() && righttype.mightBeUsefulMutable()) {
makeAliasAssertion(left, right, true);
}
}
else if (equals == false && lefttype == VariableType.PRIMITIVE && righttype == VariableType.PRIMITIVE) {
// only primitive types may get a negative assertion here, since references
// may refer to different objects with same contents
makeBinaryAssertion(left, right, new AssertNotEquals());
makeBinaryAssertion(right, left, new AssertNotEquals());
}
else if (equals == false && lefttype.mightBeUsefulMutable() && righttype.mightBeUsefulMutable()) {
// assert that the variables are not aliases
// their contents cannot be asserted here, though
makeAliasAssertion(left, right, false);
}
}