Package junit.extensions.eclipse.quick

Source Code of junit.extensions.eclipse.quick.LeaningAST

package junit.extensions.eclipse.quick;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.Javadoc;
import org.eclipse.jdt.core.dom.MethodRef;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.TagElement;
import org.junit.Test;

public class LeaningAST {

  @Test
  public void learning() throws Exception {
    String source = "public class TestClass{\n" +
    "  /**\n" +
    "   *  @see test.TestClass\n" +
    "    *  @see org.junit.Test\n" +
    "   */\n" +
    "  @org.junit.Test\n" +
    "  public void do_test() throws Exception{\n" +
    "  }\n" +
    "}\n";
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(source.toCharArray());
    ASTNode node = parser.createAST(null);
//    for( Object obj : node.structuralPropertiesForType()){
//      extractPropertyDescriptor(node, obj);
//    }
    List<String> expected = new ArrayList<String>();
    expected.add("test.TestClass");
    expected.add("org.junit.Test");
    final List<String> actual = new ArrayList<String>();
    ASTVisitor visitor = new ASTVisitor(true){
      public boolean visit(Javadoc doc){
        return super.visit(doc);
      }
      @Override
      public boolean visit(TagElement node) {
        for(Object obj : node.fragments()){
          actual.add(obj.toString());
        }
        System.out.println();
        return super.visit(node);
      }
    };
    node.accept(visitor);
    assertEquals(expected,actual);
    actual.clear();
    source =
    "/**\n" +
    " *  @see test.TestClass\n" +
    " * @see org.junit.Test\n" +
    " */\n" +
    "@org.junit.Test\n" +
    "public void do_test() throws Exception{\n" +
    "}\n";
    parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(source.toCharArray());
    parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
    node = parser.createAST(null);
    node.accept(visitor);
    assertEquals(expected,actual);
  }

 
  @Test
  public void learning_addSource() throws Exception {
    String source = "public class TestClass{\n" +
    "  /**\n" +
    "   *  @see test.TestClass\n" +
    "    *  @see org.junit.Test\n" +
    "   */\n" +
    "  @org.junit.Test\n" +
    "  public void do_test() throws Exception{\n" +
    "  }\n" +
    "}\n";
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(source.toCharArray());
    final ASTNode node = parser.createAST(null);
    ASTVisitor visitor = new ASTVisitor(){
      @SuppressWarnings("unchecked")
      public boolean visit(Javadoc doc){
        AST ast = doc.getAST();
        TagElement tag = ast.newTagElement();
        tag.setTagName(TagElement.TAG_SEE);
        doc.tags().add(tag);
        MethodRef method = ast.newMethodRef();
        tag.fragments().add(method);
        SimpleName name = ast.newSimpleName("Test");
        method.setQualifier(ast.newQualifiedName(ast.newQualifiedName(ast.newName("org"), ast.newSimpleName("junit")), name));
        name = ast.newSimpleName("test");
        method.setName(name);
        return super.visit(doc);
      }
    };
    node.accept(visitor);
    System.out.println(node);
  }

//  private void extractPropertyDescriptor(ASTNode node, Object obj) {
//    if(obj == null) return;
//    System.out.println(String.format("%s %s", obj.getClass().getName(),obj));
//    if (obj instanceof StructuralPropertyDescriptor) {
//      StructuralPropertyDescriptor desc = (StructuralPropertyDescriptor) obj;
//      Object structuralProperty = node.getStructuralProperty(desc);
//      extractPropertyDescriptor(node, structuralProperty);
//      return;
//    }
//    if (obj instanceof List<?>) {
//      List<?> list = (List<?>) obj;
//      for(Object o : list){
//        extractPropertyDescriptor(node, o);
//      }
//      return;
//    }
//    if(obj instanceof TypeDeclaration){
//      TypeDeclaration type = (TypeDeclaration) obj;
////      System.out.println(type.getName().getFullyQualifiedName());
////      System.out.println(String.format("JavaDoc         : %s",type.getJavadoc()));
////      System.out.println(String.format("JavaDocProperty : %s",type.getJavadocProperty()));
//      for (MethodDeclaration method : type.getMethods()) {
//        extractPropertyDescriptor(node, method);
//      }
//    }
//    if(obj instanceof MethodDeclaration){
//      MethodDeclaration method = (MethodDeclaration) obj;
//      System.out.println(method.getName());
//      Javadoc javadoc = method.getJavadoc();
//      List list = javadoc.structuralPropertiesForType();
//      for(Object o : list){
//        extractPropertyDescriptor(javadoc, o);
//      }
////      System.out.println(String.format("JavaDoc         : %s",javadoc));
////      System.out.println(String.format("JavaDocProperty : %s",method.getJavadocProperty()));
//    }
//  }
 
}
TOP

Related Classes of junit.extensions.eclipse.quick.LeaningAST

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.