/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.services.datamodeller.parser;
import java.io.InputStream;
import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.TokenStream;
import org.kie.workbench.common.services.datamodeller.parser.util.ParserUtil;
public class JavaParserFactory {
public static JavaParser newParser( final InputStream inputStream ) throws Exception {
StringBuilder source = ParserUtil.readStringBuilder( inputStream );
return newParser( source.toString( ), JavaParserBase.ParserMode.PARSE_CLASS );
}
public static JavaParser newParser( final String source, final JavaParserBase.ParserMode mode ) {
//TODO check what we gonna do in order to support java code with UTF chars
String unescapedSource = source; //StringEscapeUtils.unescapeJavaUTF( source );
final CharStream charStream = new ANTLRStringStream( unescapedSource );
return newParser( charStream, new StringBuilder( unescapedSource ), mode );
}
public static JavaParser newParser( final String source ) {
return newParser( source, JavaParserBase.ParserMode.PARSE_CLASS );
}
private static JavaParser newParser( final CharStream charStream, StringBuilder source, final JavaParserBase.ParserMode mode ) {
final JavaLexer lexer = new JavaLexer( charStream );
final TokenStream tokenStream = new CommonTokenStream( lexer );
final JavaParser parser = new JavaParser( tokenStream, source, mode );
return parser;
}
}