StructuredRewriteActionOperation.java

/*******************************************************************************
 * Copyright (c) 2026 Carsten Hammer 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
 *******************************************************************************/
package org.sandbox.jdt.triggerpattern.cleanup.actions;

import java.util.Objects;

import org.eclipse.core.runtime.CoreException;

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.text.edits.TextEditGroup;

import org.sandbox.jdt.triggerpattern.api.BatchTransformationProcessor.TransformationResult;
import org.sandbox.jdt.triggerpattern.api.SemanticRewritePlan;
import org.sandbox.jdt.triggerpattern.api.StructuredRewriteAction;

/** Applies one selected ordered action sequence inside the coordinated rewrite. */
public final class StructuredRewriteActionOperation
		extends CompilationUnitRewriteOperationWithSourceRange {

	private final TransformationResult result;
	private final SemanticRewritePlan plan;

	public StructuredRewriteActionOperation(TransformationResult result,
			SemanticRewritePlan plan) {
		this.result= Objects.requireNonNull(result);
		this.plan= Objects.requireNonNull(plan);
	}

	@Override
	public void rewriteASTInternal(CompilationUnitRewrite cuRewrite,
			LinkedProposalModelCore linkedModel) throws CoreException {
		String description= result.description() == null
				? "Apply structured rewrite actions" : result.description(); //$NON-NLS-1$
		TextEditGroup group= createTextEditGroup(description, cuRewrite);
		StructuredRewriteActionContext context=
				new StructuredRewriteActionContext(result, plan, cuRewrite, group);
		StructuredRewriteActionRegistry registry= StructuredRewriteActionRegistry.getInstance();
		for (StructuredRewriteAction action : result.structuredActions()) {
			StructuredRewriteAnnotationGuard.validate(action, context);
			registry.execute(action, context);
		}
	}

	@Override
	public String getAdditionalInfo() {
		return result.description();
	}
}