2017-03-28 3 views
0

Gegeben ein IFolder-Instance fd (fd kann oder darf nicht existieren), wie erhält man den Namen des Java-Pakets, wenn fd ein Java-Paket darstellt? Derzeit ich auf diese Weise codiertEclipse JDT: Wie bekomme ich den Java-Paketnamen eines nicht existierenden IFolder

IJavaProject jp = JavaCore.create(fd.getProject()); 
IPackageFragment pf = jp.findPackageFragment(f.getFullPath()); 
String pname = pf.getElementName(); 

Der Code ist fehlgeschlagen, wenn fd nicht vorhanden ist (zum Beispiel war es nur gelöscht und die Löschung wurde in IResourceDelta eines IResourceChangeListener gefangen), als IJavaProject # findPackageFragment (IPath) gibt null für nicht vorhandener Artikel Wie erhält man den Paketnamen für einen nicht vorhandenen IFolder? Danke

+0

Vielleicht denke ich rückwärts, oder vielleicht bist du, aber wenn es noch nicht existiert, würde sein Name nicht sein, was auch immer du an seinen übergeordneten IFolder-Paketnamen angehängt haben wolltest? – nitind

+0

Der fehlgeschlagene Fall ist fd wurde gerade gelöscht. Es wurde über IResourceDelta in einem ResourceChangeListener zugegriffen. Im Moment wurde Project gerade aktualisiert und fd existierte nicht. Aber ich muss immer noch seinen Paketnamen bekommen. Irgendein Vorschlag? Danke – CMZS

Antwort

0

Hat der inexistente IFolder noch eine nützliche Elternkette? Wenn dies der Fall ist, möchten Sie möglicherweise das übergeordnete Element suchen, das einem Paketfragmentstamm des aktuellen Projekts entspricht.

IContainer parent = fd.getParent(); 
while (parent != null) { 
    if (JavaCore.create(parent) instanceof IPackageFragmentRoot) 
     // success: parent is a source folder 
    else 
     parent = parent.getParent(); 
} 

nehmen dann den relativen Pfad von der Wurzel-Paket-Fragment in den Ordner als Paketnamen.

PS: per JLS ist ein Paket nur beobachtbar, wenn eine Kompilationseinheit im Paket beobachtbar ist. Ergo ein nicht existierender Ordner kann niemals ein Paket darstellen (aber ich gebe zu, dass es sich um Wörter handelt).

+0

Dieser Fehler führt zu einem viel größeren Problem in dem Projekt. Ich muss zuerst daran arbeiten. Ihr Code-Snippet und Ihre Kommentare haben mir geholfen, das Problem zu lösen. Vielen Dank – CMZS

Verwandte Themen