blob: b0a72a548e65b63d795ae12c580d9811051dda0f [file] [log] [blame] [view]
Nicholas Smith646793d2015-01-20 14:53:07 +00001## Java Parser and Abstract Syntax Tree
matozoid2cab70d2013-09-16 13:31:33 +02002
Danny van Bruggen3ad07502017-03-23 15:24:33 +01003This package contains a Java 1.0 - Java 9 Parser with AST generation and visitor support.
Nicholas Smithcd1296d2015-01-20 14:22:40 +00004
Danny van Bruggen11887502016-12-05 19:27:34 +01005The AST records the source code structure.
6You can analyze source code for any purpose.
7It is possible to change the AST nodes or create new ones to modify the source code.
8
9When you need not only the text from the source code but you also need type information,
10you can use [the Java Symbol Solver project.](https://github.com/javaparser/javasymbolsolver)
matozoid2d4deca2011-10-30 14:35:59 +010011
Nicholas Smithd7c51132015-09-02 13:14:42 +010012[![Maven Central](https://img.shields.io/maven-central/v/com.github.javaparser/javaparser-core.svg)](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.github.javaparser%22%20AND%20a%3A%22javaparser-core%22)
Nicholas Smith2b77f432015-02-23 11:01:28 +000013[![Build Status](https://travis-ci.org/javaparser/javaparser.svg?branch=master)](https://travis-ci.org/javaparser/javaparser)
Nicholas Smithcc80fc12015-08-17 15:15:26 +010014[![Coverage Status](https://coveralls.io/repos/javaparser/javaparser/badge.svg?branch=master&service=github)](https://coveralls.io/github/javaparser/javaparser?branch=master)
Nicholas Smithd6a80982015-08-17 15:25:32 +010015[![Join the chat at https://gitter.im/javaparser/javaparser](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/javaparser/javaparser?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Nicholas Smithcc80fc12015-08-17 15:15:26 +010016
Nicholas Smithcd1296d2015-01-20 14:22:40 +000017## Features
18
19* Light weight
20* Performant
21* Easy to use
22* Modifiable AST
Danny van Bruggen11887502016-12-05 19:27:34 +010023* Code generation
Nicholas Smithcd1296d2015-01-20 14:22:40 +000024* Support of comments
25
26## Dependency Management
27
matozoid3c137e92016-04-06 19:37:37 +020028The project binaries are available in Maven Central. Just add the following to your maven configuration or tailor to your own dependency management system.
Federico Tomassetticf8d7b12014-07-30 19:00:26 +010029
Danny van Bruggeneb248962017-01-11 15:00:00 +010030[Please refer to the Migration Guide when upgrading from 2.5.1](https://github.com/javaparser/javaparser/wiki/Migration-Guide)
Parth Mehrotra112f4592017-07-10 13:47:53 -040031
32For Maven:
33
Danny van Bruggen11887502016-12-05 19:27:34 +010034```xml
35<dependency>
36 <groupId>com.github.javaparser</groupId>
37 <artifactId>javaparser-core</artifactId>
Danny van Bruggen969b7f62017-07-10 21:03:41 +020038 <version>3.2.11</version>
Danny van Bruggen3588d262017-02-19 23:00:47 +010039</dependency>
40```
41
Parth Mehrotra112f4592017-07-10 13:47:53 -040042For Gradle:
43
44```
Danny van Bruggen969b7f62017-07-10 21:03:41 +020045compile 'com.github.javaparser:javaparser-core:3.2.11'
Parth Mehrotra112f4592017-07-10 13:47:53 -040046```
47
Nicholas Smithcd1296d2015-01-20 14:22:40 +000048## How To Compile Sources
Nicholas Smith15a23ae2015-01-14 10:27:51 +000049
Danny van Bruggend67b5062017-04-16 15:07:23 +020050If you checked out the project from GitHub you can build the project with maven using:
Federico Tomassetticf8d7b12014-07-30 19:00:26 +010051
Federico Tomassetti2051f042014-07-30 19:01:19 +010052```
Federico Tomassetticf8d7b12014-07-30 19:00:26 +010053mvn clean install
Federico Tomassetti2051f042014-07-30 19:01:19 +010054```
Federico Tomassetticf8d7b12014-07-30 19:00:26 +010055
Danny van Bruggen11887502016-12-05 19:27:34 +010056If you checkout the sources and want to view the project in an IDE, it is best to first generate some of the source files; otherwise you will get many compilation complaints in the IDE. (mvn clean install already does this for you.)
Nicholas Smithcd1296d2015-01-20 14:22:40 +000057
58```
59mvn javacc:javacc
60```
61
Danny van Bruggen45f83182017-07-10 20:15:11 +020062If you modify the code of the AST nodes, specifically if you add or remove fields or node classes,
Danny van Bruggen969b7f62017-07-10 21:03:41 +020063the code generators will update a lot of code for you.
Danny van Bruggen45f83182017-07-10 20:15:11 +020064The `run_metamodel_generator.sh` script will rebuild the metamodel,
65which is used by the code generators which are run by `run_core_generators.sh`
66Make sure that `javaparser-core` at least compiles before you run these.
67
Nicholas Smithcd1296d2015-01-20 14:22:40 +000068## Manual
69
70Examples of how to use the library can be found on the [Manual](https://github.com/javaparser/javaparser/wiki/Manual) page of the wiki
71
Nicholas Smith26c753d2015-01-14 10:02:55 +000072## Troubleshooting
73
Danny van Bruggen11887502016-12-05 19:27:34 +010074First try the [wiki](https://github.com/javaparser/javaparser/wiki).
Nicholas Smith26c753d2015-01-14 10:02:55 +000075
Danny van Bruggen11887502016-12-05 19:27:34 +010076Didn't find an answer? Try [searching for existing issues](https://github.com/javaparser/javaparser/issues?utf8=%E2%9C%93&q=is%3Aissue%20)
77
78Still nothing? [Open an issue](https://github.com/javaparser/javaparser/issues/new) or [come chat on Gitter](https://gitter.im/javaparser/javaparser)
Federico Tomassetticf8d7b12014-07-30 19:00:26 +010079
80## Javadoc
81
Nicholas Smithc86a9ff2015-08-12 13:20:26 +010082The libraries javadoc can be found [here](http://www.javadoc.io/doc/com.github.javaparser/javaparser-core/)
Federico Tomassetticf8d7b12014-07-30 19:00:26 +010083
84## History
85
Didier Villevaloisd5e88432015-03-16 14:23:45 +010086This parser is based on work by Sreenivasa Viswanadha and JĂșlio Vilmar Gesser. The original project, now inactive, was originally hosted at [Google Code](http://code.google.com/p/javaparser/) and supported only parsing Java 1.5.
matozoid2d4deca2011-10-30 14:35:59 +010087
Danny van Bruggen3ad07502017-03-23 15:24:33 +010088The project now supports parsing Java 9 and aims to continue support for features in future versions of the Java language.
Nicholas Smith26c753d2015-01-14 10:02:55 +000089
Federico Tomassetti43e1e412015-08-06 17:31:26 +020090## Related projects
91
Federico Tomassetti212fd3f2016-10-20 21:41:35 +020092[JavaSymbolSolver](https://github.com/javaparser/javasymbolsolver) is a project from the same committers working on JavaParser.
93You can use it to calculate the type of JavaParser expressions and connecting references with their declarations.
94
Federico Tomassetti43e1e412015-08-06 17:31:26 +020095From JavaParser other projects have been derived:
96
97* [Walkmod](http://walkmod.com/): a tool to automatically correct violations of code conventions
Edgar Espina1986cf82016-02-29 09:40:38 -030098* [jooby spec](http://jooby.org/doc/spec): analyze and exports [jooby routes](http://jooby.org) to [raml](http://raml.org) and [Swagger](http://swagger.io)
Federico Tomassetti43e1e412015-08-06 17:31:26 +020099
100## Credits
101
102This project has been maintained thanks to the joint efforts of many contributors: we are extremely grateful to all of them.
103
104In particular we are thankful to the contributions we received by the [Walkmod](http://walkmod.com/) project which permitted to finalize support for Java 8. The author granted us the permissions to release that code also under the Apache License and we have greatly appreciated that.
105
Didier Villevaloisd5e88432015-03-16 14:23:45 +0100106## License
Nicholas Smith26c753d2015-01-14 10:02:55 +0000107
Federico Tomassetti2c7ba122015-08-12 08:06:33 +0200108JavaParser is available either under the terms of the LGPL License or the Apache License. You as the user are entitled to choose the terms under which adopt JavaParser.
Federico Tomassettiee6a48a2015-07-25 14:42:17 +0200109
110For details about the LGPL License please refer to [LICENSE.LGPL](ttps://github.com/javaparser/javaparser/blob/master/LICENSE.LGPL).
111
112For details about the Apache License please refer to [LICENSE.APACHE](ttps://github.com/javaparser/javaparser/blob/master/LICENSE.APACHE).