Skip to content

Commit

Permalink
Support for attribute initializer changes
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Jun 27, 2024
1 parent f41d4f8 commit 130fa29
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 2 deletions.
20 changes: 20 additions & 0 deletions src/main/java/org/codetracker/AttributeTrackerImpl.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package org.codetracker;

import gr.uom.java.xmi.UMLModel;
import gr.uom.java.xmi.decomposition.AbstractExpression;
import gr.uom.java.xmi.diff.*;
import org.apache.commons.lang3.tuple.Pair;
import org.codetracker.api.AttributeTracker;
import org.codetracker.api.CodeElementNotFoundException;
import org.codetracker.api.History;
import org.codetracker.api.Version;
import org.codetracker.change.ChangeFactory;
import org.codetracker.change.Change.Type;
import org.codetracker.element.Attribute;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Repository;
Expand Down Expand Up @@ -86,6 +89,23 @@ public History<Attribute> track() throws Exception {
Attribute leftAttribute = getAttribute(leftModel, parentVersion, rightAttribute::equalIdentifierIgnoringVersion);
if (leftAttribute != null) {
historyReport.step2PlusPlus();
//check if initializer changed
AbstractExpression leftInitializer = leftAttribute.getUmlAttribute().getVariableDeclaration().getInitializer();
AbstractExpression rightInitializer = rightAttribute.getUmlAttribute().getVariableDeclaration().getInitializer();
if (leftInitializer != null && rightInitializer != null) {
if (!leftInitializer.getString().equals(rightInitializer.getString())) {
changeHistory.get().addChange(leftAttribute, rightAttribute, ChangeFactory.forAttribute(Type.INITIALIZER_CHANGE));
attributes.add(leftAttribute);
}
}
else if (leftInitializer == null && rightInitializer != null) {
changeHistory.get().addChange(leftAttribute, rightAttribute, ChangeFactory.forAttribute(Type.INITIALIZER_ADDED));
attributes.add(leftAttribute);
}
else if (leftInitializer != null && rightInitializer == null) {
changeHistory.get().addChange(leftAttribute, rightAttribute, ChangeFactory.forAttribute(Type.INITIALIZER_REMOVED));
attributes.add(leftAttribute);
}
continue;
}

Expand Down
5 changes: 4 additions & 1 deletion src/main/java/org/codetracker/change/Change.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ enum Type {
PARAMETER_CHANGE("parameter change"),
ANNOTATION_CHANGE("annotation change"),
MOVED("moved"),
EXPRESSION_CHANGE("expression change");
EXPRESSION_CHANGE("expression change"),
INITIALIZER_CHANGE("initializer change"),
INITIALIZER_ADDED("initializer added"),
INITIALIZER_REMOVED("initializer removed");

private static final Map<String, Type> lookup = new HashMap<>();

Expand Down
18 changes: 18 additions & 0 deletions src/main/java/org/codetracker/change/ChangeFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,24 @@ public AbstractChange build() {
change = new ExpressionChange();
break;
}
case INITIALIZER_CHANGE: {
if (isAttribute()) {
change = new AttributeInitializerChange();
}
break;
}
case INITIALIZER_ADDED: {
if (isAttribute()) {
change = new AttributeInitializerAdded();
}
break;
}
case INITIALIZER_REMOVED: {
if (isAttribute()) {
change = new AttributeInitializerRemoved();
}
break;
}
case RETURN_TYPE_CHANGE: {
if (refactoring == null)
throw new NullPointerException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
public abstract class AttributeChange extends AbstractChange {
private final Refactoring refactoring;

public AttributeChange(Type type) {
super(type);
this.refactoring = null;
}

public AttributeChange(Type type, Refactoring refactoring) {
super(type);
this.refactoring = refactoring;
Expand All @@ -17,6 +22,8 @@ public final Refactoring getRefactoring() {

@Override
public String toString() {
return refactoring.toString();
if (refactoring != null)
return refactoring.toString();
return type.getTitle();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.codetracker.change.attribute;

public class AttributeInitializerAdded extends AttributeChange {
public AttributeInitializerAdded() {
super(Type.INITIALIZER_ADDED);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.codetracker.change.attribute;

public class AttributeInitializerChange extends AttributeChange {
public AttributeInitializerChange() {
super(Type.INITIALIZER_CHANGE);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.codetracker.change.attribute;

public class AttributeInitializerRemoved extends AttributeChange {
public AttributeInitializerRemoved() {
super(Type.INITIALIZER_REMOVED);
}
}

0 comments on commit 130fa29

Please sign in to comment.