Skip to content

Commit

Permalink
Fixed tracking of anonymous methods in attribute initializers
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Oct 4, 2024
1 parent 2199416 commit ec923ac
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 5 deletions.
128 changes: 125 additions & 3 deletions src/main/java/org/codetracker/MethodTrackerChangeHistory.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.github.difflib.patch.Patch;

import gr.uom.java.xmi.UMLAnonymousClass;
import gr.uom.java.xmi.UMLAttribute;
import gr.uom.java.xmi.UMLClass;
import gr.uom.java.xmi.UMLComment;
import gr.uom.java.xmi.UMLInitializer;
Expand Down Expand Up @@ -77,6 +78,7 @@
import gr.uom.java.xmi.diff.SplitOperationRefactoring;
import gr.uom.java.xmi.diff.SplitVariableRefactoring;
import gr.uom.java.xmi.diff.UMLAnonymousClassDiff;
import gr.uom.java.xmi.diff.UMLAttributeDiff;
import gr.uom.java.xmi.diff.UMLClassBaseDiff;
import gr.uom.java.xmi.diff.UMLClassDiff;
import gr.uom.java.xmi.diff.UMLClassMoveDiff;
Expand Down Expand Up @@ -592,13 +594,13 @@ public Set<Method> isMethodContainerChanged(UMLModelDiff umlModelDiffAll, Collec
}
}
if (umlModelDiffAll != null) {
for (UMLClassRenameDiff classRenameDiffList : umlModelDiffAll.getClassRenameDiffList()) {
for (UMLClassRenameDiff classRenameDiff : umlModelDiffAll.getClassRenameDiffList()) {
if (found)
break;
for (UMLOperationBodyMapper umlOperationBodyMapper : classRenameDiffList.getOperationBodyMapperList()) {
for (UMLOperationBodyMapper umlOperationBodyMapper : classRenameDiff.getOperationBodyMapperList()) {
if (found)
break;
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, new RenameClassRefactoring(classRenameDiffList.getOriginalClass(), classRenameDiffList.getRenamedClass()), umlOperationBodyMapper.getContainer1(), umlOperationBodyMapper.getContainer2(), changeType);
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, new RenameClassRefactoring(classRenameDiff.getOriginalClass(), classRenameDiff.getRenamedClass()), umlOperationBodyMapper.getContainer1(), umlOperationBodyMapper.getContainer2(), changeType);
if (found)
break;
for (UMLAnonymousClassDiff anonymousClassDiff : umlOperationBodyMapper.getAnonymousClassDiffs()) {
Expand All @@ -611,6 +613,40 @@ public Set<Method> isMethodContainerChanged(UMLModelDiff umlModelDiffAll, Collec
}
}
}
for (UMLAttributeDiff diff : classRenameDiff.getAttributeDiffList()) {
if (found)
break;
if (diff.getInitializerMapper().isPresent()) {
for (UMLAnonymousClassDiff anonymousClassDiff : diff.getInitializerMapper().get().getAnonymousClassDiffs()) {
if (found)
break;
for (UMLOperationBodyMapper anonymousOperationBodyMapper : anonymousClassDiff.getOperationBodyMapperList()) {
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, null, anonymousOperationBodyMapper.getContainer1(), anonymousOperationBodyMapper.getContainer2(), changeType);
if (found)
break;
}
}
}
}
for (Pair<UMLAttribute, UMLAttribute> pair : classRenameDiff.getCommonAtrributes()) {
if (found)
break;
if (pair.getLeft().getAnonymousClassList().size() == pair.getRight().getAnonymousClassList().size() && pair.getLeft().getAnonymousClassList().size() > 0) {
for (int i=0; i<pair.getLeft().getAnonymousClassList().size(); i++) {
UMLAnonymousClass anonymous1 = pair.getLeft().getAnonymousClassList().get(i);
UMLAnonymousClass anonymous2 = pair.getRight().getAnonymousClassList().get(i);
if (anonymous1.getOperations().size() == anonymous2.getOperations().size()) {
for (int j=0; j<anonymous1.getOperations().size(); j++) {
UMLOperation anonymousMethod1 = anonymous1.getOperations().get(j);
UMLOperation anonymousMethod2 = anonymous2.getOperations().get(j);
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, null, anonymousMethod1, anonymousMethod2, changeType);
if (found)
break;
}
}
}
}
}
}
for (UMLClassMoveDiff classMoveDiff : classMovedDiffList) {
if (found)
Expand All @@ -631,6 +667,40 @@ public Set<Method> isMethodContainerChanged(UMLModelDiff umlModelDiffAll, Collec
}
}
}
for (UMLAttributeDiff diff : classMoveDiff.getAttributeDiffList()) {
if (found)
break;
if (diff.getInitializerMapper().isPresent()) {
for (UMLAnonymousClassDiff anonymousClassDiff : diff.getInitializerMapper().get().getAnonymousClassDiffs()) {
if (found)
break;
for (UMLOperationBodyMapper anonymousOperationBodyMapper : anonymousClassDiff.getOperationBodyMapperList()) {
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, null, anonymousOperationBodyMapper.getContainer1(), anonymousOperationBodyMapper.getContainer2(), changeType);
if (found)
break;
}
}
}
}
for (Pair<UMLAttribute, UMLAttribute> pair : classMoveDiff.getCommonAtrributes()) {
if (found)
break;
if (pair.getLeft().getAnonymousClassList().size() == pair.getRight().getAnonymousClassList().size() && pair.getLeft().getAnonymousClassList().size() > 0) {
for (int i=0; i<pair.getLeft().getAnonymousClassList().size(); i++) {
UMLAnonymousClass anonymous1 = pair.getLeft().getAnonymousClassList().get(i);
UMLAnonymousClass anonymous2 = pair.getRight().getAnonymousClassList().get(i);
if (anonymous1.getOperations().size() == anonymous2.getOperations().size()) {
for (int j=0; j<anonymous1.getOperations().size(); j++) {
UMLOperation anonymousMethod1 = anonymous1.getOperations().get(j);
UMLOperation anonymousMethod2 = anonymous2.getOperations().get(j);
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, null, anonymousMethod1, anonymousMethod2, changeType);
if (found)
break;
}
}
}
}
}
}
for (UMLClassDiff classDiff : umlModelDiffAll.getCommonClassDiffList()) {
if (found)
Expand All @@ -648,6 +718,40 @@ public Set<Method> isMethodContainerChanged(UMLModelDiff umlModelDiffAll, Collec
}
}
}
for (UMLAttributeDiff diff : classDiff.getAttributeDiffList()) {
if (found)
break;
if (diff.getInitializerMapper().isPresent()) {
for (UMLAnonymousClassDiff anonymousClassDiff : diff.getInitializerMapper().get().getAnonymousClassDiffs()) {
if (found)
break;
for (UMLOperationBodyMapper anonymousOperationBodyMapper : anonymousClassDiff.getOperationBodyMapperList()) {
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, null, anonymousOperationBodyMapper.getContainer1(), anonymousOperationBodyMapper.getContainer2(), changeType);
if (found)
break;
}
}
}
}
for (Pair<UMLAttribute, UMLAttribute> pair : classDiff.getCommonAtrributes()) {
if (found)
break;
if (pair.getLeft().getAnonymousClassList().size() == pair.getRight().getAnonymousClassList().size() && pair.getLeft().getAnonymousClassList().size() > 0) {
for (int i=0; i<pair.getLeft().getAnonymousClassList().size(); i++) {
UMLAnonymousClass anonymous1 = pair.getLeft().getAnonymousClassList().get(i);
UMLAnonymousClass anonymous2 = pair.getRight().getAnonymousClassList().get(i);
if (anonymous1.getOperations().size() == anonymous2.getOperations().size()) {
for (int j=0; j<anonymous1.getOperations().size(); j++) {
UMLOperation anonymousMethod1 = anonymous1.getOperations().get(j);
UMLOperation anonymousMethod2 = anonymous2.getOperations().get(j);
found = addMethodChange(currentVersion, parentVersion, equalOperator, leftMethodSet, null, anonymousMethod1, anonymousMethod2, changeType);
if (found)
break;
}
}
}
}
}
}
}
if (found) {
Expand Down Expand Up @@ -675,6 +779,24 @@ public boolean isMethodAdded(UMLModelDiff modelDiff, String className, Version c
return true;
}
}
else {
String prefix = new String(className);
while (prefix.contains(".")) {
prefix = prefix.substring(0, prefix.lastIndexOf("."));
addedClass = modelDiff.getAddedClass(prefix);
if (addedClass != null) {
break;
}
}
if (addedClass != null) {
for (UMLAnonymousClass anonymousClass : addedClass.getAnonymousClassList()) {
for (UMLOperation operation : anonymousClass.getOperations()) {
if (handleAddOperation(currentVersion, parentVersion, equalOperator, operation, "added with new anonymous class"))
return true;
}
}
}
}

for (UMLClassRenameDiff classRenameDiff : modelDiff.getClassRenameDiffList()) {
for (UMLAnonymousClass addedAnonymousClass : classRenameDiff.getAddedAnonymousClasses()) {
Expand Down
4 changes: 2 additions & 2 deletions src/test/resources/blame/blameTestWithLocalRepo16.txt
Original file line number Diff line number Diff line change
Expand Up @@ -924,9 +924,9 @@ a5ba3e906 okhttp/src/main/java/com/squareup/okhttp/internal/spdy/SpdyConnection.
38aaf7bca okhttp/src/main/java/com/squareup/okhttp/internal/framed/FramedConnection.java (jwilson 2015-12-06 14:59:24 +0000 924) /** Listener of streams and settings initiated by the peer. */
38aaf7bca okhttp/src/main/java/com/squareup/okhttp/internal/framed/FramedConnection.java (jwilson 2015-12-06 14:59:24 +0000 925) public abstract static class Listener {
8f56e81f9 okhttp/src/main/java/okhttp3/internal/http2/Http2Connection.java (Yuri Schimke 2018-01-28 16:42:37 +0000 926) public static final Listener REFUSE_INCOMING_STREAMS = new Listener() {
927) @Override public void onStream(Http2Stream stream) throws IOException {
38aaf7bca okhttp/src/main/java/com/squareup/okhttp/internal/framed/FramedConnection.java (jwilson 2015-12-06 14:59:24 +0000 927) @Override public void onStream(Http2Stream stream) throws IOException {
8f56e81f9 okhttp/src/main/java/okhttp3/internal/http2/Http2Connection.java (Yuri Schimke 2018-01-28 16:42:37 +0000 928) stream.close(REFUSED_STREAM);
929) }
38aaf7bca okhttp/src/main/java/com/squareup/okhttp/internal/framed/FramedConnection.java (jwilson 2015-12-06 14:59:24 +0000 929) }
8f56e81f9 okhttp/src/main/java/okhttp3/internal/http2/Http2Connection.java (Yuri Schimke 2018-01-28 16:42:37 +0000 930) };
931)
38aaf7bca okhttp/src/main/java/com/squareup/okhttp/internal/framed/FramedConnection.java (jwilson 2015-12-06 14:59:24 +0000 932) /**
Expand Down

0 comments on commit ec923ac

Please sign in to comment.