package org.eclipse.dltk.itcl.internal.core.parser.processors;
import org.eclipse.dltk.ast.ASTNode;
import org.eclipse.dltk.ast.expressions.Expression;
import org.eclipse.dltk.ast.statements.Block;
import org.eclipse.dltk.compiler.problem.ProblemSeverities;
import org.eclipse.dltk.itcl.internal.core.IIncrTclModifiers;
import org.eclipse.dltk.itcl.internal.core.parser.ast.IncrTclConfigBody;
import org.eclipse.dltk.tcl.ast.TclStatement;
import org.eclipse.dltk.tcl.core.AbstractTclCommandProcessor;
import org.eclipse.dltk.tcl.core.ITclParser;
public class IncrTclConfigBodyCommandProcessor extends AbstractTclCommandProcessor {
public IncrTclConfigBodyCommandProcessor() {
}
@Override
public ASTNode process(TclStatement statement, ITclParser parser, ASTNode parent) {
if (statement == null || (statement != null && statement.getCount() == 0)) {
return null;
}
if (statement.getCount() < 3) {
this.report(parser, "Wrong number of arguments", statement.sourceStart(), statement.sourceEnd(),
ProblemSeverities.Error);
addToParent(parent, statement);
return statement;
}
Expression procName = statement.getAt(1);
String sName = IncrTclUtils.extractMethodName(procName);
if (sName == null || sName.length() == 0) {
this.report(parser, "Wrong number of arguments", statement.sourceStart(), statement.sourceEnd(),
ProblemSeverities.Error);
addToParent(parent, statement);
return statement;
}
Expression procCode = statement.getAt(2);
IncrTclConfigBody configBody = new IncrTclConfigBody(statement.sourceStart(), statement.sourceEnd());
configBody.setName(sName);
configBody.setNameStart(procName.sourceStart());
configBody.setNameEnd(procName.sourceEnd());
// For correct modifiers we need to add
Block block = new Block(procCode.sourceStart(), procCode.sourceEnd());
configBody.acceptBody(block);
IncrTclUtils.parseAddToBlock(parser, procCode, block);
configBody.setModifier(IIncrTclModifiers.AccIncrTcl);
this.addToParent(parent, configBody);
return configBody;
}
}