  Line 73) astParser.ReInit(provider) ==> com.github.javaparser.ASTParser.ReInit(com.github.javaparser.Provider)
  Line 90) getParserForProvider(provider) ==> com.github.javaparser.JavaParser.getParserForProvider(com.github.javaparser.Provider)
  Line 91) start.parse(parser) ==> com.github.javaparser.ParseStart.parse(com.github.javaparser.ASTParser)
  Line 92) astParser.getCommentsCollection() ==> com.github.javaparser.ASTParser.getCommentsCollection()
  Line 93) commentsInserter.insertComments(resultNode, comments.copy().getComments()) ==> com.github.javaparser.CommentsInserter.insertComments(com.github.javaparser.ast.Node, java.util.TreeSet<com.github.javaparser.ast.comments.Comment>)
  Line 93) comments.copy().getComments() ==> com.github.javaparser.ast.comments.CommentsCollection.getComments()
  Line 93) comments.copy() ==> com.github.javaparser.ast.comments.CommentsCollection.copy()
  Line 95) Optional.of(resultNode) ==> java.util.Optional.of(T)
  Line 95) Optional.of(astParser.getTokens()) ==> java.util.Optional.of(T)
  Line 95) astParser.getTokens() ==> com.github.javaparser.ASTParser.getTokens()
  Line 95) Optional.of(astParser.getCommentsCollection()) ==> java.util.Optional.of(T)
  Line 95) astParser.getCommentsCollection() ==> com.github.javaparser.ASTParser.getCommentsCollection()
  Line 102) provider.close() ==> com.github.javaparser.Provider.close()
  Line 119) simplifiedParse(COMPILATION_UNIT, provider(in, encoding)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 119) provider(in, encoding) ==> com.github.javaparser.Providers.provider(java.io.InputStream, java.nio.charset.Charset)
  Line 132) parse(in, UTF8) ==> com.github.javaparser.JavaParser.parse(java.io.InputStream, java.nio.charset.Charset)
  Line 146) simplifiedParse(COMPILATION_UNIT, provider(file, encoding)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 146) provider(file, encoding) ==> com.github.javaparser.Providers.provider(java.io.File, java.nio.charset.Charset)
  Line 160) simplifiedParse(COMPILATION_UNIT, provider(file)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 160) provider(file) ==> com.github.javaparser.Providers.provider(java.io.File)
  Line 174) simplifiedParse(COMPILATION_UNIT, provider(path, encoding)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 174) provider(path, encoding) ==> com.github.javaparser.Providers.provider(java.nio.file.Path, java.nio.charset.Charset)
  Line 188) simplifiedParse(COMPILATION_UNIT, provider(path)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 188) provider(path) ==> com.github.javaparser.Providers.provider(java.nio.file.Path)
  Line 200) simplifiedParse(COMPILATION_UNIT, provider(reader)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 200) provider(reader) ==> com.github.javaparser.Providers.provider(java.io.Reader)
  Line 212) simplifiedParse(COMPILATION_UNIT, provider(code)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 212) provider(code) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 224) simplifiedParse(BLOCK, provider(blockStatement)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 224) provider(blockStatement) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 236) simplifiedParse(STATEMENT, provider(statement)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 236) provider(statement) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 240) new JavaParser(new ParserConfiguration()).parse(context, provider) ==> com.github.javaparser.JavaParser.parse(com.github.javaparser.ParseStart<N>, com.github.javaparser.Provider)
  Line 241) result.isSuccessful() ==> com.github.javaparser.ParseResult.isSuccessful()
  Line 242) result.getResult().get() ==> java.util.Optional.get()
  Line 242) result.getResult() ==> com.github.javaparser.ParseResult.getResult()
  Line 244) result.getProblems() ==> com.github.javaparser.ParseResult.getProblems()
  Line 256) simplifiedParse(IMPORT_DECLARATION, provider(importDeclaration)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 256) provider(importDeclaration) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 268) simplifiedParse(EXPRESSION, provider(expression)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 268) provider(expression) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 280) simplifiedParse(ANNOTATION, provider(annotation)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 280) provider(annotation) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 292) simplifiedParse(ANNOTATION_BODY, provider(body)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 292) provider(body) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 304) simplifiedParse(CLASS_BODY, provider(body)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 304) provider(body) ==> com.github.javaparser.Providers.provider(java.lang.String)
  Line 316) simplifiedParse(INTERFACE_BODY, provider(body)) ==> com.github.javaparser.JavaParser.simplifiedParse(com.github.javaparser.ParseStart<T>, com.github.javaparser.Provider)
  Line 316) provider(body) ==> com.github.javaparser.Providers.provider(java.lang.String)
