jjg@111: /* ksrini@1138: * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. jjg@111: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. jjg@111: * jjg@111: * This code is free software; you can redistribute it and/or modify it jjg@111: * under the terms of the GNU General Public License version 2 only, as ohair@554: * published by the Free Software Foundation. Oracle designates this jjg@111: * particular file as subject to the "Classpath" exception as provided ohair@554: * by Oracle in the LICENSE file that accompanied this code. jjg@111: * jjg@111: * This code is distributed in the hope that it will be useful, but WITHOUT jjg@111: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or jjg@111: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License jjg@111: * version 2 for more details (a copy is included in the LICENSE file that jjg@111: * accompanied this code). jjg@111: * jjg@111: * You should have received a copy of the GNU General Public License version jjg@111: * 2 along with this work; if not, write to the Free Software Foundation, jjg@111: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. jjg@111: * ohair@554: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ohair@554: * or visit www.oracle.com if you need additional information or have any ohair@554: * questions. jjg@111: */ jjg@111: jjg@111: package com.sun.tools.javac.parser; jjg@111: jjg@111: import com.sun.tools.javac.code.Source; jjg@111: import com.sun.tools.javac.tree.TreeMaker; jjg@111: import com.sun.tools.javac.util.Context; jjg@111: import com.sun.tools.javac.util.Log; jjg@113: import com.sun.tools.javac.util.Names; jjg@111: import com.sun.tools.javac.util.Options; jjg@111: jjg@111: /** jjg@111: * A factory for creating parsers. jjg@333: * jjg@581: *

This is NOT part of any supported API. jjg@333: * If you write code that depends on this, you do so at your own risk. jjg@333: * This code and its internal interfaces are subject to change or jjg@333: * deletion without notice. jjg@111: */ jjg@111: public class ParserFactory { jjg@111: jjg@111: /** The context key for the parser factory. */ jjg@111: protected static final Context.Key parserFactoryKey = new Context.Key(); jjg@111: jjg@111: public static ParserFactory instance(Context context) { jjg@111: ParserFactory instance = context.get(parserFactoryKey); jjg@111: if (instance == null) { jjg@111: instance = new ParserFactory(context); jjg@111: } jjg@111: return instance; jjg@111: } jjg@111: jjg@111: final TreeMaker F; jjg@111: final Log log; mcimadamore@1113: final Tokens tokens; jjg@111: final Source source; jjg@113: final Names names; jjg@111: final Options options; jjg@695: final ScannerFactory scannerFactory; jjg@111: jjg@111: protected ParserFactory(Context context) { jjg@111: super(); jjg@111: context.put(parserFactoryKey, this); jjg@111: this.F = TreeMaker.instance(context); jjg@111: this.log = Log.instance(context); jjg@113: this.names = Names.instance(context); mcimadamore@1113: this.tokens = Tokens.instance(context); jjg@111: this.source = Source.instance(context); jjg@111: this.options = Options.instance(context); jjg@695: this.scannerFactory = ScannerFactory.instance(context); jjg@111: } jjg@111: jjg@111: public Parser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap) { jjg@695: Lexer lexer = scannerFactory.newScanner(input, keepDocComments); ksrini@1138: return new JavacParser(this, lexer, keepDocComments, keepLineMap, keepEndPos); jjg@111: } jjg@111: }