2016-07-31 49 views
0

Ich möchte eine Befehlshandler-Klasse meines Eclipse-Plugins testen. Deshalb habe ich eine Instanz von IWorkbenchWindow im Konstruktor dieser Handler-Klasse injizieren wollen, weilEclipse-Plugin - Wie ein IWorkbenchWindow in den Konstruktor eines Befehlshandlers injiziert werden

PlatformUI.getWorkbench().getActiveWorkbenchWindow() 

lässt mich mit einer Abhängigkeit von PlatformUI.

Allerdings habe ich versucht, diese

@Inject 
public FindAndReplaceHandler(IWorkbenchWindow workbenchWindow) { 
    this.fWorkbenchWindow = workbenchWindow; 

zu tun und dann wirft der Rahmen ein NoSuchMethodException beschwert, dass die FindAndReplaceHandler Klasse einen Konstruktor ohne Argumente nicht hat.

Meine Klasse FindAndReplaceHandler erweitert AbstractHandler und überschreibt

void execute(ExecutionEvent event) 

(So verwende ich nicht die moderne Art und Weise mit den Anmerkungen @Execute und @CanExecute)

Meine Version von Eclipse ist: Version: Mars .2 (4.5.2). Ich habe mein Eclipse-Plugin-Projekt mit der Einstellung Eclipse-Version = "3.5 oder höher" erstellt. Aber vielleicht muss ich die e4-Tools installieren und mit ihnen arbeiten? Wie installiere ich sie?

Irgendwelche Ideen, wie ich dieses Problem lösen kann, werden geschätzt.

Antwort

2

Der @Inject-Stil des Befehlshandlers wird nur beim Schreiben von reinen e4-Plugins verwendet (und diese verwenden nicht IWorkbenchWindow oder PlatformUI).

Wenn Sie IWorkbenchWindow verwenden möchten, schreiben Sie ein 3.x-Kompatibilitätsmodus-Plug-In und können keine Injektion für den Befehls-Handler (und die meisten anderen Dinge) verwenden. Sie müssen einen Konstruktor ohne Argumente für den Befehlshandler haben.