aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_src/proper_source/com/github/javaparser/JavaParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_src/proper_source/com/github/javaparser/JavaParser.java')
-rw-r--r--javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_src/proper_source/com/github/javaparser/JavaParser.java452
1 files changed, 452 insertions, 0 deletions
diff --git a/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_src/proper_source/com/github/javaparser/JavaParser.java b/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_src/proper_source/com/github/javaparser/JavaParser.java
new file mode 100644
index 000000000..431255051
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/test_sourcecode/javaparser_src/proper_source/com/github/javaparser/JavaParser.java
@@ -0,0 +1,452 @@
+/*
+ * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
+ * Copyright (C) 2011, 2013-2015 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+
+package com.github.javaparser;
+
+import static com.github.javaparser.PositionUtils.areInOrder;
+import static com.github.javaparser.PositionUtils.sortByBeginPosition;
+
+import com.github.javaparser.ASTParser;
+import com.github.javaparser.ParseException;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.ImportDeclaration;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.body.BodyDeclaration;
+import com.github.javaparser.ast.comments.Comment;
+import com.github.javaparser.ast.comments.CommentsCollection;
+import com.github.javaparser.ast.comments.CommentsParser;
+import com.github.javaparser.ast.comments.LineComment;
+import com.github.javaparser.ast.expr.AnnotationExpr;
+import com.github.javaparser.ast.expr.Expression;
+import com.github.javaparser.ast.stmt.BlockStmt;
+import com.github.javaparser.ast.stmt.Statement;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+// FIXME this file does not seem to be generated by javacc. Is the doc wrong, or the javacc config?
+/**
+ * <p>
+ * This class was generated automatically by javacc, do not edit.
+ * </p>
+ * <p>
+ * Parse Java 1.5 source code and creates Abstract Syntax Tree classes.
+ * </p>
+ *
+ * @author Júlio Vilmar Gesser
+ */
+public final class JavaParser {
+ private JavaParser() {
+ // hide the constructor
+ }
+
+ private static boolean _doNotAssignCommentsPreceedingEmptyLines = true;
+
+ private static boolean _doNotConsiderAnnotationsAsNodeStartForCodeAttribution = false;
+
+ public static boolean getDoNotConsiderAnnotationsAsNodeStartForCodeAttribution()
+ {
+ return _doNotConsiderAnnotationsAsNodeStartForCodeAttribution;
+ }
+
+ public static void setDoNotConsiderAnnotationsAsNodeStartForCodeAttribution(boolean doNotConsiderAnnotationsAsNodeStartForCodeAttribution) {
+ _doNotConsiderAnnotationsAsNodeStartForCodeAttribution = doNotConsiderAnnotationsAsNodeStartForCodeAttribution;
+ }
+
+ public static boolean getDoNotAssignCommentsPreceedingEmptyLines()
+ {
+ return _doNotAssignCommentsPreceedingEmptyLines;
+ }
+
+ public static void setDoNotAssignCommentsPreceedingEmptyLines(boolean doNotAssignCommentsPreceedingEmptyLines)
+ {
+ _doNotAssignCommentsPreceedingEmptyLines = doNotAssignCommentsPreceedingEmptyLines;
+ }
+
+ public static CompilationUnit parse(final InputStream in,
+ final String encoding) {
+ return parse(in,encoding,true);
+ }
+
+ /**
+ * Parses the Java code contained in the {@link InputStream} and returns a
+ * {@link CompilationUnit} that represents it.
+ *
+ * @param in
+ * {@link InputStream} containing Java source code
+ * @param encoding
+ * encoding of the source code
+ * @return CompilationUnit representing the Java source code
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static CompilationUnit parse(final InputStream in,
+ final String encoding, boolean considerComments) {
+ try {
+ String code = SourcesHelper.streamToString(in, encoding);
+ InputStream in1 = SourcesHelper.stringToStream(code, encoding);
+ CompilationUnit cu = new ASTParser(in1, encoding).CompilationUnit();
+ if (considerComments){
+ insertComments(cu,code);
+ }
+ return cu;
+ } catch (IOException ioe){
+ throw new ParseException(ioe.getMessage());
+ }
+ }
+
+ /**
+ * Parses the Java code contained in the {@link InputStream} and returns a
+ * {@link CompilationUnit} that represents it.
+ *
+ * @param in
+ * {@link InputStream} containing Java source code
+ * @return CompilationUnit representing the Java source code
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static CompilationUnit parse(final InputStream in)
+ {
+ return parse(in, null,true);
+ }
+
+ public static CompilationUnit parse(final File file, final String encoding)
+ throws ParseException, IOException {
+ return parse(file,encoding,true);
+ }
+
+ /**
+ * Parses the Java code contained in a {@link File} and returns a
+ * {@link CompilationUnit} that represents it.
+ *
+ * @param file
+ * {@link File} containing Java source code
+ * @param encoding
+ * encoding of the source code
+ * @return CompilationUnit representing the Java source code
+ * @throws ParseException
+ * if the source code has parser errors
+ * @throws IOException
+ */
+ public static CompilationUnit parse(final File file, final String encoding, boolean considerComments)
+ throws ParseException, IOException {
+ final FileInputStream in = new FileInputStream(file);
+ try {
+ return parse(in, encoding, considerComments);
+ } finally {
+ in.close();
+ }
+ }
+
+ /**
+ * Parses the Java code contained in a {@link File} and returns a
+ * {@link CompilationUnit} that represents it.
+ *
+ * @param file
+ * {@link File} containing Java source code
+ * @return CompilationUnit representing the Java source code
+ * @throws ParseException
+ * if the source code has parser errors
+ * @throws IOException
+ */
+ public static CompilationUnit parse(final File file) throws ParseException,
+ IOException {
+ return parse(file, null,true);
+ }
+
+ public static CompilationUnit parse(final Reader reader, boolean considerComments)
+ {
+ try {
+ String code = SourcesHelper.readerToString(reader);
+ Reader reader1 = SourcesHelper.stringToReader(code);
+ CompilationUnit cu = new ASTParser(reader1).CompilationUnit();
+ if (considerComments){
+ insertComments(cu,code);
+ }
+ return cu;
+ } catch (IOException ioe){
+ throw new ParseException(ioe.getMessage());
+ }
+ }
+
+ /**
+ * Parses the Java block contained in a {@link String} and returns a
+ * {@link BlockStmt} that represents it.
+ *
+ * @param blockStatement
+ * {@link String} containing Java block code
+ * @return BlockStmt representing the Java block
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static BlockStmt parseBlock(final String blockStatement)
+ {
+ StringReader sr = new StringReader(blockStatement);
+ BlockStmt result = new ASTParser(sr).Block();
+ sr.close();
+ return result;
+ }
+
+ /**
+ * Parses the Java statement contained in a {@link String} and returns a
+ * {@link Statement} that represents it.
+ *
+ * @param statement
+ * {@link String} containing Java statement code
+ * @return Statement representing the Java statement
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static Statement parseStatement(final String statement) {
+ StringReader sr = new StringReader(statement);
+ Statement stmt = new ASTParser(sr).Statement();
+ sr.close();
+ return stmt;
+ }
+
+ /**
+ * Parses the Java import contained in a {@link String} and returns a
+ * {@link ImportDeclaration} that represents it.
+ *
+ * @param importDeclaration
+ * {@link String} containing Java import code
+ * @return ImportDeclaration representing the Java import declaration
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static ImportDeclaration parseImport(final String importDeclaration) {
+ StringReader sr = new StringReader(importDeclaration);
+ ImportDeclaration id = new ASTParser(sr).ImportDeclaration();
+ sr.close();
+ return id;
+ }
+
+ /**
+ * Parses the Java expression contained in a {@link String} and returns a
+ * {@link Expression} that represents it.
+ *
+ * @param expression
+ * {@link String} containing Java expression
+ * @return Expression representing the Java expression
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static Expression parseExpression(final String expression) {
+ StringReader sr = new StringReader(expression);
+ Expression e = new ASTParser(sr).Expression();
+ sr.close();
+ return e;
+ }
+
+ /**
+ * Parses the Java annotation contained in a {@link String} and returns a
+ * {@link AnnotationExpr} that represents it.
+ *
+ * @param annotation
+ * {@link String} containing Java annotation
+ * @return AnnotationExpr representing the Java annotation
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static AnnotationExpr parseAnnotation(final String annotation) {
+ StringReader sr = new StringReader(annotation);
+ AnnotationExpr ae = new ASTParser(sr).Annotation();
+ sr.close();
+ return ae;
+ }
+
+ /**
+ * Parses the Java body declaration(e.g fields or methods) contained in a
+ * {@link String} and returns a {@link BodyDeclaration} that represents it.
+ *
+ * @param body
+ * {@link String} containing Java body declaration
+ * @return BodyDeclaration representing the Java annotation
+ * @throws ParseException
+ * if the source code has parser errors
+ */
+ public static BodyDeclaration parseBodyDeclaration(final String body) {
+ StringReader sr = new StringReader(body);
+ BodyDeclaration bd = new ASTParser(sr).AnnotationBodyDeclaration();
+ sr.close();
+ return bd;
+ }
+
+ /**
+ * Comments are attributed to the thing the comment and are removed from
+ * allComments.
+ */
+ private static void insertCommentsInCu(CompilationUnit cu, CommentsCollection commentsCollection){
+ if (commentsCollection.size()==0) return;
+
+ // I should sort all the direct children and the comments, if a comment is the first thing then it
+ // a comment to the CompilationUnit
+ // FIXME if there is no package it could be also a comment to the following class...
+ // so I could use some heuristics in these cases to distinguish the two cases
+
+ List<Comment> comments = commentsCollection.getAll();
+ PositionUtils.sortByBeginPosition(comments);
+ List<Node> children = cu.getChildrenNodes();
+ PositionUtils.sortByBeginPosition(children);
+
+ if (cu.getPackage()!=null && (children.size()==0 || PositionUtils.areInOrder(comments.get(0), children.get(0)))){
+ cu.setComment(comments.get(0));
+ comments.remove(0);
+ }
+
+ insertCommentsInNode(cu,comments);
+ }
+
+ private static boolean attributeLineCommentToNodeOrChild(Node node, LineComment lineComment)
+ {
+ // The node start and end at the same line as the comment,
+ // let's give to it the comment
+ if (node.getBeginLine()==lineComment.getBeginLine() && !node.hasComment())
+ {
+ node.setComment(lineComment);
+ return true;
+ } else {
+ // try with all the children, sorted by reverse position (so the
+ // first one is the nearest to the comment
+ List<Node> children = new LinkedList<Node>();
+ children.addAll(node.getChildrenNodes());
+ PositionUtils.sortByBeginPosition(children);
+ Collections.reverse(children);
+
+ for (Node child : children)
+ {
+ if (attributeLineCommentToNodeOrChild(child, lineComment))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ /**
+ * This method try to attributes the nodes received to child of the node.
+ * It returns the node that were not attributed.
+ */
+ private static void insertCommentsInNode(Node node, List<Comment> commentsToAttribute){
+ if (commentsToAttribute.size()==0) return;
+
+ // the comments can:
+ // 1) Inside one of the child, then it is the child that have to associate them
+ // 2) If they are not inside a child they could be preceeding nothing, a comment or a child
+ // if they preceed a child they are assigned to it, otherweise they remain "orphans"
+
+ List<Node> children = node.getChildrenNodes();
+ PositionUtils.sortByBeginPosition(children);
+
+ for (Node child : children){
+ List<Comment> commentsInsideChild = new LinkedList<Comment>();
+ for (Comment c : commentsToAttribute){
+ if (PositionUtils.nodeContains(child, c, _doNotConsiderAnnotationsAsNodeStartForCodeAttribution)){
+ commentsInsideChild.add(c);
+ }
+ }
+ commentsToAttribute.removeAll(commentsInsideChild);
+ insertCommentsInNode(child,commentsInsideChild);
+ }
+
+ // I can attribute in line comments to elements preceeding them, if there
+ // is something contained in their line
+ List<Comment> attributedComments = new LinkedList<Comment>();
+ for (Comment comment : commentsToAttribute)
+ {
+ if (comment.isLineComment())
+ {
+ for (Node child : children)
+ {
+ if (child.getEndLine()==comment.getBeginLine())
+ {
+ if (attributeLineCommentToNodeOrChild(child, comment.asLineComment()))
+ {
+ attributedComments.add(comment);
+ }
+ }
+ }
+ }
+ }
+
+ // at this point I create an ordered list of all remaining comments and children
+ Comment previousComment = null;
+ attributedComments = new LinkedList<Comment>();
+ List<Node> childrenAndComments = new LinkedList<Node>();
+ childrenAndComments.addAll(children);
+ childrenAndComments.addAll(commentsToAttribute);
+ PositionUtils.sortByBeginPosition(childrenAndComments, _doNotConsiderAnnotationsAsNodeStartForCodeAttribution);
+
+ for (Node thing : childrenAndComments){
+ if (thing instanceof Comment){
+ previousComment = (Comment)thing;
+ if (!previousComment.isOrphan())
+ {
+ previousComment = null;
+ }
+ } else {
+ if (previousComment != null && !thing.hasComment()){
+ if (!_doNotAssignCommentsPreceedingEmptyLines || !thereAreLinesBetween(previousComment, thing)) {
+ thing.setComment(previousComment);
+ attributedComments.add(previousComment);
+ previousComment = null;
+ }
+ }
+ }
+ }
+
+ commentsToAttribute.removeAll(attributedComments);
+
+ // all the remaining are orphan nodes
+ for (Comment c : commentsToAttribute){
+ if (c.isOrphan()) {
+ node.addOrphanComment(c);
+ }
+ }
+ }
+
+ private static boolean thereAreLinesBetween(Node a, Node b)
+ {
+ if (!PositionUtils.areInOrder(a, b))
+ {
+ return thereAreLinesBetween(b, a);
+ }
+ int endOfA = a.getEndLine();
+ return b.getBeginLine()>(a.getEndLine()+1);
+ }
+
+ private static void insertComments(CompilationUnit cu, String code) throws IOException {
+ CommentsParser commentsParser = new CommentsParser();
+ CommentsCollection allComments = commentsParser.parse(code);
+
+ insertCommentsInCu(cu,allComments);
+ }
+
+}