[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