From 2fab3c337a18ab7bfa1414ac16bab2522a4cb099 Mon Sep 17 00:00:00 2001 From: tsantalis Date: Sun, 2 Jun 2024 09:33:55 -0400 Subject: [PATCH] Restore mappings for https://github.com/JabRef/jabref/pull/8934 (#715) The commit causes test to fail. Test needs to be updated. https://github.com/liferay/liferay-portal/commit/59fd9e696cec5f2ed44c27422bbc426b11647321 --- .../astDiff/matchers/ProjectASTDiffer.java | 29 ++++++++++++------- ...elDiffRefactoringsForClassDiffMatcher.java | 14 ++++++++- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/refactoringminer/astDiff/matchers/ProjectASTDiffer.java b/src/main/java/org/refactoringminer/astDiff/matchers/ProjectASTDiffer.java index 1e71033cb..eb39430d5 100644 --- a/src/main/java/org/refactoringminer/astDiff/matchers/ProjectASTDiffer.java +++ b/src/main/java/org/refactoringminer/astDiff/matchers/ProjectASTDiffer.java @@ -44,6 +44,7 @@ public class ProjectASTDiffer private final ProjectASTDiff projectASTDiff; private final MovedASTDiffGenerator movedDeclarationGenerator; private final Map optimizationDataMap = new HashMap<>(); + private final List processedMoveRefactorings = new ArrayList(); public ProjectASTDiffer(UMLModelDiff modelDiff, Map fileContentsBefore, Map fileContentsAfter) throws RefactoringMinerTimedOutException { this.modelDiff = modelDiff; @@ -127,8 +128,9 @@ private List getExtraDiffs() { ReplaceAnonymousWithClassRefactoring replaceAnonymousWithClassRefactoring = (ReplaceAnonymousWithClassRefactoring) modelDiffRefactoring; extraDiffs.add(replaceAnonymousWithClassRefactoring.getDiff()); } - else if(modelDiffRefactoring.getRefactoringType() == RefactoringType.MOVE_AND_RENAME_OPERATION || - modelDiffRefactoring.getRefactoringType() == RefactoringType.MOVE_OPERATION) + else if((modelDiffRefactoring.getRefactoringType() == RefactoringType.MOVE_AND_RENAME_OPERATION || + modelDiffRefactoring.getRefactoringType() == RefactoringType.MOVE_OPERATION) && + !processedMoveRefactorings.contains(modelDiffRefactoring)) { MoveOperationRefactoring moveOperationRefactoring = (MoveOperationRefactoring) modelDiffRefactoring; String srcPath = moveOperationRefactoring.getOriginalOperation().getLocationInfo().getFilePath(); @@ -142,13 +144,18 @@ else if(modelDiffRefactoring.getRefactoringType() == RefactoringType.MOVE_AND_RE new ExtendedMultiMappingStore(srcTree,dstTree))); optimizationData = optimizationDataMap.get(srcPath); new MethodMatcher(optimizationData, moveOperationRefactoring.getBodyMapper()).match(srcTree, dstTree, mappingStore); - mappingStore.addMapping(treeContextPair.first.getRoot(), treeContextPair.second.getRoot()); - ASTDiff diff = new ASTDiff(srcPath, dstPath, - treeContextPair.first, treeContextPair.second, - mappingStore, - new SimplifiedExtendedChawatheScriptGenerator().computeActions(mappingStore)); - mappingStore.removeMapping(treeContextPair.first.getRoot(), treeContextPair.second.getRoot()); - projectASTDiff.addMoveASTDiff(diff); + ASTDiff append = findAppend(srcPath, dstPath); + if (append != null) + append.getAllMappings().mergeMappings(mappingStore); + else { + mappingStore.addMapping(treeContextPair.first.getRoot(), treeContextPair.second.getRoot()); + ASTDiff diff = new ASTDiff(srcPath, dstPath, + treeContextPair.first, treeContextPair.second, + mappingStore, + new SimplifiedExtendedChawatheScriptGenerator().computeActions(mappingStore)); + mappingStore.removeMapping(treeContextPair.first.getRoot(), treeContextPair.second.getRoot()); + projectASTDiff.addMoveASTDiff(diff); + } } } return extraDiffs; @@ -219,7 +226,9 @@ private ASTDiff process(UMLAbstractClassDiff classDiff, Pair modelDiffRefactorings; private final UMLAbstractClassDiff classDiff; + private final List processedMoveRefactorings; // private final List modelDiffRefactorings; public ModelDiffRefactoringsForClassDiffMatcher(OptimizationData optimizationData, UMLModelDiff modelDiff, List modelDiffRefactorings, UMLAbstractClassDiff classDiff) { @@ -26,8 +28,14 @@ public ModelDiffRefactoringsForClassDiffMatcher(OptimizationData optimizationDat this.modelDiff = modelDiff; this.modelDiffRefactorings = modelDiffRefactorings; //This is just for performance boost this.classDiff = classDiff; + this.processedMoveRefactorings = new ArrayList(); } - @Override + + public List getProcessedMoveRefactorings() { + return processedMoveRefactorings; + } + + @Override public void match(Tree srcTree, Tree dstTree, ExtendedMultiMappingStore mappingStore) { processModelDiffRefactorings(classDiff, mappingStore); processMovedAttributes(classDiff,mappingStore); @@ -46,6 +54,7 @@ private void processModelDiffRefactorings(UMLAbstractClassDiff classDiff, Extend Tree srcTotalTree = modelDiff.getParentModel().getTreeContextMap().get(srcPath).getRoot(); Tree dstTotalTree = modelDiff.getChildModel().getTreeContextMap().get(dstPath).getRoot(); new MethodMatcher(optimizationData, moveOperationRefactoring.getBodyMapper()).match(srcTotalTree, dstTotalTree, mappingStore); + this.processedMoveRefactorings.add(moveOperationRefactoring); } } else if (refactoring instanceof MoveAttributeRefactoring) { if (afterRefactoringClasses.contains(classDiff.getNextClass().getName()) || @@ -56,12 +65,14 @@ private void processModelDiffRefactorings(UMLAbstractClassDiff classDiff, Extend Tree srcTotalTree = modelDiff.getParentModel().getTreeContextMap().get(srcPath).getRoot(); Tree dstTotalTree = modelDiff.getChildModel().getTreeContextMap().get(dstPath).getRoot(); new FieldDeclarationMatcher(moveAttributeRefactoring.getOriginalAttribute(), moveAttributeRefactoring.getMovedAttribute()).match(srcTotalTree, dstTotalTree, mappingStore); + this.processedMoveRefactorings.add(moveAttributeRefactoring); } } else if (refactoring.getRefactoringType().equals(RefactoringType.EXTRACT_AND_MOVE_OPERATION)) { if (afterRefactoringClasses.contains(classDiff.getNextClass().getName()) || beforeRefactoringClasses.contains(classDiff.getOriginalClass().getName())) { ExtractOperationRefactoring extractOperationRefactoring = (ExtractOperationRefactoring) refactoring; findTreeFromMapperAndProcessBodyMapper(extractOperationRefactoring.getBodyMapper(), mappingStore); + this.processedMoveRefactorings.add(extractOperationRefactoring); } } else if (refactoring.getRefactoringType().equals(RefactoringType.MOVE_AND_INLINE_OPERATION)) { @@ -69,6 +80,7 @@ else if (refactoring.getRefactoringType().equals(RefactoringType.MOVE_AND_INLINE beforeRefactoringClasses.contains(classDiff.getOriginalClass().getName())) { InlineOperationRefactoring inlineOperationRefactoring = (InlineOperationRefactoring) refactoring; findTreeFromMapperAndProcessBodyMapper(inlineOperationRefactoring.getBodyMapper(), mappingStore); + this.processedMoveRefactorings.add(inlineOperationRefactoring); } }