/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. 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:
* Markus Schorn - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core.parser.scanner;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.dom.ast.IMacroBinding;
import org.eclipse.cdt.core.dom.rewrite.MacroExpansionExplorer.IMacroExpansionStep;
import org.eclipse.text.edits.ReplaceEdit;
/**
* Implementation for {@link IMacroExpansionStep}.
*/
public class MacroExpansionStep implements IMacroExpansionStep {
private final String fBefore;
private final IMacroBinding fMacroDefinition;
private final ReplaceEdit[] fReplacements;
private final IASTFileLocation fMacroLocation;
public MacroExpansionStep(String before, IMacroBinding def, IASTFileLocation macroLoc, ReplaceEdit[] replacements) {
fBefore= before;
fReplacements= replacements;
fMacroDefinition= def;
fMacroLocation= macroLoc;
}
public String getCodeBeforeStep() {
return fBefore;
}
public String getCodeAfterStep() {
StringBuilder result= new StringBuilder();
int offset= 0;
for (int i = 0; i < fReplacements.length; i++) {
ReplaceEdit r= fReplacements[i];
result.append(fBefore, offset, r.getOffset());
result.append(r.getText());
offset= r.getExclusiveEnd();
}
result.append(fBefore, offset, fBefore.length());
return result.toString();
}
public IMacroBinding getExpandedMacro() {
return fMacroDefinition;
}
public ReplaceEdit[] getReplacements() {
return fReplacements;
}
public IASTFileLocation getLocationOfExpandedMacroDefinition() {
return fMacroLocation;
}
}