Skip to content

Commit

Permalink
Introduce mapping optimization when needed
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Oct 23, 2024
1 parent 158eed7 commit 1de408f
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 4 deletions.
27 changes: 27 additions & 0 deletions src/main/java/org/codetracker/AbstractTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import gr.uom.java.xmi.VariableDeclarationContainer;
import gr.uom.java.xmi.decomposition.AbstractCall;
import gr.uom.java.xmi.decomposition.AbstractCodeFragment;
import gr.uom.java.xmi.decomposition.AbstractCodeMapping;
import gr.uom.java.xmi.decomposition.UMLOperationBodyMapper;
import gr.uom.java.xmi.diff.MoveSourceFolderRefactoring;
import gr.uom.java.xmi.diff.UMLAbstractClassDiff;
Expand Down Expand Up @@ -146,6 +147,32 @@ protected static boolean containsCallToExtractedMethod(UMLOperationBodyMapper bo
}
return false;
}

protected static boolean containsCallToExtractedMethod(UMLOperationBodyMapper bodyMapper, List<UMLOperation> addedOperations) {
for(AbstractCodeFragment leaf2 : bodyMapper.getNonMappedLeavesT2()) {
AbstractCall invocation = leaf2.invocationCoveringEntireFragment();
if(invocation == null) {
invocation = leaf2.assignmentInvocationCoveringEntireStatement();
}
UMLOperation matchingOperation = null;
if(invocation != null && (matchingOperation = matchesOperation(invocation, addedOperations, bodyMapper.getContainer2(), null)) != null && matchingOperation.getBody() != null) {
return true;
}
}
for(AbstractCodeMapping mapping : bodyMapper.getMappings()) {
if(!mapping.getFragment1().getString().equals(mapping.getFragment2().getString())) {
AbstractCall invocation = mapping.getFragment2().invocationCoveringEntireFragment();
if(invocation == null) {
invocation = mapping.getFragment2().assignmentInvocationCoveringEntireStatement();
}
UMLOperation matchingOperation = null;
if(invocation != null && (matchingOperation = matchesOperation(invocation, addedOperations, bodyMapper.getContainer2(), null)) != null && matchingOperation.getBody() != null) {
return true;
}
}
}
return false;
}

private static UMLOperation matchesOperation(AbstractCall invocation, List<UMLOperation> operations, VariableDeclarationContainer callerOperation, UMLAbstractClassDiff classDiff) {
for(UMLOperation operation : operations) {
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/org/codetracker/FileTrackerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.refactoringminer.rm1.GitHistoryRefactoringMinerImpl;

import gr.uom.java.xmi.LocationInfo.CodeElementType;
import gr.uom.java.xmi.UMLAbstractClass;
import gr.uom.java.xmi.UMLAnonymousClass;
import gr.uom.java.xmi.UMLAttribute;
import gr.uom.java.xmi.decomposition.UMLOperationBodyMapper;
Expand Down Expand Up @@ -1774,6 +1775,18 @@ private void processNestedStatementsAndComments(UMLModel rightModel, Version cur
if (leftOperation instanceof UMLOperation && rightOperation instanceof UMLOperation) {
UMLClassBaseDiff lightweightClassDiff = lightweightClassDiff(leftModel, rightModel, leftOperation, rightOperation);
bodyMapper = new UMLOperationBodyMapper((UMLOperation) leftOperation, (UMLOperation) rightOperation, lightweightClassDiff);
List<UMLOperation> rightSideOperations = new ArrayList<UMLOperation>();
for(UMLAbstractClass umlClass : rightModel.getClassList()) {
if(umlClass.getName().equals(rightMethod.getUmlOperation().getClassName())) {
rightSideOperations.addAll(umlClass.getOperations());
rightSideOperations.remove(rightMethod.getUmlOperation());
}
}
if (containsCallToExtractedMethod(bodyMapper, rightSideOperations)) {
UMLModelDiff umlModelDiffLocal = leftModel.diff(rightModel);
//this bodyMapper has mapping optimization
bodyMapper = findBodyMapper(umlModelDiffLocal, rightMethod, currentVersion, parentVersion);
}
}
else if (leftOperation instanceof UMLInitializer && rightOperation instanceof UMLInitializer) {
UMLClassBaseDiff lightweightClassDiff = lightweightClassDiff(leftModel, rightModel, leftOperation, rightOperation);
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/org/codetracker/FileTrackerWithLocalFilesImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import gr.uom.java.xmi.UMLType;
import gr.uom.java.xmi.VariableDeclarationContainer;
import gr.uom.java.xmi.LocationInfo.CodeElementType;
import gr.uom.java.xmi.UMLAbstractClass;
import gr.uom.java.xmi.UMLAnonymousClass;
import gr.uom.java.xmi.decomposition.UMLOperationBodyMapper;
import gr.uom.java.xmi.diff.ExtractClassRefactoring;
Expand Down Expand Up @@ -1781,6 +1782,18 @@ private void processNestedStatementsAndComments(UMLModel rightModel, Version cur
if (leftOperation instanceof UMLOperation && rightOperation instanceof UMLOperation) {
UMLClassBaseDiff lightweightClassDiff = lightweightClassDiff(leftModel, rightModel, leftOperation, rightOperation);
bodyMapper = new UMLOperationBodyMapper((UMLOperation) leftOperation, (UMLOperation) rightOperation, lightweightClassDiff);
List<UMLOperation> rightSideOperations = new ArrayList<UMLOperation>();
for(UMLAbstractClass umlClass : rightModel.getClassList()) {
if(umlClass.getName().equals(rightMethod.getUmlOperation().getClassName())) {
rightSideOperations.addAll(umlClass.getOperations());
rightSideOperations.remove(rightMethod.getUmlOperation());
}
}
if (containsCallToExtractedMethod(bodyMapper, rightSideOperations)) {
UMLModelDiff umlModelDiffLocal = leftModel.diff(rightModel);
//this bodyMapper has mapping optimization
bodyMapper = findBodyMapper(umlModelDiffLocal, rightMethod, currentVersion, parentVersion);
}
}
else if (leftOperation instanceof UMLInitializer && rightOperation instanceof UMLInitializer) {
UMLClassBaseDiff lightweightClassDiff = lightweightClassDiff(leftModel, rightModel, leftOperation, rightOperation);
Expand Down
8 changes: 4 additions & 4 deletions src/test/resources/blame/blameTestWithLocalRepo8.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2519,22 +2519,22 @@ d9a1022f3 annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java (
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2519) annJoins = null;
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2520) annInverseJoins = null;
d9a1022f3 annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Emmanuel Bernard 2009-07-20 23:24:38 +0000 2521) }
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2522) Ejb3JoinColumn[] joinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2522) Ejb3JoinColumn[] joinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2523) annJoins,
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2524) entityBinder.getSecondaryTables(),
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2525) propertyHolder,
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2526) inferredData.getPropertyName(),
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2527) mappedBy,
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2528) buildingContext
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2529) );
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2530) Ejb3JoinColumn[] inverseJoinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2529) );
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2530) Ejb3JoinColumn[] inverseJoinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2531) annInverseJoins,
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2532) entityBinder.getSecondaryTables(),
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2533) propertyHolder,
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2534) inferredData.getPropertyName(),
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2535) mappedBy,
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2536) buildingContext
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2537) );
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2537) );
9caca0ce3 hibernate-core/src/main/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2015-03-10 21:53:51 +0000 2538) associationTableBinder.setBuildingContext( buildingContext );
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2539) collectionBinder.setTableBinder( associationTableBinder );
7337743c9 annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (Steve Ebersole 2008-10-28 18:41:10 +0000 2540) collectionBinder.setJoinColumns( joinColumns );
Expand Down

0 comments on commit 1de408f

Please sign in to comment.