Search in sources :

Example 1 with Tuple2

use of groovy.lang.Tuple2 in project groovy by apache.

the class AstBuilder method visitSwitchBlockStatementGroup.

@Override
@SuppressWarnings("unchecked")
public List<Statement> visitSwitchBlockStatementGroup(final SwitchBlockStatementGroupContext ctx) {
    int labelCnt = ctx.switchLabel().size();
    List<Token> firstLabelHolder = new ArrayList<>(1);
    return (List<Statement>) ctx.switchLabel().stream().map(e -> (Object) this.visitSwitchLabel(e)).reduce(new ArrayList<Statement>(4), (r, e) -> {
        List<Statement> statementList = (List<Statement>) r;
        Tuple2<Token, Expression> tuple = (Tuple2<Token, Expression>) e;
        boolean isLast = labelCnt - 1 == statementList.size();
        switch(tuple.getV1().getType()) {
            case CASE:
                {
                    if (!asBoolean(statementList)) {
                        firstLabelHolder.add(tuple.getV1());
                    }
                    statementList.add(configureAST(new CaseStatement(tuple.getV2(), // check whether processing the last label. if yes, block statement should be attached.
                    isLast ? this.visitBlockStatements(ctx.blockStatements()) : EmptyStatement.INSTANCE), firstLabelHolder.get(0)));
                    break;
                }
            case DEFAULT:
                {
                    BlockStatement blockStatement = this.visitBlockStatements(ctx.blockStatements());
                    blockStatement.putNodeMetaData(IS_SWITCH_DEFAULT, true);
                    statementList.add(// this.configureAST(blockStatement, tuple.getKey())
                    blockStatement);
                    break;
                }
        }
        return statementList;
    });
}
Also used : CastParExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.CastParExpressionContext) SUB(org.apache.groovy.parser.antlr4.GroovyParser.SUB) CastExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.CastExprAltContext) ConditionalExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ConditionalExprAltContext) DEFAULT(org.apache.groovy.parser.antlr4.GroovyParser.DEFAULT) IdentifierContext(org.apache.groovy.parser.antlr4.GroovyParser.IdentifierContext) SEALED(org.apache.groovy.parser.antlr4.GroovyParser.SEALED) QualifiedClassNameListContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedClassNameListContext) ModifierContext(org.apache.groovy.parser.antlr4.GroovyParser.ModifierContext) ElementValuePairsContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValuePairsContext) BlockStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockStatementContext) PathExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.PathExpressionContext) NonSealed(groovy.transform.NonSealed) EnumConstantsContext(org.apache.groovy.parser.antlr4.GroovyParser.EnumConstantsContext) Map(java.util.Map) ListContext(org.apache.groovy.parser.antlr4.GroovyParser.ListContext) Sealed(groovy.transform.Sealed) PropertyNode(org.codehaus.groovy.ast.PropertyNode) Trait(groovy.transform.Trait) TypeNamePairContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeNamePairContext) UnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression) ClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression) Recognizer(org.antlr.v4.runtime.Recognizer) QualifiedNameElementContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedNameElementContext) EnhancedStatementExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedStatementExpressionContext) EmptyDimsContext(org.apache.groovy.parser.antlr4.GroovyParser.EmptyDimsContext) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) ClosureOrLambdaExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.ClosureOrLambdaExpressionContext) CommandExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.CommandExpressionContext) CommandExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.CommandExprAltContext) GstringValueContext(org.apache.groovy.parser.antlr4.GroovyParser.GstringValueContext) ArrayInitializerContext(org.apache.groovy.parser.antlr4.GroovyParser.ArrayInitializerContext) MethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression) Stream(java.util.stream.Stream) TernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression) AssertStatement(org.codehaus.groovy.ast.stmt.AssertStatement) DefaultGroovyMethods.asBoolean(org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean) IdentifierPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.IdentifierPrmrAltContext) AndExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.AndExprAltContext) DEC(org.apache.groovy.parser.antlr4.GroovyParser.DEC) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) DEF(org.apache.groovy.parser.antlr4.GroovyParser.DEF) GeneralUtils.declS(org.codehaus.groovy.ast.tools.GeneralUtils.declS) VariableDeclaratorIdContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclaratorIdContext) YieldStatementContext(org.apache.groovy.parser.antlr4.GroovyLangParser.YieldStatementContext) LinkedHashMap(java.util.LinkedHashMap) EnhancedForControlContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedForControlContext) PrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression) SystemUtil(org.apache.groovy.util.SystemUtil) ExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement) GeneralUtils.returnS(org.codehaus.groovy.ast.tools.GeneralUtils.returnS) GroovyParserRuleContext(org.apache.groovy.parser.antlr4.GroovyParser.GroovyParserRuleContext) PowerExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.PowerExprAltContext) StandardLambdaExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.StandardLambdaExpressionContext) PostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression) StringUtils(org.apache.groovy.parser.antlr4.util.StringUtils) ElementValuePairContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValuePairContext) Expression(org.codehaus.groovy.ast.expr.Expression) AnnotationNameContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotationNameContext) FINAL(org.apache.groovy.parser.antlr4.GroovyParser.FINAL) Opcodes(org.objectweb.asm.Opcodes) CompileStatic(groovy.transform.CompileStatic) UnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression) SourceUnit(org.codehaus.groovy.control.SourceUnit) ClassNode(org.codehaus.groovy.ast.ClassNode) SwitchExpressionLabelContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchExpressionLabelContext) ForStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ForStmtAltContext) BreakStatement(org.codehaus.groovy.ast.stmt.BreakStatement) GeneralUtils.listX(org.codehaus.groovy.ast.tools.GeneralUtils.listX) GeneralUtils.localVarX(org.codehaus.groovy.ast.tools.GeneralUtils.localVarX) GenericsType(org.codehaus.groovy.ast.GenericsType) IOException(java.io.IOException) PredictionMode(org.antlr.v4.runtime.atn.PredictionMode) ForControlContext(org.apache.groovy.parser.antlr4.GroovyParser.ForControlContext) ReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) VariableModifiersContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableModifiersContext) CompilationUnitContext(org.apache.groovy.parser.antlr4.GroovyParser.CompilationUnitContext) RecognitionException(org.antlr.v4.runtime.RecognitionException) BitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression) TupleConstructor(groovy.transform.TupleConstructor) ANTLRErrorListener(org.antlr.v4.runtime.ANTLRErrorListener) IfElseStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.IfElseStatementContext) MapEntryLabelContext(org.apache.groovy.parser.antlr4.GroovyParser.MapEntryLabelContext) AS(org.apache.groovy.parser.antlr4.GroovyParser.AS) EqualityExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.EqualityExprAltContext) GeneralUtils.stmt(org.codehaus.groovy.ast.tools.GeneralUtils.stmt) Interval(org.antlr.v4.runtime.misc.Interval) IntegerLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.IntegerLiteralAltContext) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) TypeArgumentsContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeArgumentsContext) CompilePhase(org.codehaus.groovy.control.CompilePhase) TokenStream(org.antlr.v4.runtime.TokenStream) AtnManager(org.apache.groovy.parser.antlr4.internal.atnmanager.AtnManager) ExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionContext) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) ClosureUtils(org.codehaus.groovy.ast.tools.ClosureUtils) ModuleNode(org.codehaus.groovy.ast.ModuleNode) LogicalAndExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LogicalAndExprAltContext) FormalParameterContext(org.apache.groovy.parser.antlr4.GroovyParser.FormalParameterContext) EnumConstantClassNode(org.codehaus.groovy.ast.EnumConstantClassNode) BlockContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockContext) Numbers(org.codehaus.groovy.syntax.Numbers) SwitchLabelContext(org.apache.groovy.parser.antlr4.GroovyParser.SwitchLabelContext) BreakStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.BreakStatementContext) BuiltInTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.BuiltInTypeContext) MethodNameContext(org.apache.groovy.parser.antlr4.GroovyParser.MethodNameContext) CreatorContext(org.apache.groovy.parser.antlr4.GroovyParser.CreatorContext) ForStatement(org.codehaus.groovy.ast.stmt.ForStatement) INC(org.apache.groovy.parser.antlr4.GroovyParser.INC) LabeledStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LabeledStmtAltContext) MethodDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.MethodDeclarationContext) ScriptStatementsContext(org.apache.groovy.parser.antlr4.GroovyParser.ScriptStatementsContext) NamedPropertyArgsContext(org.apache.groovy.parser.antlr4.GroovyParser.NamedPropertyArgsContext) ExclusiveOrExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ExclusiveOrExprAltContext) Types(org.codehaus.groovy.syntax.Types) GeneralUtils.closureX(org.codehaus.groovy.ast.tools.GeneralUtils.closureX) DefaultGroovyMethods(org.codehaus.groovy.runtime.DefaultGroovyMethods) ThisPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ThisPrmrAltContext) SwitchBlockStatementGroupContext(org.apache.groovy.parser.antlr4.GroovyParser.SwitchBlockStatementGroupContext) StringGroovyMethods(org.codehaus.groovy.runtime.StringGroovyMethods) Collectors(java.util.stream.Collectors) NotExpression(org.codehaus.groovy.ast.expr.NotExpression) PrimitiveTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.PrimitiveTypeContext) InnerClassNode(org.codehaus.groovy.ast.InnerClassNode) Objects(java.util.Objects) ARROW(org.apache.groovy.parser.antlr4.GroovyLangParser.ARROW) IfStatement(org.codehaus.groovy.ast.stmt.IfStatement) MapContext(org.apache.groovy.parser.antlr4.GroovyParser.MapContext) NewPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.NewPrmrAltContext) EnhancedArgumentListInParContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedArgumentListInParContext) ForUpdateContext(org.apache.groovy.parser.antlr4.GroovyParser.ForUpdateContext) RegexExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.RegexExprAltContext) INSTANCEOF(org.apache.groovy.parser.antlr4.GroovyParser.INSTANCEOF) AnnotationNode(org.codehaus.groovy.ast.AnnotationNode) VariableDeclaratorContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclaratorContext) CompactConstructorDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.CompactConstructorDeclarationContext) TypeArgumentsOrDiamondContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeArgumentsOrDiamondContext) Verifier(org.codehaus.groovy.classgen.Verifier) ContinueStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.ContinueStatementContext) Maps(org.apache.groovy.util.Maps) Tuple2(groovy.lang.Tuple2) NOT_IN(org.apache.groovy.parser.antlr4.GroovyParser.NOT_IN) Tuple3(groovy.lang.Tuple3) ThrowStatement(org.codehaus.groovy.ast.stmt.ThrowStatement) VariableNamesContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableNamesContext) GeneralUtils.varX(org.codehaus.groovy.ast.tools.GeneralUtils.varX) EmptyExpression(org.codehaus.groovy.ast.expr.EmptyExpression) LinkedList(java.util.LinkedList) AnnotationContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotationContext) GstringContext(org.apache.groovy.parser.antlr4.GroovyParser.GstringContext) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) DynamicMemberNameContext(org.apache.groovy.parser.antlr4.GroovyParser.DynamicMemberNameContext) MapEntryContext(org.apache.groovy.parser.antlr4.GroovyParser.MapEntryContext) StatementContext(org.apache.groovy.parser.antlr4.GroovyParser.StatementContext) DoWhileStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.DoWhileStmtAltContext) ClassHelper(org.codehaus.groovy.ast.ClassHelper) GeneralUtils.cloneParams(org.codehaus.groovy.ast.tools.GeneralUtils.cloneParams) ShiftExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ShiftExprAltContext) ClassBodyDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassBodyDeclarationContext) DescriptiveErrorStrategy(org.apache.groovy.parser.antlr4.internal.DescriptiveErrorStrategy) TypeUtil.isPrimitiveType(org.codehaus.groovy.classgen.asm.util.TypeUtil.isPrimitiveType) SynchronizedStatement(org.codehaus.groovy.ast.stmt.SynchronizedStatement) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) ReturnTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.ReturnTypeContext) ASTNode(org.codehaus.groovy.ast.ASTNode) TupleExpression(org.codehaus.groovy.ast.expr.TupleExpression) NonWildcardTypeArgumentsContext(org.apache.groovy.parser.antlr4.GroovyParser.NonWildcardTypeArgumentsContext) ThisFormalParameterContext(org.apache.groovy.parser.antlr4.GroovyParser.ThisFormalParameterContext) TryCatchStatement(org.codehaus.groovy.ast.stmt.TryCatchStatement) RANGE_EXCLUSIVE_RIGHT(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_EXCLUSIVE_RIGHT) MethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression) BooleanLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.BooleanLiteralAltContext) ConstructorNode(org.codehaus.groovy.ast.ConstructorNode) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) ClassOrInterfaceModifierContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceModifierContext) SyntaxException(org.codehaus.groovy.syntax.SyntaxException) PRIVATE(org.apache.groovy.parser.antlr4.GroovyParser.PRIVATE) InclusiveOrExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.InclusiveOrExprAltContext) ElementValueArrayInitializerContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValueArrayInitializerContext) Arrays(java.util.Arrays) Token(org.antlr.v4.runtime.Token) CharStreams(org.antlr.v4.runtime.CharStreams) NamePartContext(org.apache.groovy.parser.antlr4.GroovyParser.NamePartContext) GE(org.apache.groovy.parser.antlr4.GroovyParser.GE) EnumConstantContext(org.apache.groovy.parser.antlr4.GroovyParser.EnumConstantContext) LocalVariableDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.LocalVariableDeclarationContext) ClassBodyContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassBodyContext) MethodBodyContext(org.apache.groovy.parser.antlr4.GroovyParser.MethodBodyContext) WhileStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.WhileStmtAltContext) CaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement) CommandArgumentContext(org.apache.groovy.parser.antlr4.GroovyParser.CommandArgumentContext) CreatedNameContext(org.apache.groovy.parser.antlr4.GroovyParser.CreatedNameContext) NOT_INSTANCEOF(org.apache.groovy.parser.antlr4.GroovyParser.NOT_INSTANCEOF) IndexPropertyArgsContext(org.apache.groovy.parser.antlr4.GroovyParser.IndexPropertyArgsContext) TypeBoundContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeBoundContext) GT(org.apache.groovy.parser.antlr4.GroovyParser.GT) ParExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.ParExpressionContext) ClosureContext(org.apache.groovy.parser.antlr4.GroovyParser.ClosureContext) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) PackageNode(org.codehaus.groovy.ast.PackageNode) ModifierNode(org.codehaus.groovy.ast.ModifierNode) AnnotatedNodeUtils(org.apache.groovy.ast.tools.AnnotatedNodeUtils) ConditionalStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.ConditionalStatementContext) EnhancedArgumentListElementContext(org.apache.groovy.parser.antlr4.GroovyParser.EnhancedArgumentListElementContext) AssertStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.AssertStatementContext) ClassHelper.isPrimitiveVoid(org.codehaus.groovy.ast.ClassHelper.isPrimitiveVoid) NON_SEALED(org.apache.groovy.parser.antlr4.GroovyParser.NON_SEALED) GeneralUtils.callX(org.codehaus.groovy.ast.tools.GeneralUtils.callX) TerminalNode(org.antlr.v4.runtime.tree.TerminalNode) PositionConfigureUtils.configureAST(org.apache.groovy.parser.antlr4.util.PositionConfigureUtils.configureAST) SwitchExpressionContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchExpressionContext) CompilationFailedException(org.codehaus.groovy.control.CompilationFailedException) AnnotationsOptContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotationsOptContext) CastExpression(org.codehaus.groovy.ast.expr.CastExpression) ParserRuleContext(org.antlr.v4.runtime.ParserRuleContext) RelationalExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.RelationalExprAltContext) BooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression) BlockStatementsOptContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockStatementsOptContext) ImportDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.ImportDeclarationContext) ThrowStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ThrowStmtAltContext) FieldDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.FieldDeclarationContext) FinallyBlockContext(org.apache.groovy.parser.antlr4.GroovyParser.FinallyBlockContext) StandardLambdaParametersContext(org.apache.groovy.parser.antlr4.GroovyParser.StandardLambdaParametersContext) LambdaExpression(org.codehaus.groovy.ast.expr.LambdaExpression) LoopStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LoopStmtAltContext) WhileStatement(org.codehaus.groovy.ast.stmt.WhileStatement) ArrayList(java.util.ArrayList) StringLiteralContext(org.apache.groovy.parser.antlr4.GroovyParser.StringLiteralContext) CharStream(org.antlr.v4.runtime.CharStream) EmptyDimsOptContext(org.apache.groovy.parser.antlr4.GroovyParser.EmptyDimsOptContext) MethodNode(org.codehaus.groovy.ast.MethodNode) NullLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.NullLiteralAltContext) CatchClauseContext(org.apache.groovy.parser.antlr4.GroovyParser.CatchClauseContext) ClassDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassDeclarationContext) ParseTree(org.antlr.v4.runtime.tree.ParseTree) VariableInitializerContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableInitializerContext) MultipleAssignmentExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.MultipleAssignmentExprAltContext) RANGE_EXCLUSIVE_FULL(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_EXCLUSIVE_FULL) Parameter(org.codehaus.groovy.ast.Parameter) VariableInitializersContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableInitializersContext) FloatingPointLiteralAltContext(org.apache.groovy.parser.antlr4.GroovyParser.FloatingPointLiteralAltContext) SwitchExprAltContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchExprAltContext) VAR(org.apache.groovy.parser.antlr4.GroovyParser.VAR) ClassOrInterfaceModifiersContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceModifiersContext) IN(org.apache.groovy.parser.antlr4.GroovyParser.IN) ExpressionListContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionListContext) EmptyStatement(org.codehaus.groovy.ast.stmt.EmptyStatement) TypeDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeDeclarationContext) ElementValuesContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValuesContext) PackageDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.PackageDeclarationContext) GStringExpression(org.codehaus.groovy.ast.expr.GStringExpression) BufferedReader(java.io.BufferedReader) ArrayDeque(java.util.ArrayDeque) DefaultGroovyMethods.last(org.codehaus.groovy.runtime.DefaultGroovyMethods.last) ResourceContext(org.apache.groovy.parser.antlr4.GroovyParser.ResourceContext) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) SAFE_INDEX(org.apache.groovy.parser.antlr4.GroovyParser.SAFE_INDEX) TryCatchStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.TryCatchStatementContext) SynchronizedStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.SynchronizedStmtAltContext) MapEntryListContext(org.apache.groovy.parser.antlr4.GroovyParser.MapEntryListContext) ElementValueContext(org.apache.groovy.parser.antlr4.GroovyParser.ElementValueContext) VariableDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclarationContext) CommonTokenStream(org.antlr.v4.runtime.CommonTokenStream) ClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassNameContext) TypeListContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeListContext) CatchTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.CatchTypeContext) RangeExpression(org.codehaus.groovy.ast.expr.RangeExpression) UnaryNotExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.UnaryNotExprAltContext) GeneralUtils.assignX(org.codehaus.groovy.ast.tools.GeneralUtils.assignX) ModifiersOptContext(org.apache.groovy.parser.antlr4.GroovyParser.ModifiersOptContext) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) VariableModifierContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableModifierContext) SwitchBlockStatementExpressionGroupContext(org.apache.groovy.parser.antlr4.GroovyLangParser.SwitchBlockStatementExpressionGroupContext) PathElementContext(org.apache.groovy.parser.antlr4.GroovyParser.PathElementContext) UnaryAddExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.UnaryAddExprAltContext) TypeNamePairsContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeNamePairsContext) AnnotatedQualifiedClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.AnnotatedQualifiedClassNameContext) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression) AnonymousInnerClassDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.AnonymousInnerClassDeclarationContext) ForInitContext(org.apache.groovy.parser.antlr4.GroovyParser.ForInitContext) VariableModifiersOptContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableModifiersOptContext) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) MultiplicativeExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.MultiplicativeExprAltContext) SyntaxErrorMessage(org.codehaus.groovy.control.messages.SyntaxErrorMessage) AssignmentExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.AssignmentExprAltContext) CatchStatement(org.codehaus.groovy.ast.stmt.CatchStatement) TypeArgumentContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeArgumentContext) VariableDeclaratorsContext(org.apache.groovy.parser.antlr4.GroovyParser.VariableDeclaratorsContext) TypeParameterContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeParameterContext) GroovyBugError(org.codehaus.groovy.GroovyBugError) ReturnStmtAltContext(org.apache.groovy.parser.antlr4.GroovyParser.ReturnStmtAltContext) List(java.util.List) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) TypeParametersContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeParametersContext) ArgumentsContext(org.apache.groovy.parser.antlr4.GroovyParser.ArgumentsContext) BlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement) LE(org.apache.groovy.parser.antlr4.GroovyParser.LE) BlockStatementsContext(org.apache.groovy.parser.antlr4.GroovyParser.BlockStatementsContext) Optional(java.util.Optional) GstringPathContext(org.apache.groovy.parser.antlr4.GroovyParser.GstringPathContext) QualifiedStandardClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedStandardClassNameContext) KeywordsContext(org.apache.groovy.parser.antlr4.GroovyParser.KeywordsContext) AdditiveExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.AdditiveExprAltContext) NodeMetaDataHandler(org.codehaus.groovy.ast.NodeMetaDataHandler) ClassicalForControlContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassicalForControlContext) Statement(org.codehaus.groovy.ast.stmt.Statement) ParseCancellationException(org.antlr.v4.runtime.misc.ParseCancellationException) CodeVisitorSupport(org.codehaus.groovy.ast.CodeVisitorSupport) ElvisOperatorExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression) STATIC(org.apache.groovy.parser.antlr4.GroovyParser.STATIC) LT(org.apache.groovy.parser.antlr4.GroovyParser.LT) Deque(java.util.Deque) ResourceListContext(org.apache.groovy.parser.antlr4.GroovyParser.ResourceListContext) SwitchStatementContext(org.apache.groovy.parser.antlr4.GroovyParser.SwitchStatementContext) SuperPrmrAltContext(org.apache.groovy.parser.antlr4.GroovyParser.SuperPrmrAltContext) EnumHelper(org.codehaus.groovy.antlr.EnumHelper) FormalParametersContext(org.apache.groovy.parser.antlr4.GroovyParser.FormalParametersContext) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) DoWhileStatement(org.codehaus.groovy.ast.stmt.DoWhileStatement) ExpressionListElementContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionListElementContext) LambdaBodyContext(org.apache.groovy.parser.antlr4.GroovyParser.LambdaBodyContext) ContinueStatement(org.codehaus.groovy.ast.stmt.ContinueStatement) QualifiedNameContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedNameContext) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) ResourcesContext(org.apache.groovy.parser.antlr4.GroovyParser.ResourcesContext) YieldStmtAltContext(org.apache.groovy.parser.antlr4.GroovyLangParser.YieldStmtAltContext) ADD(org.apache.groovy.parser.antlr4.GroovyParser.ADD) PostfixExpressionContext(org.apache.groovy.parser.antlr4.GroovyParser.PostfixExpressionContext) Iterator(java.util.Iterator) CASE(org.apache.groovy.parser.antlr4.GroovyParser.CASE) ExpressionInParContext(org.apache.groovy.parser.antlr4.GroovyParser.ExpressionInParContext) DimContext(org.apache.groovy.parser.antlr4.GroovyParser.DimContext) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression) TypeContext(org.apache.groovy.parser.antlr4.GroovyParser.TypeContext) SwitchStatement(org.codehaus.groovy.ast.stmt.SwitchStatement) FormalParameterListContext(org.apache.groovy.parser.antlr4.GroovyParser.FormalParameterListContext) ImportNode(org.codehaus.groovy.ast.ImportNode) QualifiedClassNameContext(org.apache.groovy.parser.antlr4.GroovyParser.QualifiedClassNameContext) LogicalOrExprAltContext(org.apache.groovy.parser.antlr4.GroovyParser.LogicalOrExprAltContext) FieldNode(org.codehaus.groovy.ast.FieldNode) AttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression) RANGE_INCLUSIVE(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_INCLUSIVE) ClassOrInterfaceTypeContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceTypeContext) Tuple.tuple(groovy.lang.Tuple.tuple) RANGE_EXCLUSIVE_LEFT(org.apache.groovy.parser.antlr4.GroovyParser.RANGE_EXCLUSIVE_LEFT) ClassOrInterfaceModifiersOptContext(org.apache.groovy.parser.antlr4.GroovyParser.ClassOrInterfaceModifiersOptContext) MemberDeclarationContext(org.apache.groovy.parser.antlr4.GroovyParser.MemberDeclarationContext) Collections(java.util.Collections) ModifiersContext(org.apache.groovy.parser.antlr4.GroovyParser.ModifiersContext) UnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression) ClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression) ArgumentListExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression) MethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression) TernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression) PropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression) PrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression) PostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression) Expression(org.codehaus.groovy.ast.expr.Expression) UnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression) AnnotationConstantExpression(org.codehaus.groovy.ast.expr.AnnotationConstantExpression) BitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression) MapExpression(org.codehaus.groovy.ast.expr.MapExpression) ConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression) NotExpression(org.codehaus.groovy.ast.expr.NotExpression) EmptyExpression(org.codehaus.groovy.ast.expr.EmptyExpression) ConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression) ClassExpression(org.codehaus.groovy.ast.expr.ClassExpression) TupleExpression(org.codehaus.groovy.ast.expr.TupleExpression) MethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression) MapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression) VariableExpression(org.codehaus.groovy.ast.expr.VariableExpression) CastExpression(org.codehaus.groovy.ast.expr.CastExpression) BooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression) LambdaExpression(org.codehaus.groovy.ast.expr.LambdaExpression) GStringExpression(org.codehaus.groovy.ast.expr.GStringExpression) ListExpression(org.codehaus.groovy.ast.expr.ListExpression) RangeExpression(org.codehaus.groovy.ast.expr.RangeExpression) NamedArgumentListExpression(org.codehaus.groovy.ast.expr.NamedArgumentListExpression) SpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression) ArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression) BinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression) ElvisOperatorExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression) MethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression) SpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) ClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression) AttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression) AssertStatement(org.codehaus.groovy.ast.stmt.AssertStatement) ExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement) BreakStatement(org.codehaus.groovy.ast.stmt.BreakStatement) ReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement) ForStatement(org.codehaus.groovy.ast.stmt.ForStatement) IfStatement(org.codehaus.groovy.ast.stmt.IfStatement) ThrowStatement(org.codehaus.groovy.ast.stmt.ThrowStatement) SynchronizedStatement(org.codehaus.groovy.ast.stmt.SynchronizedStatement) TryCatchStatement(org.codehaus.groovy.ast.stmt.TryCatchStatement) CaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement) WhileStatement(org.codehaus.groovy.ast.stmt.WhileStatement) EmptyStatement(org.codehaus.groovy.ast.stmt.EmptyStatement) CatchStatement(org.codehaus.groovy.ast.stmt.CatchStatement) BlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement) Statement(org.codehaus.groovy.ast.stmt.Statement) DoWhileStatement(org.codehaus.groovy.ast.stmt.DoWhileStatement) ContinueStatement(org.codehaus.groovy.ast.stmt.ContinueStatement) SwitchStatement(org.codehaus.groovy.ast.stmt.SwitchStatement) Tuple2(groovy.lang.Tuple2) CaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement) ArrayList(java.util.ArrayList) Token(org.antlr.v4.runtime.Token) LinkedList(java.util.LinkedList) ArrayList(java.util.ArrayList) List(java.util.List) BlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement)

Example 2 with Tuple2

use of groovy.lang.Tuple2 in project groovy by apache.

the class GenericsUtils method parameterizeSAM.

/**
 * Gets the parameter and return types of the abstract method of SAM.
 *
 * If the abstract method is not parameterized, we will get generics placeholders, e.g. T, U
 * For example, the abstract method of {@link java.util.function.Function} is
 * <pre>
 *      R apply(T t);
 * </pre>
 *
 * We parameterize the above interface as {@code Function<String, Integer>}, then the abstract method will be
 * <pre>
 *      Integer apply(String t);
 * </pre>
 *
 * When we call {@code parameterizeSAM} on the ClassNode {@code Function<String, Integer>},
 * we can get parameter types and return type of the above abstract method,
 * i.e. ClassNode {@code ClassHelper.STRING_TYPE} and {@code ClassHelper.Integer_TYPE}
 *
 * @param samType the class node which contains only one abstract method
 *
 * @since 3.0.0
 */
public static Tuple2<ClassNode[], ClassNode> parameterizeSAM(final ClassNode samType) {
    MethodNode abstractMethod = ClassHelper.findSAM(samType);
    Map<GenericsType, GenericsType> generics = makeDeclaringAndActualGenericsTypeMapOfExactType(abstractMethod.getDeclaringClass(), samType);
    Function<ClassNode, ClassNode> resolver = t -> {
        if (t.isGenericsPlaceHolder()) {
            return findActualTypeByGenericsPlaceholderName(t.getUnresolvedName(), generics);
        }
        return t;
    };
    ClassNode[] parameterTypes = Arrays.stream(abstractMethod.getParameters()).map(Parameter::getType).map(resolver).toArray(ClassNode[]::new);
    ClassNode returnType = resolver.apply(abstractMethod.getReturnType());
    return tuple(parameterTypes, returnType);
}
Also used : Arrays(java.util.Arrays) EvictableCache(org.codehaus.groovy.runtime.memoize.EvictableCache) HashMap(java.util.HashMap) Function(java.util.function.Function) ModuleNode(org.codehaus.groovy.ast.ModuleNode) ResolveVisitor(org.codehaus.groovy.control.ResolveVisitor) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) Tuple2(groovy.lang.Tuple2) MethodNode(org.codehaus.groovy.ast.MethodNode) ExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement) CompilationUnit(org.codehaus.groovy.control.CompilationUnit) Map(java.util.Map) SoftReference(java.lang.ref.SoftReference) LinkedList(java.util.LinkedList) SystemUtil.getSystemPropertySafe(org.apache.groovy.util.SystemUtil.getSystemPropertySafe) Parameter(org.codehaus.groovy.ast.Parameter) SourceUnit(org.codehaus.groovy.control.SourceUnit) ClassNode(org.codehaus.groovy.ast.ClassNode) Predicate(java.util.function.Predicate) ClassHelper(org.codehaus.groovy.ast.ClassHelper) GenericsType(org.codehaus.groovy.ast.GenericsType) Set(java.util.Set) DecompiledClassNode(org.codehaus.groovy.ast.decompiled.DecompiledClassNode) DeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression) IncorrectTypeHintException(groovy.transform.stc.IncorrectTypeHintException) GroovyBugError(org.codehaus.groovy.GroovyBugError) EmptyStatement(org.codehaus.groovy.ast.stmt.EmptyStatement) Objects(java.util.Objects) Consumer(java.util.function.Consumer) ConcurrentSoftCache(org.codehaus.groovy.runtime.memoize.ConcurrentSoftCache) ASTNode(org.codehaus.groovy.ast.ASTNode) List(java.util.List) StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf(org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf) ParserPlugin(org.codehaus.groovy.control.ParserPlugin) DefaultGroovyMethods.plus(org.codehaus.groovy.runtime.DefaultGroovyMethods.plus) Tuple.tuple(groovy.lang.Tuple.tuple) Collections(java.util.Collections) ClassNode(org.codehaus.groovy.ast.ClassNode) DecompiledClassNode(org.codehaus.groovy.ast.decompiled.DecompiledClassNode) MethodNode(org.codehaus.groovy.ast.MethodNode) GenericsType(org.codehaus.groovy.ast.GenericsType) Parameter(org.codehaus.groovy.ast.Parameter)

Example 3 with Tuple2

use of groovy.lang.Tuple2 in project groovy by apache.

the class Node method breadthFirstRest.

private void breadthFirstRest(boolean preorder, int level, Closure c) {
    Stack<Tuple2<Object, Integer>> stack = new Stack<Tuple2<Object, Integer>>();
    List nextLevelChildren = preorder ? getDirectChildren() : DefaultGroovyMethods.reverse(getDirectChildren());
    while (!nextLevelChildren.isEmpty()) {
        List working = new NodeList(nextLevelChildren);
        nextLevelChildren = new NodeList();
        for (Object child : working) {
            if (preorder) {
                callClosureForNode(c, child, level);
            } else {
                stack.push(new Tuple2<Object, Integer>(child, level));
            }
            if (child instanceof Node) {
                Node childNode = (Node) child;
                List children = childNode.getDirectChildren();
                if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String)))
                    nextLevelChildren.addAll(preorder ? children : DefaultGroovyMethods.reverse(children));
            }
        }
        level++;
    }
    while (!stack.isEmpty()) {
        Tuple2<Object, Integer> next = stack.pop();
        callClosureForNode(c, next.getV1(), next.getV2());
    }
}
Also used : BigInteger(java.math.BigInteger) Tuple2(groovy.lang.Tuple2) ArrayList(java.util.ArrayList) List(java.util.List) Stack(java.util.Stack)

Example 4 with Tuple2

use of groovy.lang.Tuple2 in project groovy by apache.

the class ASTTransformationVisitor method visitClass.

/**
 * Main loop entry.
 * <p>
 * First, it delegates to the super visitClass so we can collect the
 * relevant annotations in an AST tree walk.
 * <p>
 * Second, it calls the visit method on the transformation for each relevant
 * annotation found.
 *
 * @param classNode the class to visit
 */
@Override
public void visitClass(ClassNode classNode) {
    // only descend if we have annotations to look for
    Map<Class<? extends ASTTransformation>, Set<ASTNode>> baseTransforms = classNode.getTransforms(phase);
    if (!baseTransforms.isEmpty()) {
        final Map<Class<? extends ASTTransformation>, ASTTransformation> transformInstances = new HashMap<Class<? extends ASTTransformation>, ASTTransformation>();
        for (Class<? extends ASTTransformation> transformClass : baseTransforms.keySet()) {
            try {
                transformInstances.put(transformClass, transformClass.getDeclaredConstructor().newInstance());
            } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
                source.getErrorCollector().addError(new SimpleMessage("Could not instantiate Transformation Processor " + transformClass, // + " declared by " + annotation.getClassNode().getName(),
                source));
            }
        }
        // invert the map, is now one to many
        transforms = new HashMap<ASTNode, List<ASTTransformation>>();
        for (Map.Entry<Class<? extends ASTTransformation>, Set<ASTNode>> entry : baseTransforms.entrySet()) {
            for (ASTNode node : entry.getValue()) {
                List<ASTTransformation> list = transforms.computeIfAbsent(node, k -> new ArrayList<>());
                list.add(transformInstances.get(entry.getKey()));
            }
        }
        targetNodes = new LinkedList<ASTNode[]>();
        // first pass, collect nodes
        super.visitClass(classNode);
        // second pass, call visit on all of the collected nodes
        List<Tuple2<ASTTransformation, ASTNode[]>> tuples = new ArrayList<>();
        for (ASTNode[] node : targetNodes) {
            for (ASTTransformation snt : transforms.get(node[0])) {
                tuples.add(new Tuple2<>(snt, node));
            }
        }
        tuples.sort(priorityComparator);
        for (Tuple2<ASTTransformation, ASTNode[]> tuple : tuples) {
            if (tuple.getV1() instanceof CompilationUnitAware) {
                ((CompilationUnitAware) tuple.getV1()).setCompilationUnit(context.getCompilationUnit());
            }
            tuple.getV1().visit(tuple.getV2(), source);
        }
    }
}
Also used : Set(java.util.Set) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) ASTNode(org.codehaus.groovy.ast.ASTNode) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) CompilationUnitAware(groovy.transform.CompilationUnitAware) SimpleMessage(org.codehaus.groovy.control.messages.SimpleMessage) InvocationTargetException(java.lang.reflect.InvocationTargetException) Tuple2(groovy.lang.Tuple2) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 5 with Tuple2

use of groovy.lang.Tuple2 in project groovy by apache.

the class SmartDocumentFilter method findTokensToRender.

private List<Token> findTokensToRender(List<Token> tokenList) {
    final Tuple2<Integer, Integer> renderRange = getRenderRange();
    if (null != renderRange) {
        long startLine = lineNumber(renderRange.getV1());
        long stopLine = lineNumber(renderRange.getV2());
        // should never happen
        if (startLine < 0 || stopLine < 0)
            return tokenList;
        return tokenList.stream().filter(e -> e.getLine() >= startLine && PositionConfigureUtils.endPosition(e).getV1() <= stopLine).collect(Collectors.toList());
    }
    List<Token> tmpLatestTokenList = filterNewlines(this.latestTokenList);
    int latestTokenListSize = tmpLatestTokenList.size();
    if (0 == latestTokenListSize) {
        return tokenList;
    }
    List<Token> tmpTokenList = filterNewlines(tokenList);
    int tmpTokenListSize = tmpTokenList.size();
    if (0 == tmpTokenListSize) {
        return tokenList;
    }
    int startTokenIndex = 0;
    int minSize = Math.min(tmpTokenListSize, latestTokenListSize);
    for (int i = 0; i < minSize; i++) {
        Token token = tmpTokenList.get(i);
        Token latestToken = tmpLatestTokenList.get(i);
        if (token.getType() == latestToken.getType() && token.getStartIndex() == latestToken.getStartIndex() && token.getStopIndex() == latestToken.getStopIndex()) {
            continue;
        }
        startTokenIndex = i;
        break;
    }
    List<Token> newTokenList = new ReversedList<>(tmpTokenList);
    List<Token> newLatestTokenList = new ReversedList<>(tmpLatestTokenList);
    int stopTokenIndex = tmpTokenListSize;
    Token lastToken = newTokenList.get(0);
    Token lastLatestToken = newLatestTokenList.get(0);
    for (int i = 0; i < minSize; i++) {
        Token token = newTokenList.get(i);
        Token latestToken = newLatestTokenList.get(i);
        if ((token.getType() == latestToken.getType()) && (token.getStartIndex() - lastToken.getStartIndex()) == (latestToken.getStartIndex() - lastLatestToken.getStartIndex()) && ((token.getStopIndex() - lastToken.getStopIndex()) == (latestToken.getStopIndex() - lastLatestToken.getStopIndex()))) {
            continue;
        }
        stopTokenIndex = tmpTokenListSize - i;
        break;
    }
    if (startTokenIndex == stopTokenIndex) {
        return tmpTokenListSize != latestTokenListSize ? tokenList : Collections.emptyList();
    } else if (startTokenIndex < stopTokenIndex) {
        return tmpTokenList.subList(startTokenIndex, stopTokenIndex);
    }
    // should never reach here. If unexpected error occurred, it's better to render all tokens
    return tokenList;
}
Also used : Color(java.awt.Color) THROWS(org.apache.groovy.parser.antlr4.GroovyLexer.THROWS) Arrays(java.util.Arrays) FloatingPointLiteral(org.apache.groovy.parser.antlr4.GroovyLexer.FloatingPointLiteral) BooleanLiteral(org.apache.groovy.parser.antlr4.GroovyLexer.BooleanLiteral) ABSTRACT(org.apache.groovy.parser.antlr4.GroovyLexer.ABSTRACT) STRICTFP(org.apache.groovy.parser.antlr4.GroovyLexer.STRICTFP) Token(org.antlr.v4.runtime.Token) CONST(org.apache.groovy.parser.antlr4.GroovyLexer.CONST) DEF(org.apache.groovy.parser.antlr4.GroovyLexer.DEF) RETURN(org.apache.groovy.parser.antlr4.GroovyLexer.RETURN) DEFAULT(org.apache.groovy.parser.antlr4.GroovyLexer.DEFAULT) CommonTokenStream(org.antlr.v4.runtime.CommonTokenStream) EOF(org.apache.groovy.parser.antlr4.GroovyLexer.EOF) IMPLEMENTS(org.apache.groovy.parser.antlr4.GroovyLexer.IMPLEMENTS) CharStreams(org.antlr.v4.runtime.CharStreams) THROW(org.apache.groovy.parser.antlr4.GroovyLexer.THROW) CASE(org.apache.groovy.parser.antlr4.GroovyLexer.CASE) GStringEnd(org.apache.groovy.parser.antlr4.GroovyLexer.GStringEnd) NATIVE(org.apache.groovy.parser.antlr4.GroovyLexer.NATIVE) ConsoleErrorListener(org.antlr.v4.runtime.ConsoleErrorListener) INSTANCEOF(org.apache.groovy.parser.antlr4.GroovyLexer.INSTANCEOF) SEALED(org.apache.groovy.parser.antlr4.GroovyLexer.SEALED) COMMA(org.apache.groovy.parser.antlr4.GroovyLexer.COMMA) AttributeSet(javax.swing.text.AttributeSet) BuiltInPrimitiveType(org.apache.groovy.parser.antlr4.GroovyLexer.BuiltInPrimitiveType) ELSE(org.apache.groovy.parser.antlr4.GroovyLexer.ELSE) NL(org.apache.groovy.parser.antlr4.GroovyLexer.NL) RECORD(org.apache.groovy.parser.antlr4.GroovyLexer.RECORD) PositionConfigureUtils(org.apache.groovy.parser.antlr4.util.PositionConfigureUtils) CONTINUE(org.apache.groovy.parser.antlr4.GroovyLexer.CONTINUE) FINAL(org.apache.groovy.parser.antlr4.GroovyLexer.FINAL) StringLiteral(org.apache.groovy.parser.antlr4.GroovyLexer.StringLiteral) BadLocationException(javax.swing.text.BadLocationException) Collectors(java.util.stream.Collectors) GOTO(org.apache.groovy.parser.antlr4.GroovyLexer.GOTO) GStringBegin(org.apache.groovy.parser.antlr4.GroovyLexer.GStringBegin) VAR(org.apache.groovy.parser.antlr4.GroovyLexer.VAR) WHILE(org.apache.groovy.parser.antlr4.GroovyLexer.WHILE) List(java.util.List) AS(org.apache.groovy.parser.antlr4.GroovyLexer.AS) NEW(org.apache.groovy.parser.antlr4.GroovyLexer.NEW) YIELD(org.apache.groovy.parser.antlr4.GroovyLexer.YIELD) CATCH(org.apache.groovy.parser.antlr4.GroovyLexer.CATCH) SWITCH(org.apache.groovy.parser.antlr4.GroovyLexer.SWITCH) PUBLIC(org.apache.groovy.parser.antlr4.GroovyLexer.PUBLIC) PACKAGE(org.apache.groovy.parser.antlr4.GroovyLexer.PACKAGE) DefaultStyledDocument(javax.swing.text.DefaultStyledDocument) ENUM(org.apache.groovy.parser.antlr4.GroovyLexer.ENUM) FINALLY(org.apache.groovy.parser.antlr4.GroovyLexer.FINALLY) NOT_IN(org.apache.groovy.parser.antlr4.GroovyLexer.NOT_IN) IN(org.apache.groovy.parser.antlr4.GroovyLexer.IN) StyleConstants(javax.swing.text.StyleConstants) GroovyLangLexer(org.apache.groovy.parser.antlr4.GroovyLangLexer) PROTECTED(org.apache.groovy.parser.antlr4.GroovyLexer.PROTECTED) STATIC(org.apache.groovy.parser.antlr4.GroovyLexer.STATIC) FOR(org.apache.groovy.parser.antlr4.GroovyLexer.FOR) VOLATILE(org.apache.groovy.parser.antlr4.GroovyLexer.VOLATILE) IntegerLiteral(org.apache.groovy.parser.antlr4.GroovyLexer.IntegerLiteral) UNEXPECTED_CHAR(org.apache.groovy.parser.antlr4.GroovyLexer.UNEXPECTED_CHAR) NON_SEALED(org.apache.groovy.parser.antlr4.GroovyLexer.NON_SEALED) Tuple2(groovy.lang.Tuple2) StyleContext(javax.swing.text.StyleContext) TRY(org.apache.groovy.parser.antlr4.GroovyLexer.TRY) CharStream(org.antlr.v4.runtime.CharStream) GroovySyntaxError(org.apache.groovy.parser.antlr4.GroovySyntaxError) SUPER(org.apache.groovy.parser.antlr4.GroovyLexer.SUPER) ASSERT(org.apache.groovy.parser.antlr4.GroovyLexer.ASSERT) NullLiteral(org.apache.groovy.parser.antlr4.GroovyLexer.NullLiteral) StringUtils(org.apache.groovy.parser.antlr4.util.StringUtils) GStringPart(org.apache.groovy.parser.antlr4.GroovyLexer.GStringPart) SEMI(org.apache.groovy.parser.antlr4.GroovyLexer.SEMI) SYNCHRONIZED(org.apache.groovy.parser.antlr4.GroovyLexer.SYNCHRONIZED) IF(org.apache.groovy.parser.antlr4.GroovyLexer.IF) PRIVATE(org.apache.groovy.parser.antlr4.GroovyLexer.PRIVATE) BREAK(org.apache.groovy.parser.antlr4.GroovyLexer.BREAK) TRANSIENT(org.apache.groovy.parser.antlr4.GroovyLexer.TRANSIENT) THREADSAFE(org.apache.groovy.parser.antlr4.GroovyLexer.THREADSAFE) LexerNoViableAltException(org.antlr.v4.runtime.LexerNoViableAltException) IMPORT(org.apache.groovy.parser.antlr4.GroovyLexer.IMPORT) IOException(java.io.IOException) DO(org.apache.groovy.parser.antlr4.GroovyLexer.DO) ReversedList(org.apache.groovy.util.ReversedList) THIS(org.apache.groovy.parser.antlr4.GroovyLexer.THIS) DocumentFilter(javax.swing.text.DocumentFilter) StringReader(java.io.StringReader) Style(javax.swing.text.Style) INTERFACE(org.apache.groovy.parser.antlr4.GroovyLexer.INTERFACE) TRAIT(org.apache.groovy.parser.antlr4.GroovyLexer.TRAIT) VOID(org.apache.groovy.parser.antlr4.GroovyLexer.VOID) EXTENDS(org.apache.groovy.parser.antlr4.GroovyLexer.EXTENDS) PERMITS(org.apache.groovy.parser.antlr4.GroovyLexer.PERMITS) Collections(java.util.Collections) CLASS(org.apache.groovy.parser.antlr4.GroovyLexer.CLASS) NOT_INSTANCEOF(org.apache.groovy.parser.antlr4.GroovyLexer.NOT_INSTANCEOF) Token(org.antlr.v4.runtime.Token) ReversedList(org.apache.groovy.util.ReversedList)

Aggregations

Tuple2 (groovy.lang.Tuple2)9 List (java.util.List)7 LinkedList (java.util.LinkedList)5 ArrayList (java.util.ArrayList)4 Arrays (java.util.Arrays)4 Collections (java.util.Collections)4 LinkedHashMap (java.util.LinkedHashMap)4 Map (java.util.Map)4 Token (org.antlr.v4.runtime.Token)4 ClassNode (org.codehaus.groovy.ast.ClassNode)4 GenericsType (org.codehaus.groovy.ast.GenericsType)4 Tuple.tuple (groovy.lang.Tuple.tuple)3 IOException (java.io.IOException)3 Objects (java.util.Objects)3 Collectors (java.util.stream.Collectors)3 CharStream (org.antlr.v4.runtime.CharStream)3 CharStreams (org.antlr.v4.runtime.CharStreams)3 CommonTokenStream (org.antlr.v4.runtime.CommonTokenStream)3 ASTNode (org.codehaus.groovy.ast.ASTNode)3 Tuple3 (groovy.lang.Tuple3)2