Saltar al contenido

Índice de código de dependencias

Construya y consulte el índice de código de las dependencias Maven de Elide: resuelva el origen de las clases, inspeccione tipos y miembros, y encuentre referencias salientes o llamadores locales en Java y Kotlin.

En esta página

elide index responde preguntas sobre el código de sus dependencias Maven resueltas y de las fuentes principales compiladas de Java y Kotlin: qué dependencia define una clase, a qué hace referencia una clase y qué archivos fuente locales usan un tipo o miembro. OpenRewrite usa el mismo índice para los tipos de las dependencias y la selección de archivos candidatos.

Experimental en 1.6.0; el refuerzo de la compatibilidad está previsto para 1.6.1.

Construir el índice

Ejecute desde un proyecto de Elide con elide.pkl:

elide index build --layers=l1,l2,l3
elide index status

build resuelve las dependencias, construye las capas de dependencias solicitadas y compila las fuentes principales de Java y Kotlin para actualizar el índice de referencias local. status informa de las capas disponibles para cada artefacto Maven resuelto; no lista las clases locales.

Por ejemplo, un proyecto que usa Guava puede declarar:

amends "elide:project.pkl"

name = "index-demo"

dependencies {
  maven {
    packages { "com.google.guava:guava:33.4.8-jre" }
  }
}

Añada src/main/java/demo/Main.java:

package demo;

import com.google.common.collect.ImmutableList;

public class Main {
  public static void main(String[] args) {
    System.out.println(ImmutableList.of());
  }
}

Tras construir el índice, las siguientes consultas inspeccionan esta dependencia y su uso en el proyecto.

Encontrar la dependencia que define una clase

elide index resolve com.google.common.collect.ImmutableList

El primer resultado es la dirección de la clase en el classpath principal de compilación:

maven:com.google.guava:guava:33.4.8-jre/com.google.common.collect.ImmutableList

Si otros artefactos indexados de ese classpath definen la misma clase, las líneas siguientes empiezan por shadows y nombran esas direcciones. La resolución sigue el orden del classpath. Si a un artefacto anterior le falta el índice de tipos necesario, el comando informa de la capa que falta en lugar de adivinar qué definición prevalece.

Para imprimir las entradas del classpath en el sistema de archivos, use elide classpath. El índice de código identifica definiciones y referencias en el código; no imprime la ruta de dependencias transitivas que introdujo un artefacto.

Inspeccionar tipos y miembros

elide index get maven:com.google.guava:guava:33.4.8-jre
elide index get maven:com.google.guava:guava:33.4.8-jre/com.google.common.collect.ImmutableList
elide index get 'maven:com.google.guava:guava:33.4.8-jre/com.google.common.collect.ImmutableList#of()'

La consulta de un artefacto lista los tipos indexados. La de un tipo imprime su categoría, visibilidad, supertipos y entrada en el archivo; la de un miembro imprime la categoría, la visibilidad, si es estático o de instancia y el descriptor JVM del miembro coincidente.

DirecciónIdentifica
maven:group:artifact:versionUn artefacto Maven resuelto.
maven:group:artifact:version/package.TypeUn tipo de ese artefacto.
maven:group:artifact:version/package.Type#method(java.lang.String,int)Un método, seleccionado por tipos de parámetros.
maven:group:artifact:version/package.Type#FIELDUn campo.
local:project-name/package.TypeUn tipo local compilado, para references.

Use nombres binarios de tipo (package.Outer$Inner para una clase anidada). Las claves de método omiten el tipo de retorno; los constructores usan <init>(...). Ponga entre comillas las direcciones con paréntesis, # o $ para que la shell no las interprete.

Seguir las referencias salientes

elide index references maven:com.google.guava:guava:33.4.8-jre/com.google.common.collect.ImmutableList
elide index references local:index-demo/demo.Main

references imprime líneas type y member para los tipos y miembros a los que hace referencia esa clase compilada. Recibe una dirección de tipo, no de miembro. En una dirección local, el nombre del proyecto es name de elide.pkl (o project si no tiene nombre).

Encontrar usos locales

elide index used-by com.google.common.collect.ImmutableList
elide index used-by 'com.google.common.collect.ImmutableList#of'
elide index used-by 'com.google.common.collect.ImmutableList#of()'

used-by busca en el índice de referencias de las fuentes principales compiladas e imprime los archivos fuente coincidentes con rutas relativas al paquete, como demo/Main.java. Un nombre de método sin más coincide con todas sus sobrecargas; una lista de parámetros selecciona una firma. Los resultados se ordenan y se eliminan duplicados. Si no hay coincidencias, no se imprime nada y el comando termina correctamente.

La consulta cubre las clases locales de Java y Kotlin, no los llamadores de todas las dependencias. Pueden faltar las referencias borradas durante la compilación, los imports sin usar, los comentarios y los usos por reflexión nombrados solo mediante cadenas. Reconstruya el índice después de cambiar las fuentes; una consulta no las compila ni actualiza las referencias locales.

Capas y actualización

CapaInformación indexadaUsada por
l0Entradas y metadatos del artefactoEstado de artefactos y descubrimiento de recetas.
l1Tipos, visibilidad, supertipos y anotacionesConsultas de tipos y resolución de clases.
l2Campos, métodos, constructores y firmasConsultas de miembros e información de tipos para la reescritura.
l3Referencias salientes a tipos y miembrosConsultas references de dependencias.

elide index build usa por defecto las capas de dependencias l0,l1. --layers selecciona las capas que se añaden; l0 siempre se incluye y las capas ya construidas se conservan. Incluya l1,l2 juntas para las consultas de miembros. build actualiza el índice de referencias local con independencia de las capas de dependencias seleccionadas.

Las consultas leen los datos de índice existentes. Pueden resolver las dependencias del proyecto, pero no construyen las capas que falten. get, references y resolve salen con 1 ante una dirección o un nombre desconocidos. Si falta una capa necesaria, salen con 2 e imprimen un comando de construcción. Use --offline para evitar descargas remotas de dependencias; los artefactos necesarios deben estar ya disponibles localmente.

Los datos del índice de dependencias se guardan en .dev/dependencies/index/, con clave por contenido del artefacto y versión del formato del índice. Los datos de referencias locales se guardan en el directorio de compilación del proyecto. La compilación ordinaria no solicita todas las capas del índice; constrúyalas explícitamente o deje que un consumidor como OpenRewrite solicite lo que necesite.

Alcance e integración con herramientas de compilación

El índice de dependencias cubre los JAR de Maven resueltos sin clasificadores. Los paquetes de npm y PyPI, las rutas arbitrarias a JAR en el sistema de archivos y las salidas de proyectos hermanos del espacio de trabajo no son entradas del índice de dependencias. resolve busca en los artefactos Maven indexados del classpath principal de compilación; no resuelve clases locales ni clases del JDK. Las direcciones locales admiten por ahora references, mientras que used-by busca en el índice local por nombre de tipo o miembro.

Los comandos usan una definición de proyecto elide.pkl. Usar el compilador de Elide mediante el Plugin de Maven, el Plugin de Gradle o las reglas de Bazel no llena este índice a partir de los grafos de dependencias de esas herramientas. Defina las fuentes y dependencias equivalentes en un proyecto de Elide para usar estas consultas.

Consulte Dependencias para declarar dependencias y OpenRewrite para aplicar recetas con el índice.

¿Te resultó útil esta página?