Aller au contenu

Index du code des dépendances

Construisez et interrogez l'index du code des dépendances Maven d'Elide : résolvez l'origine des classes, inspectez types et membres, et trouvez les références sortantes ou les appelants locaux en Java et Kotlin.

Sur cette page

elide index répond à des questions sur le code de vos dépendances Maven résolues et des sources principales Java et Kotlin compilées : quelle dépendance définit une classe, ce qu’une classe référence et quels fichiers source locaux utilisent un type ou un membre. OpenRewrite utilise le même index pour les types des dépendances et la sélection des fichiers candidats.

Expérimental en 1.6.0 ; le renforcement de la compatibilité est prévu pour 1.6.1.

Construire l’index

Exécutez depuis un projet Elide doté d’un elide.pkl :

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

build résout les dépendances, construit les couches de dépendances demandées et compile les sources principales Java et Kotlin pour mettre à jour l’index local des références. status indique les couches disponibles pour chaque artefact Maven résolu ; il ne liste pas les classes locales.

Par exemple, un projet qui utilise Guava peut déclarer :

amends "elide:project.pkl"

name = "index-demo"

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

Ajoutez 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());
  }
}

Une fois l’index construit, les requêtes suivantes inspectent cette dépendance et son utilisation dans le projet.

Trouver la dépendance qui définit une classe

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

Le premier résultat est l’adresse de la classe dans le classpath principal de compilation :

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

Si d’autres artefacts indexés de ce classpath définissent la même classe, les lignes suivantes commencent par shadows et nomment ces adresses. La résolution suit l’ordre du classpath. Si un artefact antérieur n’a pas l’index de types requis, la commande signale la couche manquante au lieu de deviner quelle définition l’emporte.

Pour afficher les entrées du classpath dans le système de fichiers, utilisez elide classpath. L’index du code identifie les définitions et les références dans le code ; il n’affiche pas le chemin de dépendances transitives qui a introduit un artefact.

Inspecter types et membres

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 requête sur un artefact liste les types indexés. Une requête sur un type affiche sa nature, sa visibilité, ses supertypes et son entrée d’archive ; une requête sur un membre affiche la nature, la visibilité, le caractère statique ou d’instance et le descripteur JVM du membre correspondant.

AdresseDésigne
maven:group:artifact:versionUn artefact Maven résolu.
maven:group:artifact:version/package.TypeUn type de cet artefact.
maven:group:artifact:version/package.Type#method(java.lang.String,int)Une méthode, choisie par types de paramètres.
maven:group:artifact:version/package.Type#FIELDUn champ.
local:project-name/package.TypeUn type local compilé, pour references.

Utilisez les noms binaires de types (package.Outer$Inner pour une classe imbriquée). Les clés de méthode omettent le type de retour ; les constructeurs utilisent <init>(...). Mettez entre guillemets les adresses contenant des parenthèses, # ou $ pour que le shell ne les interprète pas.

Suivre les références sortantes

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 affiche des lignes type et member pour les types et membres référencés par cette classe compilée. Il prend une adresse de type, pas une adresse de membre. Dans une adresse locale, le nom du projet est name dans elide.pkl (ou project s’il n’est pas nommé).

Trouver les utilisations 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 cherche dans l’index des références des sources principales compilées et affiche les fichiers source correspondants, relatifs au paquet, comme demo/Main.java. Un nom de méthode seul correspond à toutes ses surcharges ; une liste de paramètres sélectionne une signature. Les résultats sont triés et dédupliqués. Sans correspondance, rien n’est affiché et la commande se termine avec succès.

La requête couvre les classes locales Java et Kotlin, pas les appelants de toutes les dépendances. Les références effacées à la compilation, les imports inutilisés, les commentaires et les usages par réflexion nommés uniquement par des chaînes peuvent manquer. Reconstruisez l’index après avoir modifié les sources ; une requête ne les compile pas et ne met pas à jour les références locales.

Couches et mise à jour

CoucheInformations indexéesUtilisée par
l0Entrées et métadonnées de l’artefactÉtat des artefacts et découverte des recettes.
l1Types, visibilité, supertypes et annotationsRequêtes de types et résolution de classes.
l2Champs, méthodes, constructeurs et signaturesRequêtes de membres et informations de types pour la réécriture.
l3Références sortantes vers types et membresRequêtes references sur les dépendances.

elide index build utilise par défaut les couches de dépendances l0,l1. --layers sélectionne les couches à ajouter ; l0 est toujours inclus et les couches déjà construites sont conservées. Incluez l1,l2 ensemble pour les requêtes de membres. build met à jour l’index local des références indépendamment des couches de dépendances sélectionnées.

Les requêtes lisent les données d’index existantes. Elles peuvent résoudre les dépendances du projet, mais ne construisent pas les couches manquantes. get, references et resolve quittent avec 1 pour une adresse ou un nom inconnu. Si une couche requise manque, la commande quitte avec 2 et affiche une commande de build. Utilisez --offline pour empêcher les téléchargements distants de dépendances ; les artefacts requis doivent alors être déjà disponibles localement.

Les données de l’index des dépendances se trouvent sous .dev/dependencies/index/, indexées par contenu d’artefact et version du format d’index. Les données de références locales se trouvent dans le répertoire de build du projet. Une compilation ordinaire ne demande pas toutes les couches d’index ; construisez-les explicitement, ou laissez un consommateur comme OpenRewrite demander ce dont il a besoin.

Portée et intégration aux outils de build

L’index des dépendances couvre les JAR Maven résolus sans classifier. Les paquets npm et PyPI, les chemins arbitraires vers des JAR du système de fichiers et les sorties des projets voisins de l’espace de travail ne sont pas des entrées de l’index des dépendances. resolve cherche dans les artefacts Maven indexés du classpath principal de compilation ; il ne résout ni les classes locales ni les classes du JDK. Les adresses locales prennent actuellement en charge references, tandis que used-by cherche dans l’index local par nom de type ou de membre.

Les commandes utilisent une définition de projet elide.pkl. Utiliser le compilateur d’Elide via le Plugin Maven, le Plugin Gradle ou les règles Bazel ne remplit pas cet index à partir des graphes de dépendances de ces outils. Définissez les sources et dépendances correspondantes dans un projet Elide pour utiliser ces requêtes.

Voir Dépendances pour déclarer des dépendances, et OpenRewrite pour appliquer des recettes avec l’index.

Cette page vous a-t-elle aidé ?