eclipse-platform / eclipse-platform/eclipse.platform
Add public API to inject the local IEclipseContext
- Lingua principale
- Java
- Stelle
- 165
- Fork
- 174
- Merge medio
- 2g 8h
- PR unite (30g)
- 22
Descrizione
## Use Case
I want to write an Eclipse 4 command handler that wraps/decorates another command handler. To that effect, my handler has `@CanExecute` and `@Execute` methods which invoke the wrapped handler's respective `@CanExecute` and `@Execute` methods using `ContextInjectionFactory.invoke` like so:
```java
@Execute
public void execute(IEclipseContext context) {
// Decorator functionality goes here
IEclipseContext localContext = null; // How to obtain this?
ContextInjectionFactory.invoke(decoratee, Execute.class, context, localContext, null));
}
```
Unfortunately, this looses any "local context" the `ContextInjectionFactory`? invoking the above method might have had.
## Suggested Solution
Allow the local context to be injected as well, e.g., by using a `@Named` annotation:
```java
@Execute
public void execute(IEclipseContext context, @Named("local") IEclipseContext localContext) {
// Decorator functionality goes here
ContextInjectionFactory.invoke(decoratee, Execute.class, context, localContext, null));
}
```
## Workarounds
AFAICT, the only way to currently obtain this local context is using an internal API (`org.eclipse.e4.core.internal.contexts.ContextObjectSupplier`):
```java
@Execute
public void execute(IEclipseContext context, ContextObjectSupplier localContextSupplier) {
// Decorator functionality goes here
IEclipseContext localContext = localContextSupplier.getContext(); // internal API :-(
ContextInjectionFactory.invoke(decoratee, Execute.class, context, localContext, null));
}
```
But this is both internal API and also more awkward to use than getting the local context injected directly and not as a supplier.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia leggendo ContextInjectionFactory e il ContextObjectSupplier interno, in particolare come vengono passati i contesti locali durante l'invocazione. Traccia il percorso di injection esistente e determina come un parametro pubblico per il contesto locale potrebbe preservare tale contesto senza esporre il supplier interno. Il lavoro è completato quando gli handler possono ricevere l'IEclipseContext locale tramite una API pubblica e passarlo a invocazioni annidate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java
- Ambito
- backend-api-design
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100