[seam-commits] Seam SVN: r13347 - in sandbox/encore/core/src: main/java/org/jboss/encore/grammar/java/ast and 2 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Wed Jul 7 22:52:41 EDT 2010


Author: lincolnthree
Date: 2010-07-07 22:52:40 -0400 (Wed, 07 Jul 2010)
New Revision: 13347

Added:
   sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaClass.java
   sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/TypeDeclarationFinderVisitor.java
   sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaClassTest.java
Removed:
   sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaParser.java
   sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaParserTest.java
Modified:
   sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.java
   sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/MockClassFile.java
Log:
Almost have adding methods working... very ugly code - do not mimic this...

Copied: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaClass.java (from rev 13341, sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaParser.java)
===================================================================
--- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaClass.java	                        (rev 0)
+++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaClass.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -0,0 +1,170 @@
+package org.jboss.encore.grammar.java;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Stack;
+
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.internal.compiler.util.Util;
+import org.eclipse.jface.text.Document;
+import org.eclipse.text.edits.TextEdit;
+import org.eclipse.text.edits.UndoEdit;
+import org.jboss.encore.grammar.java.ast.MethodFinderVisitor;
+import org.jboss.encore.grammar.java.ast.TypeDeclarationFinderVisitor;
+
+public class JavaClass
+{
+   private Document document;
+
+   private final Stack<UndoEdit> undoStack = new Stack<UndoEdit>();
+
+   /**
+    * Parses and process the java source code as a compilation unit and the result it abstract syntax tree (AST)
+    * representation and this action uses the third edition of java Language Specification.
+    * 
+    * @param source - the java source to be parsed (i.e. the char[] contains Java source).
+    * @return CompilationUnit Abstract syntax tree representation of a java source file.
+    */
+   public JavaClass(final InputStream inputStream)
+   {
+      try
+      {
+         char[] source = Util.getInputStreamAsCharArray(inputStream, inputStream.available(), "ISO8859_1");
+         document = new Document(new String(source));
+      }
+      catch (Exception e)
+      {
+         throw new IllegalArgumentException("InputStream must be a parsable java file: ", e);
+      }
+   }
+
+   public JavaClass(final char[] source)
+   {
+      document = new Document(new String(source));
+   }
+
+   public JavaClass(final String source)
+   {
+      this(source.toCharArray());
+   }
+
+   public CompilationUnit parse()
+   {
+      ASTParser parser = ASTParser.newParser(AST.JLS3);
+      parser.setSource(document.get().toCharArray());
+      parser.setResolveBindings(true);
+      parser.setKind(ASTParser.K_COMPILATION_UNIT);
+      CompilationUnit cu = (CompilationUnit) parser.createAST(null);
+      return cu;
+   }
+
+   public Method addMethod()
+   {
+      return new Method(this);
+   }
+
+   @SuppressWarnings("unchecked")
+   public JavaClass addImport(final String className)
+   {
+      CompilationUnit cu = parse();
+      try
+      {
+         AST ast = cu.getAST();
+         cu.recordModifications();
+         // ASTRewrite rewriter = ASTRewrite.create(ast);
+         // ListRewrite lrw = rewriter.getListRewrite(cu, CompilationUnit.IMPORTS_PROPERTY);
+
+         ImportDeclaration id = ast.newImportDeclaration();
+         id.setName(ast.newName(tokenizeClassName(className)));
+         cu.imports().add(id);
+         TextEdit edit = cu.rewrite(document, null);
+         UndoEdit undo = edit.apply(document);
+
+         // lrw.insertLast(id, null);
+         //
+         // TextEdit edits = rewriter.rewriteAST(document, null);
+         // UndoEdit undo = edits.apply(document);
+         undoStack.add(undo);
+
+         return this;
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException("Could not add import: \"" + className +
+                  "\" to compilation unit: \"" + "\"", e);
+      }
+   }
+
+   public void addImport(final Class<?> type)
+   {
+      addImport(type.getName());
+   }
+
+   public void addImports(final Class<?>... types)
+   {
+      for (Class<?> type : types)
+      {
+         addImport(type.getName());
+      }
+   }
+
+   private String[] tokenizeClassName(final String className)
+   {
+      String[] result = className.split("\\.");
+      return result;
+   }
+
+   public Stack<UndoEdit> getUndoStack()
+   {
+      return undoStack;
+   }
+
+   @SuppressWarnings("unchecked")
+   public List<ImportDeclaration> getImports()
+   {
+      CompilationUnit unit = parse();
+      List<ImportDeclaration> imports = unit.imports();
+      return Collections.unmodifiableList(imports);
+   }
+
+   public List<Method> getMethods()
+   {
+      List<Method> result = new ArrayList<Method>();
+
+      CompilationUnit unit = parse();
+      MethodFinderVisitor methodFinderVisitor = new MethodFinderVisitor();
+      unit.accept(methodFinderVisitor);
+
+      List<MethodDeclaration> methods = methodFinderVisitor.getMethods();
+      for (MethodDeclaration methodDeclaration : methods)
+      {
+         result.add(new Method(this, methodDeclaration));
+      }
+      return result;
+   }
+
+   public TypeDeclaration getTypeDeclaration()
+   {
+      CompilationUnit unit = parse();
+      TypeDeclarationFinderVisitor typeDeclarationFinder = new TypeDeclarationFinderVisitor();
+      unit.accept(typeDeclarationFinder);
+      return typeDeclarationFinder.getTypeDeclarations().get(0);
+   }
+
+   public Document getDocument()
+   {
+      return document;
+   }
+
+   public String getName()
+   {
+      return getTypeDeclaration().getName().getIdentifier();
+   }
+}

Deleted: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaParser.java
===================================================================
--- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaParser.java	2010-07-08 02:50:23 UTC (rev 13346)
+++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaParser.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -1,118 +0,0 @@
-package org.jboss.encore.grammar.java;
-
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.List;
-import java.util.Stack;
-
-import org.eclipse.jdt.core.dom.AST;
-import org.eclipse.jdt.core.dom.ASTParser;
-import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.ImportDeclaration;
-import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
-import org.eclipse.jdt.internal.compiler.util.Util;
-import org.eclipse.jface.text.Document;
-import org.eclipse.text.edits.TextEdit;
-import org.eclipse.text.edits.UndoEdit;
-
-public class JavaParser
-{
-   private Document document;
-
-   private final Stack<UndoEdit> undoStack = new Stack<UndoEdit>();
-
-   /**
-    * Parses and process the java source code as a compilation unit and the result it abstract syntax tree (AST)
-    * representation and this action uses the third edition of java Language Specification.
-    * 
-    * @param source - the java source to be parsed (i.e. the char[] contains Java source).
-    * @return CompilationUnit Abstract syntax tree representation of a java source file.
-    */
-   public JavaParser(final InputStream inputStream)
-   {
-      try
-      {
-         char[] source = Util.getInputStreamAsCharArray(inputStream, inputStream.available(), "ISO8859_1");
-         document = new Document(new String(source));
-      }
-      catch (Exception e)
-      {
-         throw new IllegalArgumentException("InputStream must be a parsable java file: ", e);
-      }
-   }
-
-   public JavaParser(final char[] source)
-   {
-      document = new Document(new String(source));
-   }
-
-   public CompilationUnit parse()
-   {
-      ASTParser parser = ASTParser.newParser(AST.JLS3);
-      parser.setSource(document.get().toCharArray());
-      parser.setResolveBindings(true);
-      parser.setKind(ASTParser.K_COMPILATION_UNIT);
-      CompilationUnit cu = (CompilationUnit) parser.createAST(null);
-      return cu;
-   }
-
-   public JavaParser addImport(final String className)
-   {
-      CompilationUnit cu = parse();
-      try
-      {
-         AST ast = cu.getAST();
-         ASTRewrite rewriter = ASTRewrite.create(ast);
-         ListRewrite lrw = rewriter.getListRewrite(cu, CompilationUnit.IMPORTS_PROPERTY);
-
-         ImportDeclaration id = ast.newImportDeclaration();
-         id.setName(ast.newName(tokenizeClassName(className)));
-
-         lrw.insertLast(id, null);
-
-         TextEdit edits = rewriter.rewriteAST(document, null);
-         UndoEdit undo = edits.apply(document);
-         undoStack.add(undo);
-
-         return this;
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException("Could not add import: \"" + className +
-                  "\" to compilation unit: \"" + "\"", e);
-      }
-   }
-
-   public void addImport(final Class<?> type)
-   {
-      addImport(type.getName());
-   }
-
-   public void addImports(final Class<?>... types)
-   {
-      for (Class<?> type : types)
-      {
-         addImport(type.getName());
-      }
-   }
-
-   private String[] tokenizeClassName(final String className)
-   {
-      String[] result = className.split("\\.");
-      return result;
-   }
-
-   public Stack<UndoEdit> getUndoStack()
-   {
-      return undoStack;
-   }
-
-   @SuppressWarnings("unchecked")
-   public List<ImportDeclaration> getImports()
-   {
-      CompilationUnit unit = parse();
-      List<ImportDeclaration> imports = unit.imports();
-      return Collections.unmodifiableList(imports);
-   }
-}

Modified: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.java
===================================================================
--- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.java	2010-07-08 02:50:23 UTC (rev 13346)
+++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -21,11 +21,102 @@
  */
 package org.jboss.encore.grammar.java;
 
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jface.text.Document;
+import org.eclipse.text.edits.TextEdit;
+import org.eclipse.text.edits.UndoEdit;
+
 /**
  * @author <a href="mailto:lincolnbaxter at gmail.com">Lincoln Baxter, III</a>
  * 
  */
 public class Method
 {
+   private final JavaClass javaClass;
+   private final AST ast;
+   private final CompilationUnit cu;
+   private final Document document;
+   private MethodDeclaration method;
+   private String body;
 
+   public Method(final JavaClass javaClass)
+   {
+      this.javaClass = javaClass;
+      cu = javaClass.parse();
+      cu.recordModifications();
+      document = javaClass.getDocument();
+      ast = cu.getAST();
+      method = ast.newMethodDeclaration();
+      method.setConstructor(false);
+   }
+
+   public Method(final JavaClass javaClass, final MethodDeclaration methodDeclaration)
+   {
+      this(javaClass);
+      method = methodDeclaration;
+   }
+
+   public Method name(final String name)
+   {
+      method.setName(ast.newSimpleName(name));
+      return this;
+   }
+
+   public Method constructor(final boolean isConstructor)
+   {
+      method.setConstructor(isConstructor);
+      return this;
+   }
+
+   public Method returnType(final Class<?> type)
+   {
+      return returnType(type.getSimpleName());
+   }
+
+   public Method returnType(final String type)
+   {
+      method.setReturnType2(ast.newSimpleType(ast.newSimpleName(type)));
+      return this;
+   }
+
+   public Method body(final String body)
+   {
+      this.body = body;
+      String stub = "public class Stub { public void method() {" + body + "} }";
+      JavaClass temp = new JavaClass(stub);
+      List<Method> methods = temp.getMethods();
+      Block block = methods.get(0).getMethodDeclaration().getBody();
+      method.setBody(block);
+      return this;
+   }
+
+   private MethodDeclaration getMethodDeclaration()
+   {
+      return method;
+   }
+
+   @SuppressWarnings("unchecked")
+   public JavaClass add()
+   {
+      try
+      {
+         boolean add = javaClass.getTypeDeclaration().bodyDeclarations().add(method);
+
+         TextEdit edit = cu.rewrite(document, null);
+         UndoEdit undo = edit.apply(document);
+
+         javaClass.getUndoStack().add(undo);
+         return javaClass;
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException("Could not add method: \"" +
+                  "\" to compilation unit: \"" + javaClass.getName() + "\"", e);
+      }
+   }
 }

Added: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/TypeDeclarationFinderVisitor.java
===================================================================
--- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/TypeDeclarationFinderVisitor.java	                        (rev 0)
+++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/TypeDeclarationFinderVisitor.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -0,0 +1,26 @@
+package org.jboss.encore.grammar.java.ast;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+
+public class TypeDeclarationFinderVisitor extends ASTVisitor
+{
+   private final List<TypeDeclaration> types = new ArrayList<TypeDeclaration>();
+
+   @Override
+   public boolean visit(final TypeDeclaration node)
+   {
+      types.addAll(Arrays.asList(node));
+      return super.visit(node);
+   }
+
+   public List<TypeDeclaration> getTypeDeclarations()
+   {
+      return types;
+   }
+
+}
\ No newline at end of file

Copied: sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaClassTest.java (from rev 13341, sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaParserTest.java)
===================================================================
--- sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaClassTest.java	                        (rev 0)
+++ sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaClassTest.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -0,0 +1,71 @@
+package org.jboss.encore.grammar.java;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.junit.Before;
+import org.junit.Test;
+
+public class JavaClassTest
+{
+   private InputStream stream;
+
+   @Before
+   public void reset()
+   {
+      stream = JavaClassTest.class
+               .getResourceAsStream("/org/jboss/encore/grammar/java/MockClassFile.java");
+   }
+
+   @Test
+   public void testParse() throws Exception
+   {
+      JavaClass parser = new JavaClass(stream);
+      List<ImportDeclaration> imports = parser.getImports();
+
+      assertEquals(URL.class.getName(), imports.get(0).getName().getFullyQualifiedName());
+   }
+
+   @Test
+   public void testAddImport() throws Exception
+   {
+      JavaClass parser = new JavaClass(stream);
+      parser.addImport(List.class.getName());
+      List<ImportDeclaration> imports = parser.getImports();
+      assertEquals(2, imports.size());
+      assertEquals(URL.class.getName(), imports.get(0).getName().getFullyQualifiedName());
+      assertEquals(List.class.getName(), imports.get(1).getName().getFullyQualifiedName());
+   }
+
+   @Test
+   public void testAddImportsClasses() throws Exception
+   {
+      JavaClass parser = new JavaClass(stream);
+
+      List<ImportDeclaration> imports = parser.getImports();
+      assertEquals(1, imports.size());
+
+      parser.addImports(List.class, Map.class);
+
+      imports = parser.getImports();
+      assertEquals(3, imports.size());
+      assertEquals(URL.class.getName(), imports.get(0).getName().getFullyQualifiedName());
+      assertEquals(List.class.getName(), imports.get(1).getName().getFullyQualifiedName());
+      assertEquals(Map.class.getName(), imports.get(2).getName().getFullyQualifiedName());
+   }
+
+   @Test
+   public void testAddMethod() throws Exception
+   {
+      JavaClass javaClass = new JavaClass(stream);
+      javaClass.addMethod().name("testMethod").returnType(String.class).add();
+      List<Method> methods = javaClass.getMethods();
+      assertEquals(3, methods.size());
+   }
+
+}

Deleted: sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaParserTest.java
===================================================================
--- sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaParserTest.java	2010-07-08 02:50:23 UTC (rev 13346)
+++ sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaParserTest.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -1,62 +0,0 @@
-package org.jboss.encore.grammar.java;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.jdt.core.dom.ImportDeclaration;
-import org.junit.Before;
-import org.junit.Test;
-
-public class JavaParserTest
-{
-   private InputStream stream;
-
-   @Before
-   public void reset()
-   {
-      stream = JavaParserTest.class
-               .getResourceAsStream("/org/jboss/encore/grammar/java/MockClassFile.java");
-   }
-
-   @Test
-   public void testParse() throws Exception
-   {
-      JavaParser parser = new JavaParser(stream);
-      List<ImportDeclaration> imports = parser.getImports();
-
-      assertEquals(URL.class.getName(), imports.get(0).getName().getFullyQualifiedName());
-   }
-
-   @Test
-   public void testAddImport() throws Exception
-   {
-      JavaParser parser = new JavaParser(stream);
-      parser.addImport(List.class.getName());
-      List<ImportDeclaration> imports = parser.getImports();
-      assertEquals(2, imports.size());
-      assertEquals(URL.class.getName(), imports.get(0).getName().getFullyQualifiedName());
-      assertEquals(List.class.getName(), imports.get(1).getName().getFullyQualifiedName());
-   }
-
-   @Test
-   public void testAddImportsClasses() throws Exception
-   {
-      JavaParser parser = new JavaParser(stream);
-
-      List<ImportDeclaration> imports = parser.getImports();
-      assertEquals(1, imports.size());
-
-      parser.addImports(List.class, Map.class);
-
-      imports = parser.getImports();
-      assertEquals(3, imports.size());
-      assertEquals(URL.class.getName(), imports.get(0).getName().getFullyQualifiedName());
-      assertEquals(List.class.getName(), imports.get(1).getName().getFullyQualifiedName());
-      assertEquals(Map.class.getName(), imports.get(2).getName().getFullyQualifiedName());
-   }
-
-}

Modified: sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/MockClassFile.java
===================================================================
--- sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/MockClassFile.java	2010-07-08 02:50:23 UTC (rev 13346)
+++ sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/MockClassFile.java	2010-07-08 02:52:40 UTC (rev 13347)
@@ -11,10 +11,6 @@
    {
    }
    
-   public void method()
-   {
-   }
-   
    public String valueOf(URL url)
    {
       return url.getPath();



More information about the seam-commits mailing list