/ / Warum werden in Klassen aufbewahrte Klassen über einen benutzerdefinierten Klassenpfadcontainer nicht für die Codevervollständigung verfügbar gemacht? - Java, Eclipse, Eclipse-Plugin, Eclipse-Jdt

Warum werden in Klassen aufbewahrte Klassen über einen benutzerdefinierten Klassenpfadcontainer nicht für die Codevervollständigung verfügbar gemacht? - Java, Eclipse, Eclipse-Plugin, Eclipse-Jdt

Was ist erforderlich, um Klassen, die über einen benutzerdefinierten Klassenpfadcontainer bereitgestellt werden, in der Codevervollständigung sichtbar zu machen?

Ich habe erfolgreich einen Brauch implementiertKlassenpfad-Container, der einem Projekt Bibliotheken hinzufügt. Es fügt alle Dateien in einem bestimmten Ordner dem Erstellungspfad hinzu, es sei denn, es gibt ein Projekt mit demselben Namen im Arbeitsbereich. In diesem Fall wird auf das Projekt verwiesen.

Nun scheint das offensichtlich zu funktionieren, wenn ich mich darauf bezieheeine Klasse aus einem dieser Gläser, der Code kompiliert, aber ich sehe die Klasse in den Code-Vervollständigungsvorschlägen nicht. Wenn ich das richtige Projekt in meinem Arbeitsbereich habe, dann sehe ich eine solche Klasse in der Code-Vervollständigung.

Ich habe die folgenden Schritte unternommen, um dies zu erreichen, während ich zum Teil überlegt habe Tutorial von IBM:

  • Implementieren Sie ClasspathContainerInitializer
  • Implementieren Sie ClasspathContainerPreferencePage für zusätzliche Konfiguration
  • Implementieren Sie IClasspathContainer

Wenn ich den Container zu einem Projekt hinzugefügt habe, sehe ich die Jars im Package Explorer so, wie ich es erwartet habe. (Jar da nur, wenn kein entsprechendes Projekt verfügbar ist, Logging zeigt erwartete Ergebnisse)

Ich kann Klassen von Gläsern verwenden, die via integriert sindKlassenpfadcontainer ohne Compilerfehler, sie sind nur nicht für die Codevervollständigung und in Quick Fixes zum Hinzufügen des richtigen Imports verfügbar. Ich denke, ich vermisse es vielleicht, zu einem Erweiterungspunkt beizutragen.

Antworten:

1 für die Antwort № 1

Die Antwort lautet im Grunde: Sie müssen nichts weiter tun als die drei Teile zu implementieren. Aber du musst es richtig machen.

Das ClasspathContainerPreferencePage um den Container für das Hinzufügen zum Projekt vorzubereiten.

Das ClasspathContainer als Entität, die dem Projekt hinzugefügt wird. Für diesen ist es wirklich wichtig, alle benötigten Methoden richtig zu implementieren. Für mich war das Problem, dass ich einen falschen konstanten Wert in der Methode zurückgegeben habe getKind (). Anstatt zurückzukehren IClasspatEntry.CPE_CONTAINER Ich musste nur benutzen IClasspassContainer.K_APPLICATION und die Code-Vervollständigung funktionierte aus der Box:

public int getKind() {
return IClasspathContainer.K_APPLICATION;
}

Und schließlich a ClasspathContainerInitializer zum Vorbereiten und Aktualisieren des Containers.


0 für die Antwort № 2

Ich benutze Eclipse Luna und Eclipse vervollständigt Code selbst von benutzerdefinierten externen JARs. Sie sollten in Erwägung ziehen, auf Luna zu aktualisieren, wenn Sie das Problem noch nicht gelöst haben