Skip to Main Content

Java APIs

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Com.sun API analysis

bc10ff33-d400-412a-8147-c77b9f9a56f9Aug 19 2015 — edited Aug 19 2015

HI

I have started to create a AST using com.sun. API . i want to parse the java code . i am only interested in one thing from the code is :

Intent intent = new Intent("com.hmkcode.android.ANOTHER_ACTIVITY");


I want to parse this line of code using com.sun API .


i dont know how to parse this . i am only concern with this "com.hmkcode.android.ANOTHER_ACTIVITY" which is in intent method and its a string .


this code line may be inside some eventListener method . but how to do it in com.sun API ???


i am using this code :


/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package parsjava;

/**

*

* @author Adnan

*/

import javax.tools.JavaCompiler;

import javax.tools.JavaFileObject;

import javax.tools.StandardJavaFileManager;

import javax.tools.ToolProvider;

import com.sun.source.tree.ClassTree;

import com.sun.source.tree.CompilationUnitTree;

import com.sun.source.tree.MethodTree;

import com.sun.source.tree.ReturnTree;

import com.sun.source.tree.StatementTree;

import com.sun.source.tree.Tree;

import com.sun.source.util.JavacTask;

import com.sun.source.util.SimpleTreeVisitor;

public class Parsjava {

    public static void main(String[] args) throws Exception {

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

       

        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

       

        Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects("Foo2.java");

       

        JavacTask javac = (JavacTask) compiler.getTask(null, fileManager, null, null, null,fileObjects);

        Iterable<? extends CompilationUnitTree> trees = javac.parse();

        for (CompilationUnitTree tree : trees) {

            tree.accept(new CompilationUnitVisitor(), null);

        }

    }

static class CompilationUnitVisitor extends SimpleTreeVisitor<Void, Void> {

    @Override

    public Void visitCompilationUnit(CompilationUnitTree cut, Void p) {

            System.out.println("Package name: " + cut.getPackageName());

            for (Tree t : cut.getTypeDecls()) {

                if (t instanceof ClassTree) {

                    ClassTree ct = (ClassTree) t;

                    ct.accept(new ClassVisitor(), null);

                }

            }

            return super.visitCompilationUnit(cut, p);

        }

    }

    

    static class ClassVisitor extends SimpleTreeVisitor<Void, Void> {

        @Override

        public Void visitClass(ClassTree ct, Void p) {

            System.out.println("Class name: " + ct.getSimpleName());

            for (Tree t : ct.getMembers()) {

                MethodTree mt = (MethodTree) t;

                mt.accept(new MethodVisitor(), null);

            }

            return super.visitClass(ct, p);

        }

    }

    

    static class MethodVisitor extends SimpleTreeVisitor<Void, Void> {

        @Override

        public Void visitMethod(MethodTree mt, Void p) {

            System.out.println("Method name: " + mt.getName());

            for (StatementTree st : mt.getBody().getStatements()) {

                if (st instanceof ReturnTree) {

                    ReturnTree rt = (ReturnTree) st;

                    rt.accept(new ReturnTreeVisitor(), null);

                }

            }

            return super.visitMethod(mt, p);

        }

    }

    

    static class ReturnTreeVisitor extends SimpleTreeVisitor<Void, Void> {

        @Override

        public Void visitReturn(ReturnTree rt, Void p) {

            System.out.println("Return statement: " + rt.getExpression());

            return super.visitReturn(rt, p);

        }

    }

}

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 16 2015
Added on Aug 19 2015
1 comment
850 views