RefactoringExtractor.extractRefactorings(added, deleted, refactoringHelper);
for (RefactoringPair pair : refactorings) {
StructureNode leftDrn = pair.getDeletedEntity().getDiffNode().getLeft();
StructureNode rightDrn = pair.getInsertedEntity().getDiffNode().getRight();
StructureEntityVersion structureEntityVersion;
if (fVersion != null) {
structureEntityVersion = refactoringHelper.createStructureEntityVersionWithID(rightDrn, fVersion);
} else {
structureEntityVersion = refactoringHelper.createStructureEntityVersion(rightDrn);
}
Node rightRoot = fRightASTHelper.createDeclarationTree(rightDrn);
// use the new qualified name for the method; otherwise TreeDifferencer detects a return type change
Node leftRoot = fLeftASTHelper.createDeclarationTree(leftDrn, rightRoot.getValue());
if (isRenaming(leftDrn, rightDrn, refactoringHelper)) {
if (fVersion != null) {
structureEntityVersion =
refactoringHelper.createStructureEntityVersionWithID(leftDrn, rightDrn.getFullyQualifiedName(), fVersion);
} else {
structureEntityVersion =
refactoringHelper.createStructureEntityVersion(leftDrn, rightDrn.getFullyQualifiedName());
}
Update upd =
new Update(
structureEntityVersion,
fLeftASTHelper.createSourceCodeEntity(leftDrn),
fRightASTHelper.createSourceCodeEntity(rightDrn),
leftRoot.getEntity());
structureEntityVersion.addAllSourceCodeChanges(fChangeClassifier.classifySourceCodeChanges(Arrays
.asList(upd)));
}
extractChanges(leftRoot, rightRoot, structureEntityVersion);
leftRoot = fLeftASTHelper.createMethodBodyTree(leftDrn);
rightRoot = fRightASTHelper.createMethodBodyTree(rightDrn);
extractChanges(leftRoot, rightRoot, structureEntityVersion);
fChanges.addAll(structureEntityVersion.getSourceCodeChanges());
}
}