private void ProcessObj(ParserRuleContext context) { ParserRuleContext child = context.GetChild(0) as ParserRuleContext; if (child is PlSqlParser.Procedure_bodyContext || child is PlSqlParser.Procedure_specContext || child is PlSqlParser.Function_bodyContext || child is PlSqlParser.Function_specContext) { var procedure = _procedureVisitor.Visit(child).SetPositionExt(child); _Result.Objects.Add(procedure); } else if (child is PlSqlParser.Variable_declarationContext variableContext) { var name = variableContext.GetChild(0).GetText(); var pltype = variableContext.GetChild(1).GetText(); if (name == "PROCEDURE") { var procedure = new ParsedProcedure(pltype); procedure.SetPosition(variableContext); _Result.Objects.Add(procedure); } else { var variable = new ParsedVariable(name, pltype); variable.SetPosition(variableContext); var codePosition = new PieceOfCode(); codePosition.SetPosition(variableContext.GetChild(0) as ParserRuleContext); variable.NameIdentifierPart = codePosition; _Result.Objects.Add(variable); } } else if (child is PlSqlParser.Type_declarationContext typeContext) { var NameContext = typeContext.GetChild(1); var name = NameContext.GetText(); var type = new ParsedType(name); type.SetPosition(typeContext); type.NameIdentifierPart.SetPosition(NameContext as ParserRuleContext); _Result.Objects.Add(type); } else if (child is PlSqlParser.Cursor_declarationContext cursorContext) { var NameContext = cursorContext.GetChild(1); var name = NameContext.GetText(); var type = new ParsedCursor(name); type.SetPosition(cursorContext); type.NameIdentifierPart.SetPosition(NameContext as ParserRuleContext); _Result.Objects.Add(type); } }
public override ParsedProcedure Visit(IParseTree tree) { var methodTypeName = (tree.GetChild(0) as TerminalNodeImpl).Symbol.Text; var identifierContext = tree.GetChild(1); if (!(identifierContext is PlSqlParser.IdentifierContext)) { throw new NotImplementedException("Ожидалось имя процедуры"); } if (methodTypeName == "PROCEDURE") { _Result = new ParsedProcedure(identifierContext.GetText()); } else { _Result = new ParsedFunction(identifierContext.GetText()); } var codePosition = new PieceOfCode(); codePosition.SetPosition(identifierContext as ParserRuleContext); _Result.NameIdentifierPart = codePosition; int chCnt = tree.ChildCount; for (int i = 2; i < chCnt; i++) { if (tree.GetChild(i) is TerminalNodeImpl terminalNoeImpl) { if (terminalNoeImpl.Symbol.Text == "IS" || terminalNoeImpl.Symbol.Text == "AS") { codePosition = new PieceOfCode(); codePosition.SetPosition(tree as ParserRuleContext); var PrevChild = tree.GetChild(i - 1); if (PrevChild is ParserRuleContext PrevContext) { codePosition.SetPosition(PrevContext); } else if (PrevChild is TerminalNodeImpl PrevTerminalNodeImpl) { codePosition.SetPosition(PrevTerminalNodeImpl); } _Result.DeclarationPart = codePosition; break; } } } return(base.Visit(tree)); }
public void AddPosition(ePackageElementDefinitionType packageElementDefinitionType, PieceOfCode posCode) { Position.Add(packageElementDefinitionType, posCode); }