SimplifyPlatformStatusFixCore.java
/*******************************************************************************
* Copyright (c) 2021, 2026 Carsten Hammer.
*
* 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:
* Carsten Hammer
*******************************************************************************/
package org.sandbox.jdt.internal.corext.fix;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ClassInstanceCreation;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
import org.eclipse.jdt.internal.corext.dom.ASTNodes;
import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFixCore.CompilationUnitRewriteOperationWithSourceRange;
import org.eclipse.jdt.internal.corext.fix.LinkedProposalModelCore;
import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
import org.eclipse.jdt.internal.corext.util.Messages;
import org.eclipse.text.edits.TextEditGroup;
import org.sandbox.jdt.internal.common.ReferenceHolder;
import org.sandbox.jdt.internal.corext.fix.helper.AbstractSimplifyPlatformStatus;
import org.sandbox.jdt.internal.corext.fix.helper.MultiStatusSimplifyPlatformStatus;
import org.sandbox.jdt.internal.corext.fix.helper.StatusErrorSimplifyPlatformStatus;
import org.sandbox.jdt.internal.corext.fix.helper.StatusInfoSimplifyPlatformStatus;
import org.sandbox.jdt.internal.corext.fix.helper.StatusWarningSimplifyPlatformStatus;
import org.sandbox.jdt.internal.ui.fix.MultiFixMessages;
/** Supported semantics-preserving Platform Status rewrite families. */
public enum SimplifyPlatformStatusFixCore {
STATUSWARNING(new StatusWarningSimplifyPlatformStatus()),
STATUSERROR(new StatusErrorSimplifyPlatformStatus()),
STATUSINFO(new StatusInfoSimplifyPlatformStatus()),
MULTISTATUS(new MultiStatusSimplifyPlatformStatus());
private final AbstractSimplifyPlatformStatus platformStatus;
SimplifyPlatformStatusFixCore(AbstractSimplifyPlatformStatus platformStatus) {
this.platformStatus= platformStatus;
}
public String getPreview(boolean enabled) {
return platformStatus.getPreview(enabled);
}
/** Finds supported rewrites while sharing one processed-node set. */
public void findOperations(final CompilationUnit compilationUnit,
final Set<CompilationUnitRewriteOperationWithSourceRange> operations,
final Set<ASTNode> nodesProcessed) throws CoreException {
platformStatus.find(this, compilationUnit, operations, nodesProcessed);
}
/** Creates the comment-preserving rewrite for one accepted constructor. */
public CompilationUnitRewriteOperationWithSourceRange rewrite(final ClassInstanceCreation visited,
ReferenceHolder<ASTNode, Object> holder) {
return rewrite(visited, holder, null);
}
/** Creates either a proven factory rewrite or the preserving fallback. */
public CompilationUnitRewriteOperationWithSourceRange rewrite(final ClassInstanceCreation visited,
ReferenceHolder<ASTNode, Object> holder, Integer factoryArgumentCount) {
return new CompilationUnitRewriteOperationWithSourceRange() {
@Override
public void rewriteASTInternal(final CompilationUnitRewrite cuRewrite,
final LinkedProposalModelCore linkedModel) throws CoreException {
TextEditGroup group= createTextEditGroup(
Messages.format(MultiFixMessages.PlatformStatusCleanUp_description,
new Object[] { SimplifyPlatformStatusFixCore.this.toString() }),
cuRewrite);
cuRewrite.getASTRewrite().setTargetSourceRangeComputer(COMPUTER);
if (factoryArgumentCount == null) {
platformStatus.rewrite(SimplifyPlatformStatusFixCore.this, visited, cuRewrite, group, holder);
} else {
platformStatus.rewrite(SimplifyPlatformStatusFixCore.this, visited, cuRewrite, group, holder,
factoryArgumentCount.intValue());
}
if (SimplifyPlatformStatusFixCore.this != MULTISTATUS) {
cuRewrite.getImportRemover().registerAddedImport(Status.class.getName());
}
}
};
}
private static final TargetSourceRangeComputer COMPUTER= new TargetSourceRangeComputer() {
@Override
public SourceRange computeSourceRange(final ASTNode nodeWithComment) {
if (Boolean.TRUE.equals(nodeWithComment.getProperty(ASTNodes.UNTOUCH_COMMENT))) {
return new SourceRange(nodeWithComment.getStartPosition(), nodeWithComment.getLength());
}
return super.computeSourceRange(nodeWithComment);
}
};
}