elide index beantwortet Fragen zum Code in Ihren aufgelösten Maven-Abhängigkeiten und in den kompilierten Java- und
Kotlin-Hauptquellen: welche Abhängigkeit eine Klasse definiert, was eine Klasse referenziert und welche lokalen
Quelldateien einen Typ oder Member verwenden. OpenRewrite nutzt denselben Index für
Abhängigkeitstypen und die Auswahl von Kandidatendateien.
Experimentell in 1.6.0; eine Härtung der Kompatibilität ist für 1.6.1 geplant.
Index bauen
Führen Sie in einem Elide-Projekt mit elide.pkl aus:
elide index build --layers=l1,l2,l3
elide index statusbuild löst Abhängigkeiten auf, baut die angeforderten Abhängigkeitsschichten und kompiliert die Java- und
Kotlin-Hauptquellen, um den lokalen Referenzindex zu aktualisieren. status meldet die verfügbaren Schichten für jedes
aufgelöste Maven-Artefakt; lokale Klassen listet es nicht auf.
Ein Projekt, das Guava verwendet, kann zum Beispiel deklarieren:
amends "elide:project.pkl"
name = "index-demo"
dependencies {
maven {
packages { "com.google.guava:guava:33.4.8-jre" }
}
}Fügen Sie src/main/java/demo/Main.java hinzu:
package demo;
import com.google.common.collect.ImmutableList;
public class Main {
public static void main(String[] args) {
System.out.println(ImmutableList.of());
}
}Nach dem Bauen des Index untersuchen die folgenden Abfragen diese Abhängigkeit und ihre Verwendung im Projekt.
Abhängigkeit finden, die eine Klasse definiert
elide index resolve com.google.common.collect.ImmutableListDas erste Ergebnis ist die Adresse der Klasse im Haupt-Compile-Classpath:
maven:com.google.guava:guava:33.4.8-jre/com.google.common.collect.ImmutableListDefinieren weitere indizierte Artefakte in diesem Classpath dieselbe Klasse, beginnen die folgenden Zeilen mit
shadows und nennen deren Adressen. Die Auflösung folgt der Classpath-Reihenfolge. Fehlt einem früheren Artefakt der
nötige Typindex, meldet der Befehl die fehlende Schicht, statt zu raten, welche Definition gewinnt.
Um Classpath-Einträge im Dateisystem auszugeben, verwenden Sie
elide classpath. Der Codeindex identifiziert Definitionen und
Codereferenzen; den transitiven Abhängigkeitspfad, über den ein Artefakt hinzukam, gibt er nicht aus.
Typen und Member untersuchen
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()'Die Artefaktabfrage listet die indizierten Typen auf. Eine Typabfrage gibt Art, Sichtbarkeit, Supertypen und Archiveintrag aus; eine Memberabfrage gibt Art, Sichtbarkeit, statisch oder Instanz sowie den JVM-Deskriptor des passenden Members aus.
| Adresse | Bezeichnet |
|---|---|
maven:group:artifact:version | Ein aufgelöstes Maven-Artefakt. |
maven:group:artifact:version/ | Einen Typ in diesem Artefakt. |
maven:group:artifact:version/ | Eine Methode, ausgewählt über die Parametertypen. |
maven:group:artifact:version/ | Ein Feld. |
local:project-name/ | Einen kompilierten lokalen Typ, für references. |
Verwenden Sie binäre Typnamen (package.Outer$Inner für eine verschachtelte Klasse). Methodenschlüssel lassen den
Rückgabetyp weg; Konstruktoren verwenden <init>(...). Setzen Sie Adressen mit Klammern, # oder $ in
Anführungszeichen, damit die Shell sie nicht interpretiert.
Ausgehenden Referenzen folgen
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 gibt type- und member-Zeilen für die Typen und Member aus, die diese kompilierte Klasse referenziert.
Es erwartet eine Typadresse, keine Memberadresse. In einer lokalen Adresse ist der Projektname name aus elide.pkl
(oder project, wenn kein Name gesetzt ist).
Lokale Verwendungen finden
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 durchsucht den Referenzindex der kompilierten Hauptquellen und gibt passende Quelldateien relativ zum Paket
aus, etwa demo/Main.java. Ein bloßer Methodenname trifft alle Überladungen; eine Parameterliste wählt eine Signatur.
Die Ergebnisse sind sortiert und ohne Duplikate. Ohne Treffer gibt es keine Ausgabe, und der Befehl endet erfolgreich.
Die Abfrage deckt lokale Java- und Kotlin-Klassen ab, nicht die Aufrufer aller Abhängigkeiten. Beim Kompilieren entfernte Referenzen, ungenutzte Imports, Kommentare und reflektive Verwendungen, die nur über Strings benannt sind, können fehlen. Bauen Sie den Index nach Änderungen an den Quellen neu; eine Abfrage kompiliert sie nicht und aktualisiert keine lokalen Referenzen.
Schichten und Aktualisierung
| Schicht | Indizierte Informationen | Genutzt von |
|---|---|---|
l0 | Artefakteinträge und Metadaten | Artefaktstatus und Rezepterkennung. |
l1 | Typen, Sichtbarkeit, Supertypen und Annotationen | Typabfragen und Klassenauflösung. |
l2 | Felder, Methoden, Konstruktoren und Signaturen | Memberabfragen und Typinformationen für Rewrites. |
l3 | Ausgehende Typ- und Memberreferenzen | references-Abfragen für Abhängigkeiten. |
elide index build verwendet standardmäßig die Abhängigkeitsschichten l0,l1. --layers wählt hinzuzufügende
Schichten; l0 ist immer enthalten, bereits gebaute Schichten bleiben erhalten. Nehmen Sie für Memberabfragen l1,l2
gemeinsam auf. build aktualisiert den lokalen Referenzindex unabhängig von den gewählten Abhängigkeitsschichten.
Abfragen lesen vorhandene Indexdaten. Sie können Projektabhängigkeiten auflösen, bauen aber keine fehlenden Schichten.
get, references und resolve enden mit Exit-Code 1 bei einer unbekannten Adresse oder einem unbekannten Namen.
Fehlt eine benötigte Schicht, enden sie mit Exit-Code 2 und geben einen Build-Befehl aus. Verwenden Sie --offline,
um Downloads von Abhängigkeiten zu verhindern; benötigte Artefakte müssen dann bereits lokal vorliegen.
Die Daten des Abhängigkeitsindex liegen unter .dev/dependencies/index/, nach Artefaktinhalt und Version des
Indexformats geschlüsselt. Lokale Referenzdaten liegen im Build-Verzeichnis des Projekts. Eine normale Kompilierung
fordert nicht alle Indexschichten an; bauen Sie sie explizit, oder lassen Sie einen Nutzer wie OpenRewrite anfordern,
was er braucht.
Umfang und Integration mit Build-Tools
Der Abhängigkeitsindex umfasst aufgelöste Maven-JARs ohne Classifier. npm- und PyPI-Pakete, beliebige JAR-Pfade im
Dateisystem und Ausgaben benachbarter Workspace-Projekte sind keine Eingaben des Abhängigkeitsindex. resolve
durchsucht indizierte Maven-Artefakte im Haupt-Compile-Classpath; lokale Klassen und JDK-Klassen löst es nicht auf.
Lokale Adressen unterstützen derzeit references, während used-by den lokalen Index nach Typ- oder Membernamen
durchsucht.
Die Befehle verwenden eine elide.pkl-Projektdefinition. Wenn Sie den Compiler von Elide über das
Maven-Plugin, das Gradle-Plugin oder die
Bazel-Regeln verwenden, wird dieser Index nicht aus den Abhängigkeitsgraphen dieser Werkzeuge
befüllt. Definieren Sie die passenden Quellen und Abhängigkeiten in einem Elide-Projekt, um diese Abfragen zu nutzen.
Siehe Abhängigkeiten zum Deklarieren von Abhängigkeiten und OpenRewrite zum Anwenden von Rezepten mit dem Index.