public boolean isSubclassOf(String subclass, String finalSuperclass) { return isSubclassOf(subclass, finalSuperclass, new LinkedHashSet<String>()); }
private boolean checkInheritanceRelationship(UMLType superclass, String finalSuperclass, Set<String> visitedClasses) { if(looksLikeSameType(superclass.getClassType(), finalSuperclass)) return true; else return isSubclassOf(superclass.getClassType(), finalSuperclass, visitedClasses); }
private boolean compatibleTypes(UMLParameter parameter, UMLType type, UMLModelDiff modelDiff) { String type1 = parameter.getType().toString(); String type2 = type.toString(); if(type1.equals("int") && type2.equals("long")) return true; if(type1.equals("long") && type2.equals("int")) return true; if(!parameter.isVarargs() && type1.endsWith("Object") && !type2.endsWith("Object")) return true; if(!parameter.isVarargs() && type1.endsWith("Base") && type2.endsWith("Impl")) return true; if(parameter.getType().equalsWithSubType(type)) return true; if(!parameter.getType().getTypeArguments().isEmpty() && !type.getTypeArguments().isEmpty() && parameter.getType().getClassType().equals(type.getClassType())) return true; if(modelDiff != null && modelDiff.isSubclassOf(type.getClassType(), parameter.getType().getClassType())) { return true; } return false; }
private boolean parameterTypesMatch(Map<UMLParameter, UMLParameter> originalMethodParametersPassedAsArgumentsMappedToCalledMethodParameters) { for(UMLParameter key : originalMethodParametersPassedAsArgumentsMappedToCalledMethodParameters.keySet()) { UMLParameter value = originalMethodParametersPassedAsArgumentsMappedToCalledMethodParameters.get(key); if(!key.getType().equals(value.getType()) && !key.getType().equalsWithSubType(value.getType()) && !modelDiff.isSubclassOf(key.getType().getClassType(), value.getType().getClassType())) { return false; } } return true; }
isSubclassOf(removedOperation.getClassName(), addedOperation.getClassName()) && addedOperation.compatibleSignature(removedOperation)) { refactoring = new PullUpOperationRefactoring(firstMapper); isSubclassOf(addedOperation.getClassName(), removedOperation.getClassName()) && addedOperation.compatibleSignature(removedOperation)) { refactoring = new PushDownOperationRefactoring(firstMapper); isSubclassOf(removedOperation.getClassName(), addedOperation.getClassName()) && addedOperation.compatibleSignature(removedOperation)) { refactoring = new PullUpOperationRefactoring(firstMapper); isSubclassOf(addedOperation.getClassName(), removedOperation.getClassName()) && addedOperation.compatibleSignature(removedOperation)) { refactoring = new PushDownOperationRefactoring(firstMapper);
deleteAddedOperation(addedOperation); else if(isSubclassOf(className, addedOperation.getClassName())) { deleteAddedOperation(addedOperation); else if(isSubclassOf(addedOperation.getClassName(), className)) {
private MoveAttributeRefactoring processPairOfAttributes(UMLAttribute addedAttribute, UMLAttribute removedAttribute) { if(addedAttribute.getName().equals(removedAttribute.getName()) && addedAttribute.getType().equals(removedAttribute.getType())) { if(isSubclassOf(removedAttribute.getClassName(), addedAttribute.getClassName())) { PullUpAttributeRefactoring pullUpAttribute = new PullUpAttributeRefactoring(removedAttribute, addedAttribute); return pullUpAttribute; } else if(isSubclassOf(addedAttribute.getClassName(), removedAttribute.getClassName())) { PushDownAttributeRefactoring pushDownAttribute = new PushDownAttributeRefactoring(removedAttribute, addedAttribute); return pushDownAttribute; } else if(sourceClassImportsTargetClassAfterRefactoring(removedAttribute.getClassName(), addedAttribute.getClassName()) || targetClassImportsSourceClassBeforeRefactoring(removedAttribute.getClassName(), addedAttribute.getClassName())) { MoveAttributeRefactoring moveAttribute = new MoveAttributeRefactoring(removedAttribute, addedAttribute); return moveAttribute; } } return null; }