Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

120
Vistas
¿Es posible distinguir estáticamente entre nombres completamente calificados y tipos de clases anidadas?

Estoy usando JavaParser (código abierto) para analizar el siguiente código.

 package testfiles.simple.tricky.before; import testfiles.simple.before.InnerClassSample; public class InnerClassReference { public void ref(InnerClassSample.MyInnerClass myInnerClass, java.util.List<Long> list) { int i = 0; } }

Bajo el nodo methodDeclaration llamado ref , obtengo la jerarquía de nodos de parámetros de la siguiente manera:

 // myInnerClass Parameter ClassOrInterfaceType: ClassOrInterfaceType: SimpleName: InnerClassSample SimpleName: MyInnerClass SimpleName: myInnerClass
 // list Parameter ClassOrInterfaceType: ClassOrInterfaceType: ClassOrInterfaceType: SimpleName: java SimpleName: util SimpleName: List SimpleName: list

Necesito encontrar los nombres completos para cada parámetro. Entonces, para myInnerClass obtendría testfiles.simple.before.InnerClassSample$MyInnerClass y para list sería java.util.List .

Entiendo que normalmente uno escribiría List<Long> y colocaría una declaración de importación en lugar de escribir java.util.List<Long> , sin embargo, necesito manejar los casos en los que el FQN está escrito en el parámetro.

Ahora mi pregunta es, ¿hay alguna manera de distinguir estáticamente si un árbol analizado es un tipo para una clase anidada, o es simplemente un nombre completamente calificado de una clase?

He pensado en distinguir comprobando si SimpleName comienza con una letra minúscula (lo que significa que es un nombre de paquete), pero esto es solo una convención, por lo que no podemos asumir con seguridad que un desarrollador siempre comenzaría un nombre de paquete con minúscula o comenzar el nombre de una clase con una letra mayúscula, por lo que no creo que sea una buena manera.

Cualquier idea o idea sobre este asunto sería muy apreciada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Desafortunadamente, no es posible distinguir entre el nombre de una clase de nivel superior y el nombre de una clase anidada solo a partir del nombre calificado, o analizando solo un único archivo fuente. Al menos no en todos los casos.

Para hacer esa distinción, debe realizar un paso de resolución para averiguar a qué hacen referencia los nombres. Esto implica necesariamente varios archivos de origen.

El paso de resolución probablemente implique mirar la información en el AST o los archivos de clase de los elementos a los que se hace referencia.


Nota: incluso si el paso de resolución involucra varios archivos de origen, esa información sigue siendo información estática .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda