IFields para todas las variables de CompilationUnit

Necesito obtener referencias de IField o IJavaElement para todas las variables en mi código fuente. Uso el complemento, obtengo una ICompilationUnit desde la cual puedo leer todos los objetos de nivel superior usando:

para (IJavaElement i: unit.getTypes () [0] .getChildren ())

o

para (IJavaElement i: unit.getAllTypes ())

¿Cómo puedo acceder a las variables locales? Estaba tratando de analizar ICompilationUnit a CompilationUnit, donde puedo obtener un ASTNode de cada campo , pero luego no puedo transformarlo en un IField . ¿Algunas ideas?

// editar: Por ejemplo: para una clase:

Prueba de clase pública {

int global1; int global2; nulo a () {global1 = 4; int local1; int local2 = 5; }

}

Yo lo llamo

for (IType type: unit.getTypes ()) {System.out.println ("itype" + type); para (IField iField: type.getFields ()) {System.out.println ("iField" + iField); }}

Y la salida es:

itype class Test [en [Copia de trabajo] Test.java [en [en src [en testowy]]]] int global1 int global2 void a () iField int global1 [en Test [en [Copia de trabajo] Test.java [en [ en src [en testowy]]]]] iField int global2 [en Test [en [Copia de trabajo] Test.java [en [en src [en testowy]]]]]

Entonces no se encontraron variables locales ...

// agregado - todavía luchando: en realidad no es el comportamiento que esperaba.

for( IMethod i:unit.getAllTypes()[0].getMethods() )
        {
        System.out.println("index to h:"+h+" type "+i.getSource()+" name: "+i.getElementName());
        h++;
        int o =0;
        for( IJavaElement j: i.getChildren() )
            {
                System.out.println("index to o: "+o+j+" type "+j.getElementType()+" name: "+j.getElementName());
                o++;
            }

        }

Este código esperaba encontrar todos los métodos (que funcionan) y obtener todas las variables locales de los métodos (que no funcionan). Nunca entra en bucle con campos. Imprime la declaración de función correctamente, así que estoy seguro de que ve todas las variables ...

Y en cuanto al uso de INodes, puedo visitar todos los nodos, pero ¿cómo puedo cambiar el tipo de nodo a IField / IJavaElement que necesito?

Gracias :)

Respuesta 1

He estado leyendo muchos tutoriales sobre esto, he podido usar HttpClient para hacer un POST para saltar y recuperar la respuesta, pero solo estaba usando una cadena que se pasaba. Me gustaría, ...

Estoy usando jtidy parser para analizar la página web. Está funcionando, más o menos: InputStream en = nueva URL ("http://www.medicinenet.com/alopecia_areata/article.htm") .openStream (); Documento doc = new Tidy (). ParseDOM (...

Tengo una pregunta. Supongamos que tenemos dos cadenas str1, str2. Las cuerdas pueden ser cualquier cosa. Ahora, necesitamos crear un método que busque str1 para str2 y devuelva el índice no. de la primera ocurrencia ...

Si los objetos que se decoran implementan diferentes combinaciones de otras interfaces, ¿cómo implementa un decorador sin perder los métodos de interfaz adicionales? Por ejemplo, digamos que tenemos el ...