return isAssignable(leftElement, rightElment);
}
}
} else if (left.isPrimitiveType()) {
if (right.isPrimitiveType()) {
PrimitiveType leftType = (PrimitiveType) left;
PrimitiveType rightType = (PrimitiveType) right;
Code leftCode = leftType.getPrimitiveTypeCode();
Code rightCode = leftType.getPrimitiveTypeCode();
if (leftCode.toString().equals(rightCode.toString()))
return true;
}
} else if (left.isParameterizedType()) {
if (right.isParameterizedType()) {
ParameterizedType leftType = (ParameterizedType) left;
ParameterizedType rightType = (ParameterizedType) right;
Type leftBaseType = leftType.getType();
Type rightBaseType = rightType.getType();
boolean baseAssignable = isAssignable(leftBaseType,
rightBaseType);
if (baseAssignable) {
List leftArgs = leftType.typeArguments();
List rightArgs = rightType.typeArguments();
if (leftArgs.size() != rightArgs.size())
return false;
for (int i = 0; i < leftArgs.size(); i++) {
Type leftArgType = (Type) leftArgs.get(i);
Type rightArgType = (Type) rightArgs.get(i);
if (!isAssignable(leftArgType, rightArgType)) {
return false;
}
}
return true;
}
}
} else if (left.isQualifiedType()) {
if(right.isQualifiedType()){
QualifiedType leftType = (QualifiedType) left;
QualifiedType rightType = (QualifiedType) right;
Type leftQualifier = leftType.getQualifier();
Type rightQualifier = rightType.getQualifier();
SimpleName leftName = leftType.getName();
SimpleName rightName = rightType.getName();
boolean assignable = isAssignable(leftQualifier, rightQualifier);
return assignable && leftName.getIdentifier().equals(rightName.getIdentifier());
}
} else if(left.isSimpleType()){
if(right.isSimpleType()){
SimpleType leftType = (SimpleType) left;
SimpleType rightType = (SimpleType) right;
if(leftType.getName().equals(rightType.getName()))
return true;
}
}
return false;
}