2009-01-18 4 views
7

Ich entwickle ein Editor-Plugin für Eclipse. Es funktioniert gut mit Dateien in Eclipse-Projekten, aber wenn eine externe Datei über das "Datei -> Datei öffnen" -Menü geöffnet wird (was Datei mit zB Java-Dateien funktioniert), bekomme ich eine Seite, die nichts als eine horizontale blaue Linie anzeigt Wort "Fehler". Das Fehlerprotokoll von Eclipse ist leer, ebenso wie die Protokolldatei im Verzeichnis .metadata.Eclipse Editor Plugin: "ERROR" beim Öffnen der Datei außerhalb des Projekts

Was könnte das verursachen? Wie kann ich den Fehler diagnostizieren, wenn ich keine Fehlermeldung habe, die mir sagt, wo ich suchen soll? Es scheint keinen Weg zu geben, detailliertere Aufzeichnungen von Eclipse zu erhalten.

Edit:

ich, dass die Quelle des Problems der Nähe zu dem, was jamesh erwähnt, aber nicht ein Classcast gefunden haben - es gibt einfach keine IDocument Beispiel für die Textanzeige angezeigt werden, da StorageDocumentProvider.createDocument() gibt null zurück . Der Grund dafür ist, dass es nur weiß, wie Dokumente für Instanzen von org.eclipse.ui.IStorageEditorInput zu schaffen, aber in diesem Fall wird es eine Instanz von org.eclipse.ui.ide.FileStoreEditorInput, die nicht diese Schnittstelle nicht implementiert, sondern implementiert org.eclipse.ui.IURIEditorInput

+0

Bekomme ich einen Preis;)? – jamesh

Antwort

8

Ich hatte das gleiche Problem und schließlich gefunden Lösung für mich arbeiten. Sie müssen 2 verschiedene Dokumentanbieter zur Verfügung stellen - zunächst FileDocumentProvider für Dateien in Ihrer Workbench erweitern und zweitens TextFileDocumentProvider für andere Ressourcen außerhalb Ihres Arbeitsbereichs erweitern. Dann registrieren Sie den richtigen Anbieter Acording an den Eingang in Ihre Redakteure doSetInput Methode wie folgt:

private IDocumentProvider createDocumentProvider(IEditorInput input) { 
    if(input instanceof IFileEditorInput){ 
     return new XMLTextDocumentProvider(); 
    } else if(input instanceof IStorageEditorInput){ 
     return new XMLFileDocumentProvider(); 
    } else { 
     return new XMLTextDocumentProvider(); 
    } 
} 

@Override 
protected final void doSetInput(IEditorInput input) throws CoreException { 
    setDocumentProvider(createDocumentProvider(input)); 
    super.doSetInput(input); 
} 

dann in Ihrem neuen Dokument-Provider (Erweiterung TextFileDocumentProvider) einfügen somethnig wie folgt aus:

protected FileInfo createFileInfo(Object element) throws CoreException { 
     FileInfo info = super.createFileInfo(element); 
     if(info==null){ 
      info = createEmptyFileInfo(); 
     } 
     IDocument document = info.fTextFileBuffer.getDocument(); 
     if (document != null) { 

      /* register your partitioner and other things here 
         same way as in your fisrt document provider */ 
     } 
     return info; 
    } 

Diese funktioniert für mich :) Schließlich muss ich erwähnen, dass ich nicht so schlau bin und diese Lösung aus dem Projekt Amateras kopiert habe (Opensource HTML Editor Plugin für Eclipse)

+1

Danke dafür! Ich war wirklich frustriert, dass das Editor-Plug-In-Beispiel (Eclipse 3.7) nicht mit Dateien ohne Arbeitsbereich funktionierte. Zu Ihrer Information, in 3.7 funktioniert die Typüberprüfung in diesem Code nicht wie sie ist. Es funktioniert, wenn Sie stattdessen tun: 'instanceof IFileEditorInput' => XMLFileDocumentProvider, 'else' => XMLTextDocumentProvider. Darüber hinaus funktioniert es auch, wenn Sie einfach den XMLTextDocumentProvider (d. H. Einen TextFileDocumentProvider) in beiden Fällen verwenden. Weitere Informationen [in diesem Forumsbeitrag] (http://www.eclipsezone.com/eclipse/forums/t98253.html#92158543). Ich bin mir nicht sicher, einen Grund, FileDocumentProvider zu erweitern. – tcovo

0

Haben Sie versuchen, ein JAVA Erstellen Datei mit dem Editor, außerhalb des Arbeitsbereichs?

Beim Aufruf des Editors mit dem Dateipfad, concat "file: //" am Anfang der Datei path.eg: Wenn der Pfad C: //temp//Sample.java ist, dann ändern Sie es als Datei : // C: //temp//Sample.java.

+0

Ich rufe den Editor überhaupt nicht auf, ich öffne eine Datei über das Eclipse-Menü. Es ist ein bestimmter Dateityp, dessen Erweiterung bewirkt, dass er in meinem Editor-Plugin geöffnet wird. Ich habe Java nur als Beispiel für einen Editor erwähnt, wo dies funktioniert. –

2

Ich bin ein wenig weg von der Quellcode im Moment, obwohl ich das Problem ist ein ClassCastException vermuten:

  • Für eine Arbeitsbereich-Datei, die IEditorInputorg.eclipse.ui.IFileEditorInput ist.
  • Für eine lokale Nicht-Arbeitsbereich-Datei, die IEditorInput ist org.eclipse.ui.IStorageEditorInput

Der Unterschied in der ist, wie Sie den Inhalt aus den IEditorInput erhalten. Das JDT macht eine explizite instanceof Prüfung, um den Schalter zu machen.

Ich glaube nicht, dass die getAdapter(Class clazz) eine java.io.InputStream zurückgibt, wenn Sie es anbieten.

Ich verstehe nicht ganz, warum sie es so machen, aber es fühlt sich hässlich an.

Edit: Ein allgemeinerer Punkt über Eclipse-Anwendungen debuggen - es ist wirklich sehr nützlich, um zu versuchen, alle Ihre Protokolle in einen Ort zu montieren (das heißt die Konsole). Stellen Sie sicher, dass Sie die Befehlszeilenoptionen -console und -consoleLog verwenden. Letzteres hat dazu beigetragen, unzählige Stunden Zeit zu sparen. Wenn Sie nicht bereits wissen, lernen Sie die grundlegendsten Dinge über die Verwendung der Konsole (ss und start sind meine am häufigsten verwendeten). Dies wird mehr Zeit für die Diagnose einer bestimmten Klasse von Problemen einsparen.

+0

Das hört sich definitiv so an, als könnte es die Ursache sein - werde das überprüfen, wenn ich kann (Ich bin jetzt auch weg von diesem Code :) –

Verwandte Themen