package org.eclipse.dltk.itcl.internal.core.parser.processors; import java.util.ArrayList; import java.util.List; import org.eclipse.dltk.ast.declarations.Argument; import org.eclipse.dltk.ast.declarations.MethodDeclaration; import org.eclipse.dltk.ast.expressions.Expression; import org.eclipse.dltk.ast.references.SimpleReference; import org.eclipse.dltk.ast.statements.Block; import org.eclipse.dltk.tcl.ast.expressions.TclBlockExpression; import org.eclipse.dltk.tcl.ast.expressions.TclExecuteExpression; import org.eclipse.dltk.tcl.core.ITclParser; import org.eclipse.dltk.tcl.internal.parser.OldTclParserUtils; public class IncrTclUtils { public static String extractMethodName(Expression procName) { String sName = null; if (procName instanceof SimpleReference) { sName = ((SimpleReference) procName).getName(); } else if (procName instanceof TclBlockExpression) { sName = ((TclBlockExpression) procName).getBlock(); } else if (procName instanceof TclExecuteExpression) { sName = ((TclExecuteExpression) procName).getExpression(); } return sName; } public static List extractMethodArguments(Expression procArguments) { List arguments = null; if (procArguments instanceof TclBlockExpression) { List/* < Statement > */st = null; st = ((TclBlockExpression) procArguments).parseBlockSimple(false); arguments = OldTclParserUtils.parseArguments(st); } if (procArguments instanceof SimpleReference) { arguments = new ArrayList(); Argument a = new Argument((SimpleReference) procArguments, procArguments.sourceStart(), null, 0); arguments.add(a); } if (arguments == null) { return new ArrayList(); } return arguments; } public static void parseBlockAdd(ITclParser parser, Expression procCode, MethodDeclaration method) { if (procCode != null) { Block block = new Block(procCode.sourceStart(), procCode .sourceEnd()); method.acceptBody(block); parseAddToBlock(parser, procCode, block); } } public static void parseAddToBlock(ITclParser parser, Expression procCode, Block block) { if (procCode instanceof Block) { block.getStatements().addAll(((Block) procCode).getStatements()); } else if (procCode instanceof TclBlockExpression) { String content = ((TclBlockExpression) procCode).getBlock(); if (content.startsWith("{") && content.endsWith("}")) { content = content.substring(1, content.length() - 1); } parser.parse(content, procCode.sourceStart() + 1 - parser.getStartPos(), block); } } }