public void process() { processInheritance(); processOperations(); processAttributes(); checkForAttributeChanges(); createBodyMappers(); processAnonymousClasses(); checkForOperationSignatureChanges(); checkForInlinedOperations(); checkForExtractedOperations(); }
public boolean containsExtractOperationRefactoring(UMLOperation extractedOperation) { if(classDiff != null) { return classDiff.containsExtractOperationRefactoring(operation1, extractedOperation); } return false; }
private void updateMapperSet(TreeSet<UMLOperationBodyMapper> mapperSet, UMLOperation removedOperation, UMLOperation operationInsideAnonymousClass, UMLOperation addedOperation, int differenceInPosition) { UMLOperationBodyMapper operationBodyMapper = new UMLOperationBodyMapper(removedOperation, operationInsideAnonymousClass, this); operationBodyMapper.getMappings(); int mappings = operationBodyMapper.mappingsWithoutBlocks(); if(mappings > 0) { int absoluteDifferenceInPosition = computeAbsoluteDifferenceInPositionWithinClass(removedOperation, addedOperation); if(operationBodyMapper.nonMappedElementsT1() == 0 && operationBodyMapper.nonMappedElementsT2() == 0 && allMappingsAreExactMatches(operationBodyMapper, mappings)) { mapperSet.add(operationBodyMapper); } else if(mappedElementsMoreThanNonMappedT1AndT2(mappings, operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && compatibleSignatures(removedOperation, addedOperation, absoluteDifferenceInPosition)) { mapperSet.add(operationBodyMapper); } else if(mappedElementsMoreThanNonMappedT2(mappings, operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && isPartOfMethodExtracted(removedOperation, addedOperation)) { mapperSet.add(operationBodyMapper); } else if(mappedElementsMoreThanNonMappedT1(mappings, operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && isPartOfMethodInlined(removedOperation, addedOperation)) { mapperSet.add(operationBodyMapper); } } }
private void checkForOperationSignatureChanges() { consistentMethodInvocationRenames = findConsistentMethodInvocationRenames(); if(removedOperations.size() <= addedOperations.size()) { for(Iterator<UMLOperation> removedOperationIterator = removedOperations.iterator(); removedOperationIterator.hasNext();) { maxDifferenceInPosition = Math.max(removedOperations.size(), addedOperations.size()); updateMapperSet(mapperSet, removedOperation, addedOperation, maxDifferenceInPosition); List<UMLOperation> operationsInsideAnonymousClass = addedOperation.getOperationsInsideAnonymousClass(this.addedAnonymousClasses); for(UMLOperation operationInsideAnonymousClass : operationsInsideAnonymousClass) { updateMapperSet(mapperSet, removedOperation, operationInsideAnonymousClass, addedOperation, maxDifferenceInPosition); UMLOperationBodyMapper bestMapper = findBestMapper(mapperSet); if(bestMapper != null) { removedOperation = bestMapper.getOperation1(); this.addOperationBodyMapper(bestMapper); updateMapperSet(mapperSet, removedOperation, addedOperation, maxDifferenceInPosition); List<UMLOperation> operationsInsideAnonymousClass = addedOperation.getOperationsInsideAnonymousClass(this.addedAnonymousClasses); for(UMLOperation operationInsideAnonymousClass : operationsInsideAnonymousClass) { updateMapperSet(mapperSet, removedOperation, operationInsideAnonymousClass, addedOperation, maxDifferenceInPosition); UMLOperationBodyMapper bestMapper = findBestMapper(mapperSet); if(bestMapper != null) { UMLOperation removedOperation = bestMapper.getOperation1(); this.addOperationBodyMapper(bestMapper);
protected void processAttributes() { for(UMLAttribute attribute : originalClass.getAttributes()) { UMLAttribute attributeWithTheSameName = nextClass.attributeWithTheSameNameIgnoringChangedType(attribute); if(attributeWithTheSameName == null) { this.removedAttributes.add(attribute); } else if(!attribute.equals(attributeWithTheSameName) && !attributeDiffListContainsAttribute(attribute, attributeWithTheSameName)) { UMLAttributeDiff attributeDiff = new UMLAttributeDiff(attribute, attributeWithTheSameName); this.attributeDiffList.add(attributeDiff); } } for(UMLAttribute attribute : nextClass.getAttributes()) { UMLAttribute attributeWithTheSameName = originalClass.attributeWithTheSameNameIgnoringChangedType(attribute); if(attributeWithTheSameName == null) { this.addedAttributes.add(attribute); } else if(!attribute.equals(attributeWithTheSameName) && !attributeDiffListContainsAttribute(attributeWithTheSameName, attribute)) { UMLAttributeDiff attributeDiff = new UMLAttributeDiff(attributeWithTheSameName, attribute); this.attributeDiffList.add(attributeDiff); } } }
int mappings = operationBodyMapper.mappingsWithoutBlocks(); if(mappings > 0) { int absoluteDifferenceInPosition = computeAbsoluteDifferenceInPositionWithinClass(removedOperation, addedOperation); if(operationBodyMapper.nonMappedElementsT1() == 0 && operationBodyMapper.nonMappedElementsT2() == 0 && allMappingsAreExactMatches(operationBodyMapper, mappings)) { mapperSet.add(operationBodyMapper); else if(mappedElementsMoreThanNonMappedT1AndT2(mappings, operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && compatibleSignatures(removedOperation, addedOperation, absoluteDifferenceInPosition)) { mapperSet.add(operationBodyMapper); else if(mappedElementsMoreThanNonMappedT2(mappings, operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && isPartOfMethodExtracted(removedOperation, addedOperation)) { mapperSet.add(operationBodyMapper); else if(mappedElementsMoreThanNonMappedT1(mappings, operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && isPartOfMethodInlined(removedOperation, addedOperation)) { mapperSet.add(operationBodyMapper); int absoluteDifferenceInPosition = computeAbsoluteDifferenceInPositionWithinClass(removedOperation, addedOperation); if(singleUnmatchedStatementCallsAddedOperation(operationBodyMapper) && absoluteDifferenceInPosition <= differenceInPosition && compatibleSignatures(removedOperation, addedOperation, absoluteDifferenceInPosition)) { mapperSet.add(operationBodyMapper);