Skip to content

Commit

Permalink
Refactor ElseIfCleanUp to jdt.core.manipulation (#1374)
Browse files Browse the repository at this point in the history
- create new ElseIfCleanUpCore and ElseIfFixCore classes
- modify CodeStyleTabPage, CleanUpPerfTest, and plugin.xml to
  refer to new core clean-up
- fixes #1373
  • Loading branch information
jjohnstn committed Apr 30, 2024
1 parent c9f7776 commit 8f39c29
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 66 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2020 Fabrice TIERCELIN and others.
* Copyright (c) 2020, 2024 Fabrice TIERCELIN and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
Expand All @@ -10,34 +10,22 @@
*
* Contributors:
* Fabrice TIERCELIN - initial API and implementation
* Red Hat Inc. - refactored to jdt.core.manipulation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.fix;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

import org.eclipse.text.edits.TextEditGroup;

import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.IfStatement;
import org.eclipse.jdt.core.dom.Statement;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jdt.core.refactoring.CompilationUnitChange;

import org.eclipse.jdt.internal.corext.dom.ASTNodes;
import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix;
import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix.CompilationUnitRewriteOperation;
import org.eclipse.jdt.internal.corext.fix.LinkedProposalModelCore;
import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
import org.eclipse.jdt.internal.corext.fix.ElseIfFixCore;

import org.eclipse.jdt.ui.cleanup.CleanUpRequirements;
import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
Expand All @@ -46,12 +34,12 @@
/**
* A fix that uses the <code>else if</code> pseudo keyword.
*/
public class ElseIfCleanUp extends AbstractMultiFix implements ICleanUpFix {
public ElseIfCleanUp() {
public class ElseIfCleanUpCore extends AbstractMultiFix implements ICleanUpFix {
public ElseIfCleanUpCore() {
this(Collections.emptyMap());
}

public ElseIfCleanUp(Map<String, String> options) {
public ElseIfCleanUpCore(Map<String, String> options) {
super(options);
}

Expand Down Expand Up @@ -97,32 +85,7 @@ protected ICleanUpFix createFix(CompilationUnit unit) throws CoreException {
return null;
}

final List<CompilationUnitRewriteOperation> rewriteOperations= new ArrayList<>();

unit.accept(new ASTVisitor() {
@Override
public boolean visit(final IfStatement visited) {
Statement elseStatement= visited.getElseStatement();

if (elseStatement instanceof Block) {
IfStatement innerIf= ASTNodes.as(elseStatement, IfStatement.class);

if (innerIf != null) {
rewriteOperations.add(new ElseIfOperation(visited, innerIf));
return false;
}
}

return true;
}
});

if (rewriteOperations.isEmpty()) {
return null;
}

return new CompilationUnitRewriteOperationsFix(MultiFixMessages.CodeStyleCleanUp_ElseIf_description, unit,
rewriteOperations.toArray(new CompilationUnitRewriteOperation[0]));
return ElseIfFixCore.createCleanUp(unit);
}

@Override
Expand All @@ -140,21 +103,4 @@ protected ICleanUpFix createFix(final CompilationUnit unit, final IProblemLocati
return null;
}

private static class ElseIfOperation extends CompilationUnitRewriteOperation {
private final IfStatement visited;
private final IfStatement innerIf;

public ElseIfOperation(final IfStatement visited, final IfStatement innerIf) {
this.visited= visited;
this.innerIf= innerIf;
}

@Override
public void rewriteASTInternal(final CompilationUnitRewrite cuRewrite, final LinkedProposalModelCore linkedModel) throws CoreException {
ASTRewrite rewrite= cuRewrite.getASTRewrite();
TextEditGroup group= createTextEditGroup(MultiFixMessages.CodeStyleCleanUp_ElseIf_description, cuRewrite);

rewrite.replace(visited.getElseStatement(), ASTNodes.createMoveTarget(rewrite, innerIf), group);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*******************************************************************************
* Copyright (c) 2024 Fabrice TIERCELIN and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Fabrice TIERCELIN - initial API and implementation
* Red Hat Inc. - code extracted from ElseIfCleanUp
*******************************************************************************/
package org.eclipse.jdt.internal.corext.fix;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.CoreException;

import org.eclipse.text.edits.TextEditGroup;

import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.IfStatement;
import org.eclipse.jdt.core.dom.Statement;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;

import org.eclipse.jdt.internal.corext.dom.ASTNodes;
import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;

import org.eclipse.jdt.ui.cleanup.ICleanUpFix;

import org.eclipse.jdt.internal.ui.fix.MultiFixMessages;

public class ElseIfFixCore extends CompilationUnitRewriteOperationsFixCore {

private static class ElseIfOperation extends CompilationUnitRewriteOperation {
private final IfStatement visited;
private final IfStatement innerIf;

public ElseIfOperation(final IfStatement visited, final IfStatement innerIf) {
this.visited= visited;
this.innerIf= innerIf;
}

@Override
public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModelCore linkedModel) throws CoreException {
ASTRewrite rewrite= cuRewrite.getASTRewrite();
TextEditGroup group= createTextEditGroup(MultiFixMessages.CodeStyleCleanUp_ElseIf_description, cuRewrite);

rewrite.replace(visited.getElseStatement(), ASTNodes.createMoveTarget(rewrite, innerIf), group);
}
}

public static ICleanUpFix createCleanUp(final CompilationUnit unit) {

final List<CompilationUnitRewriteOperation> rewriteOperations= new ArrayList<>();

unit.accept(new ASTVisitor() {
@Override
public boolean visit(final IfStatement visited) {
Statement elseStatement= visited.getElseStatement();

if (elseStatement instanceof Block) {
IfStatement innerIf= ASTNodes.as(elseStatement, IfStatement.class);

if (innerIf != null) {
rewriteOperations.add(new ElseIfOperation(visited, innerIf));
return false;
}
}

return true;
}
});

if (rewriteOperations.isEmpty()) {
return null;
}

return new CompilationUnitRewriteOperationsFixCore(MultiFixMessages.CodeStyleCleanUp_ElseIf_description, unit,
rewriteOperations.toArray(new CompilationUnitRewriteOperation[0]));

}

protected ElseIfFixCore(final String name, final CompilationUnit compilationUnit, CompilationUnitRewriteOperation[] fixRewriteOperations) {
super(name, compilationUnit, fixRewriteOperations);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
import org.eclipse.jdt.internal.ui.fix.ControlStatementsCleanUp;
import org.eclipse.jdt.internal.ui.fix.ConvertLoopCleanUp;
import org.eclipse.jdt.internal.ui.fix.DoubleNegationCleanUp;
import org.eclipse.jdt.internal.ui.fix.ElseIfCleanUp;
import org.eclipse.jdt.internal.ui.fix.ElseIfCleanUpCore;
import org.eclipse.jdt.internal.ui.fix.EmbeddedIfCleanUp;
import org.eclipse.jdt.internal.ui.fix.EvaluateNullableCleanUp;
import org.eclipse.jdt.internal.ui.fix.ExpressionsCleanUp;
Expand Down Expand Up @@ -721,7 +721,7 @@ public void testElseIfCleanUp() throws Exception {

storeSettings(node);

cleanUpRefactoring.addCleanUp(new ElseIfCleanUp());
cleanUpRefactoring.addCleanUp(new ElseIfCleanUpCore());

doCleanUp(cleanUpRefactoring);
}
Expand Down
2 changes: 1 addition & 1 deletion org.eclipse.jdt.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7132,7 +7132,7 @@
runAfter="org.eclipse.jdt.ui.cleanup.replace_deprecated_calls">
</cleanUp>
<cleanUp
class="org.eclipse.jdt.internal.ui.fix.ElseIfCleanUp"
class="org.eclipse.jdt.internal.ui.fix.ElseIfCleanUpCore"
id="org.eclipse.jdt.ui.cleanup.else_if"
runAfter="org.eclipse.jdt.ui.cleanup.variables">
</cleanUp>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.eclipse.jdt.internal.ui.fix.AbstractCleanUp;
import org.eclipse.jdt.internal.ui.fix.AddAllCleanUp;
import org.eclipse.jdt.internal.ui.fix.ControlStatementsCleanUp;
import org.eclipse.jdt.internal.ui.fix.ElseIfCleanUp;
import org.eclipse.jdt.internal.ui.fix.ElseIfCleanUpCore;
import org.eclipse.jdt.internal.ui.fix.ExpressionsCleanUp;
import org.eclipse.jdt.internal.ui.fix.ExtractIncrementCleanUp;
import org.eclipse.jdt.internal.ui.fix.InstanceofCleanUp;
Expand All @@ -43,7 +43,7 @@ protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
new ControlStatementsCleanUp(values),
new SwitchCleanUpCore(values),
new AddAllCleanUp(values),
new ElseIfCleanUp(values),
new ElseIfCleanUpCore(values),
new ReduceIndentationCleanUp(values),
new ExpressionsCleanUp(values),
new ExtractIncrementCleanUp(values),
Expand Down

0 comments on commit 8f39c29

Please sign in to comment.