Skip to content

Commit

Permalink
Support Replace Anonymous with Lambda refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Nov 6, 2024
1 parent 2c5e5dc commit 13c916f
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 3 deletions.
19 changes: 17 additions & 2 deletions src/main/java/org/codetracker/BlockTrackerChangeHistory.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.codetracker.change.block.ElseBlockBodyAdded;
import org.codetracker.change.block.ExpressionChange;
import org.codetracker.change.block.MergeBlock;
import org.codetracker.change.block.ReplaceAnonymousWithLambda;
import org.codetracker.change.block.ReplaceConditionalWithTernary;
import org.codetracker.change.block.ReplaceLoopWithPipeline;
import org.codetracker.change.block.ReplacePipelineWithLoop;
Expand Down Expand Up @@ -66,6 +67,7 @@
import gr.uom.java.xmi.diff.PullUpOperationRefactoring;
import gr.uom.java.xmi.diff.PushDownOperationRefactoring;
import gr.uom.java.xmi.diff.RenameOperationRefactoring;
import gr.uom.java.xmi.diff.ReplaceAnonymousWithLambdaRefactoring;
import gr.uom.java.xmi.diff.ReplaceConditionalWithTernaryRefactoring;
import gr.uom.java.xmi.diff.ReplaceLoopWithPipelineRefactoring;
import gr.uom.java.xmi.diff.ReplacePipelineWithLoopRefactoring;
Expand Down Expand Up @@ -604,6 +606,19 @@ private Set<Block> analyseBlockRefactorings(Collection<Refactoring> refactorings
}
break;
}
case REPLACE_ANONYMOUS_WITH_LAMBDA: {
ReplaceAnonymousWithLambdaRefactoring anonymousWithLambdaRefactoring = (ReplaceAnonymousWithLambdaRefactoring) refactoring;
if (anonymousWithLambdaRefactoring.getLambdaOwner() instanceof StatementObject) {
StatementObject statement = (StatementObject) anonymousWithLambdaRefactoring.getLambdaOwner();
Block addedBlockAfter = Block.of(statement, anonymousWithLambdaRefactoring.getOperationAfter(), currentVersion);
if (equalOperator.test(addedBlockAfter)) {
blockBefore = Block.of((StatementObject) anonymousWithLambdaRefactoring.getAnonymousOwner(), anonymousWithLambdaRefactoring.getOperationBefore(), parentVersion);
blockAfter = addedBlockAfter;
changeType = Change.Type.REPLACE_ANONYMOUS_WITH_LAMBDA;
}
}
break;
}
case REPLACE_PIPELINE_WITH_LOOP: {
ReplacePipelineWithLoopRefactoring pipelineWithLoopRefactoring = (ReplacePipelineWithLoopRefactoring) refactoring;
for (AbstractCodeFragment fragment : pipelineWithLoopRefactoring.getCodeFragmentsAfter()) {
Expand Down Expand Up @@ -1242,7 +1257,7 @@ else if (startBlock.isClosingCurlyBracket()) {
}
else {
if (change instanceof ExpressionChange || change instanceof Introduced || change instanceof MergeBlock || change instanceof SplitBlock ||
change instanceof ReplaceLoopWithPipeline || change instanceof ReplacePipelineWithLoop || change instanceof ReplaceConditionalWithTernary) {
change instanceof ReplaceLoopWithPipeline || change instanceof ReplacePipelineWithLoop || change instanceof ReplaceConditionalWithTernary || change instanceof ReplaceAnonymousWithLambda) {
return historyInfo;
}
if (startBlock.getComposite() instanceof StatementObject && change instanceof BodyChange) {
Expand Down Expand Up @@ -1277,7 +1292,7 @@ else if (startBlock.isDoWhileConditional()) {
}
else {
if (change instanceof Introduced || change instanceof MergeBlock || change instanceof SplitBlock ||
change instanceof ReplaceLoopWithPipeline || change instanceof ReplacePipelineWithLoop || change instanceof ReplaceConditionalWithTernary) {
change instanceof ReplaceLoopWithPipeline || change instanceof ReplacePipelineWithLoop || change instanceof ReplaceConditionalWithTernary || change instanceof ReplaceAnonymousWithLambda) {
return historyInfo;
}
if (startBlock.getComposite() instanceof StatementObject && (change instanceof BodyChange || change instanceof BlockSignatureFormatChange)) {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/codetracker/change/Change.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ enum Type {
METHOD_MERGE("method merge"),
REPLACE_PIPELINE_WITH_LOOP("pipeline replaced with loop"),
REPLACE_LOOP_WITH_PIPELINE("loop replaced with pipeline"),
REPLACE_ANONYMOUS_WITH_LAMBDA("anonymous replaced with lambda"),
REPLACE_CONDITIONAL_WITH_TERNARY("conditional replaced with ternary"),
DOCUMENTATION_CHANGE("documentation change"),
TYPE_PARAMETER_CHANGE("type parameter change"),
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/codetracker/change/ChangeFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,12 @@ public AbstractChange build() {
change = new ReplaceConditionalWithTernary(refactoring);
break;
}
case REPLACE_ANONYMOUS_WITH_LAMBDA: {
if (refactoring == null)
throw new NullPointerException();
change = new ReplaceAnonymousWithLambda(refactoring);
break;
}
case EXPRESSION_CHANGE: {
change = new ExpressionChange();
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.codetracker.change.block;

import org.refactoringminer.api.Refactoring;

public class ReplaceAnonymousWithLambda extends BlockChange {
private final Refactoring refactoring;

public ReplaceAnonymousWithLambda(Refactoring refactoring) {
super(Type.REPLACE_ANONYMOUS_WITH_LAMBDA);
this.refactoring = refactoring;
}

public Refactoring getReplaceAnonymousWithLambdaRefactoring() {
return refactoring;
}

@Override
public String toString() {
return refactoring.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public class ReplaceConditionalWithTernary extends BlockChange {
private final Refactoring refactoring;

public ReplaceConditionalWithTernary(Refactoring refactoring) {
super(Type.REPLACE_LOOP_WITH_PIPELINE);
super(Type.REPLACE_CONDITIONAL_WITH_TERNARY);
this.refactoring = refactoring;
}

Expand Down

0 comments on commit 13c916f

Please sign in to comment.