/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.wst.jsdt.internal.corext.fix; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.ltk.core.refactoring.TextChange; import org.eclipse.text.edits.TextEditGroup; import org.eclipse.wst.jsdt.core.IJavaScriptUnit; import org.eclipse.wst.jsdt.core.dom.JavaScriptUnit; import org.eclipse.wst.jsdt.internal.corext.refactoring.changes.CompilationUnitChange; import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.CompilationUnitRewrite; public class LinkedFix extends AbstractFix { public static abstract class AbstractLinkedFixRewriteOperation extends AbstractFixRewriteOperation implements ILinkedFixRewriteOperation { /* (non-Javadoc) * @see org.eclipse.wst.jsdt.internal.corext.fix.AbstractFix.IFixRewriteOperation#rewriteAST(org.eclipse.wst.jsdt.internal.corext.refactoring.structure.CompilationUnitRewrite, java.util.List) */ public void rewriteAST(CompilationUnitRewrite cuRewrite, List textEditGroups) throws CoreException { rewriteAST(cuRewrite, textEditGroups, new LinkedProposalModel()); } } private final IFixRewriteOperation[] fFixRewrites; private final JavaScriptUnit fCompilationUnit; private final LinkedProposalModel fLinkedProposalModel; protected LinkedFix(String name, JavaScriptUnit compilationUnit, IFixRewriteOperation[] fixRewrites) { super(name, compilationUnit, fixRewrites); fCompilationUnit= compilationUnit; fFixRewrites= fixRewrites; fLinkedProposalModel= new LinkedProposalModel(); } public LinkedProposalModel getLinkedPositions() { return fLinkedProposalModel; } /* (non-Javadoc) * @see org.eclipse.wst.jsdt.internal.corext.fix.IFix#createChange() */ public TextChange createChange() throws CoreException { if (fFixRewrites == null || fFixRewrites.length == 0) return null; CompilationUnitRewrite cuRewrite= new CompilationUnitRewrite((IJavaScriptUnit)fCompilationUnit.getJavaElement(), fCompilationUnit); List/*<TextEditGroup>*/ groups= new ArrayList(); fLinkedProposalModel.clear(); for (int i= 0; i < fFixRewrites.length; i++) { IFixRewriteOperation operation= fFixRewrites[i]; if (operation instanceof ILinkedFixRewriteOperation) { ILinkedFixRewriteOperation linkedOperation= (ILinkedFixRewriteOperation)operation; linkedOperation.rewriteAST(cuRewrite, groups, fLinkedProposalModel); } else { operation.rewriteAST(cuRewrite, groups); } } CompilationUnitChange result= cuRewrite.createChange(getDescription(), true, null); for (Iterator iter= groups.iterator(); iter.hasNext();) { TextEditGroup group= (TextEditGroup)iter.next(); result.addTextEditGroup(group); } return result; } }