Skip to content

Commit

Permalink
New blame test
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Nov 27, 2024
1 parent 459fa25 commit 6b08fa5
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 9 deletions.
30 changes: 21 additions & 9 deletions src/main/java/org/codetracker/FileTrackerWithLocalFilesImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,8 @@ public void blame() throws Exception {
if (rightClass == null) {
continue;
}
String rightClassName = rightClass.getUmlClass().getName();
String rightClassSourceFolder = rightClass.getUmlClass().getLocationInfo().getSourceFolder();
if ("0".equals(parentCommitId)) {
Class leftClass = Class.of(rightClass.getUmlClass(), parentVersion);
startClassChangeHistory.get().handleAdd(leftClass, rightClass, "Initial commit!");
Expand Down Expand Up @@ -386,10 +388,12 @@ else if (leftSuperclass == null && rightSuperclass != null) {
processLocallyRefactoredAttributes(notFoundAttributes, umlModelDiffLocal, currentVersion, parentVersion, refactorings);
processLocallyRefactoredInnerClasses(notFoundInnerClasses, umlModelDiffLocal, currentVersion, parentVersion, refactorings);
}
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiffLocal, rightClass.getUmlClass().getName());
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiffLocal, rightClassSourceFolder, rightClassName);
processImportsAndClassComments(umlClassDiff, rightClass, currentVersion, parentVersion, refactorings);
for (Pair<Class, Class> pair : foundInnerClasses) {
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiffLocal, pair.getRight().getUmlClass().getName());
String rightInnerClassName = pair.getRight().getUmlClass().getName();
String rightInnerClassSourceFolder = pair.getRight().getUmlClass().getLocationInfo().getSourceFolder();
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiffLocal, rightInnerClassSourceFolder, rightInnerClassName);
processImportsAndClassComments(innerClassDiff, pair.getRight(), currentVersion, parentVersion, refactorings);
}
Set<Class> leftSideClasses = new HashSet<>(classRefactored);
Expand All @@ -416,10 +420,12 @@ else if (leftSuperclass == null && rightSuperclass != null) {
processLocallyRefactoredAttributes(notFoundAttributes, umlModelDiffPartial, currentVersion, parentVersion, refactoringsPartial);
processLocallyRefactoredInnerClasses(notFoundInnerClasses, umlModelDiffPartial, currentVersion, parentVersion, refactoringsPartial);
}
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiffPartial, rightClass.getUmlClass().getName());
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiffPartial, rightClassSourceFolder, rightClassName);
processImportsAndClassComments(umlClassDiff, rightClass, currentVersion, parentVersion, refactoringsPartial);
for (Pair<Class, Class> pair : foundInnerClasses) {
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiffPartial, pair.getRight().getUmlClass().getName());
String rightInnerClassName = pair.getRight().getUmlClass().getName();
String rightInnerClassSourceFolder = pair.getRight().getUmlClass().getLocationInfo().getSourceFolder();
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiffPartial, rightInnerClassSourceFolder, rightInnerClassName);
processImportsAndClassComments(innerClassDiff, pair.getRight(), currentVersion, parentVersion, refactoringsPartial);
}
Set<Class> leftSideClasses = new HashSet<>(classRefactored);
Expand Down Expand Up @@ -448,10 +454,12 @@ else if (leftSuperclass == null && rightSuperclass != null) {
processLocallyRefactoredAttributes(notFoundAttributes, umlModelDiffAll, currentVersion, parentVersion, refactorings);
processLocallyRefactoredInnerClasses(notFoundInnerClasses, umlModelDiffAll, currentVersion, parentVersion, refactorings);
}
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiffAll, rightClass.getUmlClass().getName());
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiffAll, rightClassSourceFolder, rightClassName);
processImportsAndClassComments(umlClassDiff, rightClass, currentVersion, parentVersion, refactorings);
for (Pair<Class, Class> pair : foundInnerClasses) {
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiffAll, pair.getRight().getUmlClass().getName());
String rightInnerClassName = pair.getRight().getUmlClass().getName();
String rightInnerClassSourceFolder = pair.getRight().getUmlClass().getLocationInfo().getSourceFolder();
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiffAll, rightInnerClassSourceFolder, rightInnerClassName);
processImportsAndClassComments(innerClassDiff, pair.getRight(), currentVersion, parentVersion, refactorings);
}
Set<Class> leftSideClasses = new HashSet<>(classRefactored);
Expand Down Expand Up @@ -859,6 +867,8 @@ else if (key2 instanceof Annotation) {

private void processLocallyRefactoredAttributes(Map<Attribute, AttributeTrackerChangeHistory> notFoundAttributes, UMLModelDiff umlModelDiff, Version currentVersion, Version parentVersion, List<Refactoring> refactorings) throws Exception {
for (Attribute rightAttribute : notFoundAttributes.keySet()) {
String rightAttributeClassName = rightAttribute.getUmlAttribute().getClassName();
String rightAttributeSourceFolder = rightAttribute.getUmlAttribute().getLocationInfo().getSourceFolder();
AttributeTrackerChangeHistory startAttributeChangeHistory = notFoundAttributes.get(rightAttribute);
Set<Attribute> attributeContainerChanged = startAttributeChangeHistory.isAttributeContainerChanged(umlModelDiff, refactorings, currentVersion, parentVersion, rightAttribute::equalIdentifierIgnoringVersion, getClassMoveDiffList(umlModelDiff));
boolean containerChanged = !attributeContainerChanged.isEmpty();
Expand Down Expand Up @@ -919,7 +929,7 @@ private void processLocallyRefactoredAttributes(Map<Attribute, AttributeTrackerC
if (found) {
continue;
}
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiff, rightAttribute.getUmlAttribute().getClassName());
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiff, rightAttributeSourceFolder, rightAttributeClassName);
if (umlClassDiff != null) {
Pair<? extends UMLAttribute, ? extends UMLAttribute> foundPair = null;
for (Pair<UMLAttribute, UMLAttribute> pair : umlClassDiff.getCommonAtrributes()) {
Expand Down Expand Up @@ -970,7 +980,7 @@ else if (key2 instanceof Annotation) {
if (found) {
continue;
}
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiff, rightAttribute.getUmlAttribute().getClassName());
UMLAbstractClassDiff umlClassDiff = getUMLClassDiff(umlModelDiff, rightAttributeSourceFolder, rightAttributeClassName);
startAnnotationChangeHistory.checkClassDiffForAnnotationChange(currentVersion, parentVersion, rightAttribute, currentAnnotation::equalIdentifierIgnoringVersion, umlClassDiff);
}
}
Expand Down Expand Up @@ -1392,6 +1402,8 @@ else if (leftSuperclass == null && rightSuperclass != null) {

private void processLocallyRefactoredInnerClasses(Map<Class, ClassTrackerChangeHistory> notFoundInnerClasses, UMLModelDiff umlModelDiff, Version currentVersion, Version parentVersion, List<Refactoring> refactorings) throws RefactoringMinerTimedOutException {
for (Class rightInnerClass : notFoundInnerClasses.keySet()) {
String rightInnerClassName = rightInnerClass.getUmlClass().getName();
String rightInnerClassSourceFolder = rightInnerClass.getUmlClass().getLocationInfo().getSourceFolder();
ClassTrackerChangeHistory startInnerClassChangeHistory = notFoundInnerClasses.get(rightInnerClass);
Set<Class> classRefactored = startInnerClassChangeHistory.analyseClassRefactorings(refactorings, currentVersion, parentVersion, rightInnerClass::equalIdentifierIgnoringVersion);
Set<Class> innerClassContainerChanged = startInnerClassChangeHistory.isInnerClassContainerChanged(umlModelDiff, refactorings, currentVersion, parentVersion, rightInnerClass::equalIdentifierIgnoringVersion, getClassMoveDiffList(umlModelDiff));
Expand All @@ -1418,7 +1430,7 @@ private void processLocallyRefactoredInnerClasses(Map<Class, ClassTrackerChangeH
continue;
}
startCommentChangeHistory.poll();
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiff, rightInnerClass.getUmlClass().getName());
UMLAbstractClassDiff innerClassDiff = getUMLClassDiff(umlModelDiff, rightInnerClassSourceFolder, rightInnerClassName);
startCommentChangeHistory.checkBodyOfMatchedClasses(currentVersion, parentVersion, rightComment::equalIdentifierIgnoringVersion, innerClassDiff);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ private static Stream<Arguments> testBlamerInputProvider(){
"https://github.com/eclipse/jetty.project/commit/fc5dd874f3deda71e6cd42af994a5af5cb6be4af, jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java, /src/test/resources/blame/blameTestWithLocalRepo20.txt",
"https://github.com/pmd/pmd/commit/d528dcd5d45582229ab3410deb7c40b2143d015d, pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/ClassTypeResolver.java, /src/test/resources/blame/blameTestWithLocalRepo21.txt",
"https://github.com/apache/tomcat/commit/dbc805e237b98834a7b7afb6da7be44da428c399, java/org/apache/coyote/http2/ConnectionSettings.java, /src/test/resources/blame/blameTestWithLocalRepo22.txt",
"https://github.com/apache/ant/commit/2943e6c208b4152e8d3142168c67a3a23509ba2e, proposal/myrmidon/src/test/org/apache/myrmidon/components/property/test/DefaultPropertyResolverTestCase.java, /src/test/resources/blame/blameTestWithLocalRepo23.txt",
"https://github.com/eclipse/jgit/commit/bd1a82502680b5de5bf86f6c4470185fd1602386, org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java, /src/test/resources/blame/blameTestUntilCommitZero.txt",
"https://github.com/JetBrains/intellij-community/commit/ecb1bb9d4d484ae63ee77f8ad45bdce154db9356, java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java, /src/test/resources/blame/blameTestUntilCommitZero2.txt",
"https://github.com/JetBrains/intellij-community/commit/ecb1bb9d4d484ae63ee77f8ad45bdce154db9356, java/compiler/impl/src/com/intellij/compiler/actions/CompileDirtyAction.java, /src/test/resources/blame/blameTestUntilCommitZero3.txt"
Expand Down
Loading

0 comments on commit 6b08fa5

Please sign in to comment.