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 statusbuild 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.ImmutableListLe 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.ImmutableListSi 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.
| Adresse | Désigne |
|---|---|
maven:group:artifact:version | Un artefact Maven résolu. |
maven:group:artifact:version/ | Un type de cet artefact. |
maven:group:artifact:version/ | Une méthode, choisie par types de paramètres. |
maven:group:artifact:version/ | Un champ. |
local:project-name/ | Un 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.Mainreferences 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
| Couche | Informations indexées | Utilisée par |
|---|---|---|
l0 | Entrées et métadonnées de l’artefact | État des artefacts et découverte des recettes. |
l1 | Types, visibilité, supertypes et annotations | Requêtes de types et résolution de classes. |
l2 | Champs, méthodes, constructeurs et signatures | Requêtes de membres et informations de types pour la réécriture. |
l3 | Références sortantes vers types et membres | Requê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.