2009-05-16 8 views
6

Estoy construyendo un analizador de Java muy simple, para buscar algunos modelos de uso específicos. Esto de ninguna manera es lex/yacc o cualquier otra forma de intérprete/compilador para los fines de ejecutar el código.Lista simple de todas las clases y métodos estándar de Java

Cuando encuentro una palabra o un conjunto de dos palabras separadas por un punto ("word.word"), me gustaría saber si se trata de una clase (y método) Java estándar, p. "Entero", o algún nombre definido por el usuario. No estoy interesado en si las clases apropiadas fueron incluidas/importadas en el código (es decir, si el código se compila bien), y los casos extremos de clases definidas por el usuario que anulan los nombres de las clases Java estándar tampoco me interesan. En otras palabras: estoy de acuerdo con el falso negativo, solo soy interesante por ser "la mayoría" correcto.

¿Hay un lugar donde podría encontrar una lista simple de todos los nombres de todas las clases y métodos estándar de Java, en el formulario fácilmente guardado en un archivo de texto o base de datos? (J2SE está bien, pero J2EE es mejor). Estoy familiarizado con http://java.sun.com/j2se/, etc., pero parece que necesito una gran cantidad de trabajo manual para extraer todos los nombres de allí. Además, el JDK más reciente no es necesario, puedo vivir con 1.4 o 1.5.

Aclaración: No estoy trabajando en Java sino en Python, por lo que no puedo usar comandos específicos de Java en mi mecanismo de análisis.

Gracias

Respuesta

1

¿Qué hay de malo en la javadoc? El index enumera todas las clases, métodos y variables estáticas. Probablemente puedas grep para paréntesis.

+0

+1 Nada mal :) No estaba familiarizado con esta forma de lista ... ¿Hay una forma similar y sencilla de acceder a la lista de métodos para cada clase (es decir, no la lista presentada que tiene cada una de las clases) –

+0

En esta etapa, lo que haré es usar la lista de clases y simplemente asumir que todo lo que sigue a una clase "real" es un miembro "real". El motivo es que llevará menos tiempo implementarlo. Gracias. –

1

Para obtener todas las clases y métodos que usted puede buscar en el índice en http://java.sun.com/javase/6/docs/api/index-files/index-1.html

Ésta será 10 de clases de miles y método que puede ser abrumador.

Sugiero que utilice el autocompletado en su IDE. Esto le mostrará todas las clases/métodos coincidentes según el contexto. p. Supongamos que tiene una variable

long time = Sistema.

Esto le mostrará todos los métodos de sistema que devuelven un valor de largo, como

mucho tiempo = System.nanoTime();

Incluso si conoce una gran cantidad de métodos/clases, esto puede ahorrarle mucho tipeo.

+0

Gracias, eso contiene mucho trabajo manual (una expresión regular en esa lista es problemática) –

0

Cuando encuentro una palabra o un conjunto de dos palabras separadas por un punto ("word.word"), me gustaría saber si se trata de una clase (y método) Java estándar, p. "Entero", o algún nombre definido por el usuario.

Si eso es lo que está buscando, usted podría hacer sin una lista (limitada) de las clases Java usando una reflexión simple: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

try { 
    Class.forName("word.word"); 
    System.out.println("This is a valid class!"); 
} catch (ClassNotFoundException e) { 
    System.out.println("This is not a valid class."); 
} 

Algo como esto debería ser suficiente para sus propósitos , con el beneficio agregado de no estar limitado a un subconjunto de clases, y extensible por cualquier biblioteca en el classpath.

+0

No dije que estaba trabajando en Java :) Mi código está realmente en Python. –

1

Si solo desea crear una lista de todas las clases en Java y sus métodos (para que pueda llenar una base de datos o un archivo XML), puede escribir un plugin de Eclipse que mire todo el modelo JavaCore y escanea todas sus clases (por ejemplo, buscando todos los subtipos de Object). Luego enumera todos los métodos. Puede hacerlo técnicamente en cualquier biblioteca incluyéndola en su contexto.

+1

Sí, debería ser posible producir prácticamente cualquier salida con Doclets personalizados: http://java.sun.com/javase/6/docs/technotes/guides/javadoc/index.html – McDowell

1

También hay una opción para analizar classlist archivo desde jre/lib o abrir el archivo jsse.jar, una lista de todas las clases existe y haz una lista de ellos en forma de puntos separados por ti mismo.

+0

No entiendo lo que media. ¿Puedes por favor elaborar? –

+0

Hay dos archivos en la carpeta lib de JRE - classlist y jsse.jar. El cebador contiene una lista de todas las clases en la biblioteca, el último es un jar que contiene todas las clases de tiempo de ejecución estándar. Puede usarlos para hacer una lista de clases de biblioteca estándar para usar en su analizador. – macbirdie

Cuestiones relacionadas