Merge branch 'master' into wiki_samples_test
diff --git a/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java b/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java
index 383b2f3..dff98ef 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/JavaParser.java
@@ -160,6 +160,11 @@
return parse(file, Charset.defaultCharset().name(),true);
}
+ public static CompilationUnit parse(final Reader reader)
+ throws ParseException {
+ return parse(reader, true);
+ }
+
public static CompilationUnit parse(final Reader reader, boolean considerComments)
throws ParseException {
try {
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/ChangingMethodsFromAClassWithAVisitorTest.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/ChangingMethodsFromAClassWithAVisitorTest.java
new file mode 100644
index 0000000..dd2d08a
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/ChangingMethodsFromAClassWithAVisitorTest.java
@@ -0,0 +1,12 @@
+package com.github.javaparser.junit;
+
+import org.junit.Test;
+
+public class ChangingMethodsFromAClassWithAVisitorTest {
+ @Test
+ public void printingTheCompilationUnitToSystemOutput() throws Exception {
+ try (TestFileToken f = new TestFileToken("test.java")) {
+ MethodChanger_1.main(new String[]{});
+ }
+ }
+}
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/ChangingMethodsFromAClassWithoutAVisitorTest.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/ChangingMethodsFromAClassWithoutAVisitorTest.java
new file mode 100644
index 0000000..0ef2e6f
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/ChangingMethodsFromAClassWithoutAVisitorTest.java
@@ -0,0 +1,12 @@
+package com.github.javaparser.junit;
+
+import org.junit.Test;
+
+public class ChangingMethodsFromAClassWithoutAVisitorTest {
+ @Test
+ public void printingTheCompilationUnitToSystemOutput() throws Exception {
+ try (TestFileToken f = new TestFileToken("test.java")) {
+ MethodChanger_2.main(new String[]{});
+ }
+ }
+}
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/ClassCreator.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/ClassCreator.java
new file mode 100644
index 0000000..01fb0f4
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/ClassCreator.java
@@ -0,0 +1,61 @@
+package com.github.javaparser.junit;
+
+import com.github.javaparser.ASTHelper;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.PackageDeclaration;
+import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.ModifierSet;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.expr.FieldAccessExpr;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.expr.StringLiteralExpr;
+import com.github.javaparser.ast.stmt.BlockStmt;
+
+public class ClassCreator {
+
+ public static void main(String[] args) throws Exception {
+ // creates the compilation unit
+ CompilationUnit cu = createCU();
+
+ // prints the created compilation unit
+ System.out.println(cu.toString());
+ }
+
+ /**
+ * creates the compilation unit
+ */
+ private static CompilationUnit createCU() {
+ CompilationUnit cu = new CompilationUnit();
+ // set the package
+ cu.setPackage(new PackageDeclaration(ASTHelper.createNameExpr("java.parser.test")));
+
+ // create the type declaration
+ ClassOrInterfaceDeclaration type = new ClassOrInterfaceDeclaration(ModifierSet.PUBLIC, false, "GeneratedClass");
+ ASTHelper.addTypeDeclaration(cu, type);
+
+ // create a method
+ MethodDeclaration method = new MethodDeclaration(ModifierSet.PUBLIC, ASTHelper.VOID_TYPE, "main");
+ method.setModifiers(ModifierSet.addModifier(method.getModifiers(), ModifierSet.STATIC));
+ ASTHelper.addMember(type, method);
+
+ // add a parameter to the method
+ Parameter param = ASTHelper.createParameter(ASTHelper.createReferenceType("String", 0), "args");
+ param.setVarArgs(true);
+ ASTHelper.addParameter(method, param);
+
+ // add a body to the method
+ BlockStmt block = new BlockStmt();
+ method.setBody(block);
+
+ // add a statement do the method body
+ NameExpr clazz = new NameExpr("System");
+ FieldAccessExpr field = new FieldAccessExpr(clazz, "out");
+ MethodCallExpr call = new MethodCallExpr(field, "println");
+ ASTHelper.addArgument(call, new StringLiteralExpr("Hello World!"));
+ ASTHelper.addStmt(block, call);
+
+ return cu;
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/CreatingACompilationUnitFromScratch.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/CreatingACompilationUnitFromScratch.java
new file mode 100644
index 0000000..5fc6723
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/CreatingACompilationUnitFromScratch.java
@@ -0,0 +1,10 @@
+package com.github.javaparser.junit;
+
+import org.junit.Test;
+
+public class CreatingACompilationUnitFromScratch {
+ @Test
+ public void printingTheCompilationUnitToSystemOutput() throws Exception {
+ ClassCreator.main(new String[]{});
+ }
+}
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/CuPrinter.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/CuPrinter.java
new file mode 100644
index 0000000..20cc4f6
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/CuPrinter.java
@@ -0,0 +1,25 @@
+package com.github.javaparser.junit;
+
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+
+import java.io.FileInputStream;
+
+public class CuPrinter {
+
+ public static void main(String[] args) throws Exception {
+ // creates an input stream for the file to be parsed
+ FileInputStream in = new FileInputStream("test.java");
+
+ CompilationUnit cu;
+ try {
+ // parse the file
+ cu = JavaParser.parse(in);
+ } finally {
+ in.close();
+ }
+
+ // prints the resulting compilation unit to default system output
+ System.out.println(cu.toString());
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodChanger_1.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodChanger_1.java
new file mode 100644
index 0000000..98be6aa
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodChanger_1.java
@@ -0,0 +1,50 @@
+package com.github.javaparser.junit;
+
+import com.github.javaparser.ASTHelper;
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
+
+import java.io.FileInputStream;
+
+public class MethodChanger_1 {
+
+ public static void main(String[] args) throws Exception {
+ // creates an input stream for the file to be parsed
+ FileInputStream in = new FileInputStream("test.java");
+
+ CompilationUnit cu;
+ try {
+ // parse the file
+ cu = JavaParser.parse(in);
+ } finally {
+ in.close();
+ }
+
+ // visit and change the methods names and parameters
+ new MethodChangerVisitor().visit(cu, null);
+
+ // prints the changed compilation unit
+ System.out.println(cu.toString());
+ }
+
+ /**
+ * Simple visitor implementation for visiting MethodDeclaration nodes.
+ */
+ private static class MethodChangerVisitor extends VoidVisitorAdapter {
+
+ @Override
+ public void visit(MethodDeclaration n, Object arg) {
+ // change the name of the method to upper case
+ n.setName(n.getName().toUpperCase());
+
+ // create the new parameter
+ Parameter newArg = ASTHelper.createParameter(ASTHelper.INT_TYPE, "value");
+
+ // add the parameter to the method
+ ASTHelper.addParameter(n, newArg);
+ }
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodChanger_2.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodChanger_2.java
new file mode 100644
index 0000000..07c9737
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodChanger_2.java
@@ -0,0 +1,58 @@
+package com.github.javaparser.junit;
+
+import com.github.javaparser.ASTHelper;
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.body.BodyDeclaration;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.body.TypeDeclaration;
+
+import java.io.FileInputStream;
+import java.util.List;
+
+public class MethodChanger_2 {
+
+ public static void main(String[] args) throws Exception {
+ // creates an input stream for the file to be parsed
+ FileInputStream in = new FileInputStream("test.java");
+
+ CompilationUnit cu;
+ try {
+ // parse the file
+ cu = JavaParser.parse(in);
+ } finally {
+ in.close();
+ }
+
+ // change the methods names and parameters
+ changeMethods(cu);
+
+ // prints the changed compilation unit
+ System.out.println(cu.toString());
+ }
+
+ private static void changeMethods(CompilationUnit cu) {
+ List<TypeDeclaration> types = cu.getTypes();
+ for (TypeDeclaration type : types) {
+ List<BodyDeclaration> members = type.getMembers();
+ for (BodyDeclaration member : members) {
+ if (member instanceof MethodDeclaration) {
+ MethodDeclaration method = (MethodDeclaration) member;
+ changeMethod(method);
+ }
+ }
+ }
+ }
+
+ private static void changeMethod(MethodDeclaration n) {
+ // change the name of the method to upper case
+ n.setName(n.getName().toUpperCase());
+
+ // create the new parameter
+ Parameter newArg = ASTHelper.createParameter(ASTHelper.INT_TYPE, "value");
+
+ // add the parameter to the method
+ ASTHelper.addParameter(n, newArg);
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodPrinter.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodPrinter.java
new file mode 100644
index 0000000..348a524
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/MethodPrinter.java
@@ -0,0 +1,42 @@
+package com.github.javaparser.junit;
+
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
+
+import java.io.FileInputStream;
+
+public class MethodPrinter {
+
+ public static void main(String[] args) throws Exception {
+ // creates an input stream for the file to be parsed
+ FileInputStream in = new FileInputStream("test.java");
+
+ CompilationUnit cu;
+ try {
+ // parse the file
+ cu = JavaParser.parse(in);
+ } finally {
+ in.close();
+ }
+
+ // visit and print the methods names
+ new MethodVisitor().visit(cu, null);
+ }
+
+ /**
+ * Simple visitor implementation for visiting MethodDeclaration nodes.
+ */
+ private static class MethodVisitor extends VoidVisitorAdapter {
+
+ @Override
+ public void visit(MethodDeclaration n, Object arg) {
+ // here you can access the attributes of the method.
+ // this method will be called for all methods in this
+ // CompilationUnit, including inner class methods
+ System.out.println(n.getName());
+ super.visit(n, arg);
+ }
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/PrintingTheCompilationUnitToSystemOutputTest.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/PrintingTheCompilationUnitToSystemOutputTest.java
new file mode 100644
index 0000000..414975c
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/PrintingTheCompilationUnitToSystemOutputTest.java
@@ -0,0 +1,13 @@
+package com.github.javaparser.junit;
+
+import org.junit.Test;
+
+public class PrintingTheCompilationUnitToSystemOutputTest {
+ @Test
+ public void printingTheCompilationUnitToSystemOutput() throws Exception {
+ try (TestFileToken f = new TestFileToken("test.java")) {
+ CuPrinter.main(new String[]{});
+ }
+ }
+
+}
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/TestFileToken.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/TestFileToken.java
new file mode 100644
index 0000000..e3726ab
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/TestFileToken.java
@@ -0,0 +1,40 @@
+package com.github.javaparser.junit;
+
+import org.apache.commons.io.IOUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Creates a temporary test file that a sample can use. This way we don't have to rewrite the samples to fit them into
+ * these tests.
+ */
+public class TestFileToken implements AutoCloseable {
+ private final String filename;
+
+ public TestFileToken(String filename) {
+ this.filename = filename;
+ try {
+ try (InputStream i = getClass().getResourceAsStream("TestFile.java"); OutputStream o = new FileOutputStream(filename)) {
+ assertNotNull(i);
+ IOUtils.copy(i, o);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Override
+ public void close() {
+ boolean deleted = new File(filename).delete();
+ assertTrue(deleted);
+ }
+}
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/VisitingClassMethodsTest.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/VisitingClassMethodsTest.java
new file mode 100644
index 0000000..0a0751a
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/VisitingClassMethodsTest.java
@@ -0,0 +1,12 @@
+package com.github.javaparser.junit;
+
+import org.junit.Test;
+
+public class VisitingClassMethodsTest {
+ @Test
+ public void testCode() throws Exception {
+ try (TestFileToken f = new TestFileToken("test.java")) {
+ MethodPrinter.main(new String[]{});
+ }
+ }
+}
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/D.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/D.java
new file mode 100644
index 0000000..0852da8
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/D.java
@@ -0,0 +1,9 @@
+package com.github.javaparser.junit.removenode;
+
+public class D {
+
+ public int foo(int e) {
+ int a = 20;
+ return a;
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/GitHubTest.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/GitHubTest.java
new file mode 100644
index 0000000..501ee09
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/GitHubTest.java
@@ -0,0 +1,49 @@
+package com.github.javaparser.junit.removenode;
+
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.visitor.ModifierVisitorAdapter;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+public class GitHubTest {
+
+ public static void main(String... args) throws Exception {
+
+ FileInputStream file1 = new FileInputStream("forGitHubTest.java");
+ CompilationUnit cu = getCompilationUnit(file1);
+ String result = cu.toString();
+ new MyVisitor().visit(cu, null);
+ System.out.println(cu.toString());
+
+ }
+
+ public static CompilationUnit getCompilationUnit(InputStream in) {
+ try {
+ CompilationUnit cu;
+ try {
+ // parse the file
+ cu = JavaParser.parse(in);
+ return cu;
+ } finally {
+ in.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
+
+class MyVisitor extends ModifierVisitorAdapter {
+ @Override
+ public Node visit(VariableDeclarator declarator, Object args) {
+ if (declarator.getId().getName().equals("a") && declarator.getInit().toString().equals("20")) {
+ return null;
+ }
+ return declarator;
+ }
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/GitHubTest_2.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/GitHubTest_2.java
new file mode 100644
index 0000000..f194ee6
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/GitHubTest_2.java
@@ -0,0 +1,71 @@
+package com.github.javaparser.junit.removenode;
+
+import com.github.javaparser.JavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.Node;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.expr.VariableDeclarationExpr;
+import com.github.javaparser.ast.stmt.ExpressionStmt;
+import com.github.javaparser.ast.visitor.ModifierVisitorAdapter;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+public class GitHubTest_2 {
+
+ public static void main(String... args) throws Exception {
+ FileInputStream file1 = new FileInputStream("forGitHubTest.java");
+ CompilationUnit cu = getCompilationUnit(file1);
+ String result = cu.toString();
+ new MyVisitor_2().visit(cu, null);
+ System.out.println(cu.toString());
+ }
+
+ public static CompilationUnit getCompilationUnit(InputStream in) {
+ try {
+ CompilationUnit cu;
+ try {
+ // parse the file
+ cu = JavaParser.parse(in);
+ return cu;
+ } finally {
+ in.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
+
+class MyVisitor_2 extends ModifierVisitorAdapter {
+
+ @Override
+ public Node visit(ExpressionStmt stmt, Object args) {
+ super.visit(stmt, args);
+ if (stmt.getExpression() == null) {
+ return null;
+ }
+ return stmt;
+ }
+
+ @Override
+ public Node visit(VariableDeclarationExpr declarationExpr, Object args) {
+ super.visit(declarationExpr, args);
+
+ if (declarationExpr.getVars().isEmpty()) {
+ return null;
+ }
+
+ return declarationExpr;
+ }
+
+ @Override
+ public Node visit(VariableDeclarator declarator, Object args) {
+ if (declarator.getId().getName().equals("a") && declarator.getInit().toString().equals("20")) {
+ return null;
+ }
+ return declarator;
+ }
+
+}
\ No newline at end of file
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/RemoveDeleteNodeFromAst.java b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/RemoveDeleteNodeFromAst.java
new file mode 100644
index 0000000..1399e74
--- /dev/null
+++ b/javaparser-testing/src/test/java/com/github/javaparser/junit/removenode/RemoveDeleteNodeFromAst.java
@@ -0,0 +1,20 @@
+package com.github.javaparser.junit.removenode;
+
+import com.github.javaparser.junit.TestFileToken;
+import org.junit.Test;
+
+public class RemoveDeleteNodeFromAst {
+ @Test
+ public void testCode1() throws Exception {
+ try (TestFileToken f = new TestFileToken("forGitHubTest.java")) {
+ GitHubTest.main();
+ }
+ }
+
+ @Test
+ public void testCode2() throws Exception {
+ try (TestFileToken f = new TestFileToken("forGitHubTest.java")) {
+ GitHubTest_2.main();
+ }
+ }
+}
diff --git a/javaparser-testing/src/test/resources/com/github/javaparser/junit/TestFile.java b/javaparser-testing/src/test/resources/com/github/javaparser/junit/TestFile.java
new file mode 100644
index 0000000..d89e7e6
--- /dev/null
+++ b/javaparser-testing/src/test/resources/com/github/javaparser/junit/TestFile.java
@@ -0,0 +1,16 @@
+package com.github.javaparser.junit;
+
+public class TestFile {
+ public int foo(int e) {
+ int a = 20;
+ return a;
+ }
+
+ public void abc() {
+
+ }
+
+ public int def() {
+ return 10;
+ }
+}