# Eclipse Plugin Depedencies auslesen...



## mrbela (2. Jul 2009)

Hallo Leute!

Ich stehe vor einem Problem: Ich habe PlugIn A, das unter den Dependencies u.a. ein PlugIn B hat, auf dessen Platform ich zugreifen möchte.

In Plugin A geht das ja ganz easy, auf die eigene Platform zu zugreifen:


```
Platform.platformMethode();
```

Aber wie komme ich an die Platform von B dran... Um das zu schaffen müsste ich glaube ich als Zwischenschritt erst mal an die Dependencies von PlugIn A dran kommen. Aber selbst das schaffe ich nicht.. 

Danke für die Hilfe!


----------



## mrbela (2. Jul 2009)

Ich schreib auch noch,w arum ich das ganze brauche. Also PlugIn A ist quasi das Hauptplugin udn PlugIn B der Kernel. An den Kernel habe ich einen Extension Point eingerichtet, der aber von Plugin A "ausgelesen" werden muss, bzw. muss PlugIn A zur Laufzeit schauen, ob sich eine Extension an diesem Point von B angemeldet hat.

Auf einen Extension Point im eigenen Plugin greife ich so zu, das klappt auch alles. Nur will ich den aus B auslesen:


```
try {
		IConfigurationElement[] config = Platform.getExtensionRegistry()
				.getConfigurationElementsFor(IGREETER_ID);
		for (IConfigurationElement e : config) {
			final Object o = e.createExecutableExtension("class");
			if (o instanceof IGreeter) {
				ISafeRunnable runnable = new ISafeRunnable() {
					@Override
					public void handleException(Throwable exception) {
						System.out.println("Exception in client");
					}

					@Override
					public void run() throws Exception {
						((IGreeter) o).greet();
					}
				};
				SafeRunner.run(runnable);
			}
		}
	} catch (Exception ex) {
		System.out.println(ex.getMessage());
	}
```


----------



## stefan. (2. Jul 2009)

Ich versteh den Zusammenhang nicht richtig. Plugin A bietet eine Extension an, Plugin B erweitert die Extension? Dann kann A auf B zugreifen und beispielsweise ein Objekt von B erstellen (createExecutableExtension("class")) oder Informationen auslesen. Was meinst du dann mit '...aus B auslesen'?


----------



## mrbela (2. Jul 2009)

Nee. Das Problem ist leider komplexer. Diese normale Extension Sache zwischen 2 Plugins hab ich schon gemacht, klappt problemlos.

Das Problem ist folgendes: Ich habe ein PlugIn A, das in den Dependencies PlugIn B stehen hat. A selbst hat keinen Extension Point, aber PlugIn B. Dieser wird dann durch ein drittes Plugin C erweitert.
Ich muss aber vom PlugIn A aus nachfragen, ob bei Plugin B sich C angemeldet hat, um den Extension Point bei B zu erweitern.

Verstehst Du mein Problem?

Danke für die Hilfe!


----------



## stefan. (2. Jul 2009)

Ok jetzt versteh ich das besser 

Evtl könntest du über den Activator aus Plugin B von A darauf zugreifen. Der bietet eine statische getDefault() Methode ? Oder deine Plugin Struktur überdenken ...


----------



## Wildcard (2. Jul 2009)

Platform bietet statische Methoden, die sind für alle Plugins die gleichen. Anders gesagt, ein Bundle hat keine 'Platform' das ist einfach eine ganz normale Eclipse Klasse.


----------



## mrbela (3. Jul 2009)

danke erstmal!

ich bin mir dessen bewusst, dass das statische Methoden sind und dass die bei jedem PlugIn gleich sind. Aber wie greife ich denn von PlugIn A aus auf die Methoden der Platform von B zu??


----------



## Wildcard (3. Jul 2009)

Was meinst du denn bitte mit die 'Methoden der Platform von B'? Es gibt nur eine Platform.


----------



## mrbela (10. Jul 2009)

Naja, ich bin quasi im Quelltext von A und möchte von dort aus schauen, ob eine Extension in PlugIn B sich an dessen Extension Point angemeldet hat. Dies kann ich ja mit entsprechenden Methoden des PlugIns B machen. Aber wie komm ich aus PlugIn A, also aus dessen Quelltext an PlugIn B dran und somit dann auch an die anliegenden Extensions.

danke!


----------



## Wildcard (12. Jul 2009)

Zur Laufzeit gibt es keinen Quelltext. Was willst du den tun? Alle Extension bekommen die sich an einen Extension Point gehängt haben? Dazu nimmt man die Extension Registry.


----------



## mrbela (13. Jul 2009)

ja, aber ich muss von einer Klasse aus, die in PlugIn A liegt die Extensions von dem Plugin B auslesen. Die stehen meines Wissens nicht in der ExtensionRegistry von A drinnen.


----------



## stefan. (13. Jul 2009)

mrbela hat gesagt.:


> Die stehen meines Wissens nicht in der ExtensionRegistry von A drinnen.



Und wenn doch ?


----------



## mrbela (13. Jul 2009)

ich habs wohl richtig vermutet. Bei dem Befehl


```
Platform.getExtensionRegistry().getExtensionPoints().length
```

schmeißt er eine Nullpointer. Und zwar ist Platform.getExtensionRegistry() null, was meine Theorie bestätigt.

Das muss doch irgendwie zu lösen sein, das Problem?!?!?


----------



## Gonzo17 (13. Jul 2009)

Du kannst doch Platform.getPlugin("ID von Plugin B") aufrufen, oder? Probier mal, ob du von dem Plug-In dann eine Extension Registry bekommst. Oder probiers mit Platform.getPlugin("ID von Plugin B").getDescriptor().getExtensions().


----------



## Wildcard (13. Jul 2009)

Es gibt nur eine Extension Registry, die ist gleich für alle Plugins. Wenn dir Platform.getExtensionRegistry null liefert, stimmt etwas nicht. Versuch mal ein Platform.isRunning um herauszufinden ob sie überhaupt läuft. Vielleicht läuft bei dir ein integrales Eclipse PlugIn nicht.


----------

