0N/A/*
553N/A * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
553N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
553N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
553N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
553N/A * or visit www.oracle.com if you need additional information or have any
553N/A * questions.
0N/A */
0N/A
0N/Apackage com.sun.tools.javac.parser;
0N/A
0N/Aimport java.util.Map;
0N/Aimport java.util.HashMap;
0N/Aimport com.sun.tools.javac.tree.JCTree;
0N/Aimport com.sun.tools.javac.tree.TreeInfo;
0N/A
0N/Aimport static com.sun.tools.javac.tree.JCTree.*;
0N/A
0N/A/**
0N/A * This class is similar to Parser except that it stores ending
0N/A * positions for the tree nodes.
0N/A *
580N/A * <p><b>This is NOT part of any supported API.
0N/A * If you write code that depends on this, you do so at your own risk.
0N/A * This code and its internal interfaces are subject to change or
0N/A * deletion without notice.</b></p>
0N/A */
110N/Apublic class EndPosParser extends JavacParser {
0N/A
110N/A public EndPosParser(ParserFactory fac, Lexer S, boolean keepDocComments, boolean keepLineMap) {
110N/A super(fac, S, keepDocComments, keepLineMap);
0N/A this.S = S;
0N/A endPositions = new HashMap<JCTree,Integer>();
0N/A }
0N/A
0N/A private Lexer S;
0N/A
0N/A /** A hashtable to store ending positions
0N/A * of source ranges indexed by the tree nodes.
0N/A * Defined only if option flag genEndPos is set.
0N/A */
0N/A Map<JCTree, Integer> endPositions;
0N/A
0N/A /** {@inheritDoc} */
0N/A @Override
0N/A protected void storeEnd(JCTree tree, int endpos) {
0N/A int errorEndPos = getErrorEndPos();
0N/A endPositions.put(tree, errorEndPos > endpos ? errorEndPos : endpos);
0N/A }
0N/A
0N/A /** {@inheritDoc} */
0N/A @Override
0N/A protected <T extends JCTree> T to(T t) {
0N/A storeEnd(t, S.endPos());
0N/A return t;
0N/A }
0N/A
0N/A /** {@inheritDoc} */
0N/A @Override
0N/A protected <T extends JCTree> T toP(T t) {
0N/A storeEnd(t, S.prevEndPos());
0N/A return t;
0N/A }
0N/A
0N/A @Override
110N/A public JCCompilationUnit parseCompilationUnit() {
110N/A JCCompilationUnit t = super.parseCompilationUnit();
0N/A t.endPositions = endPositions;
0N/A return t;
0N/A }
0N/A
0N/A /** {@inheritDoc} */
0N/A @Override
0N/A JCExpression parExpression() {
0N/A int pos = S.pos();
0N/A JCExpression t = super.parExpression();
0N/A return toP(F.at(pos).Parens(t));
0N/A }
0N/A
0N/A /** {@inheritDoc} */
0N/A @Override
0N/A public int getEndPos(JCTree tree) {
0N/A return TreeInfo.getEndPos(tree, endPositions);
0N/A }
0N/A
0N/A}