Difference between revisions of "Eclipse4/RCP/FAQ"

From Eclipsepedia

< Eclipse4‎ | RCP
Jump to: navigation, search
(What is the difference between IEclipseContext#set and IEclipseContext#modify?)
(Dependency Injection & Contexts)
Line 153: Line 153:
 
The injector attempts to resolve objects in the context. If they are not found in the context, but the class exists, then the injector will instantiate and return a new instance ''providing'' that its injectable dependencies can be resolved.
 
The injector attempts to resolve objects in the context. If they are not found in the context, but the class exists, then the injector will instantiate and return a new instance ''providing'' that its injectable dependencies can be resolved.
  
=== Why am I getting a new Shell? ===
+
=== Why is my widget/part not displaying? Why am I getting a new Shell? ===
  
 
The fix is to annotate the use with "@Named(ACTIVE_SHELL)".
 
The fix is to annotate the use with "@Named(ACTIVE_SHELL)".
 +
 +
=== Why am I being injected with null? ===
  
 
=== What is the difference between IEclipseContext#set and IEclipseContext#modify? ===
 
=== What is the difference between IEclipseContext#set and IEclipseContext#modify? ===

Revision as of 05:54, 9 April 2011

Contents

How do I adopt the Eclipse 4 Application Platform?

Accessing the status line

Eclipse 3.x Eclipse 4.0
getViewSite()
  .getActionsBars()
      .getStatusLineManager()
          .setMessage(msg);
@Inject
IStatusLineManager statusLine;
...
statusLine.setMessage(msg);

Associating help context with a control

getSite()
  .getWorkbenchWindow()
    .getWorkbench()
       .getHelpSystem().setHelp(
               viewer.getControl(), some_id)
@Inject
IWorkbenchHelpSystem helpSystem;
...
helpSystem.setHelp(
        viewer.getControl(), some_id);

Handling errors and exceptions

try {
    ...
} catch (Exception ex) {
    IStatus status = new Status(
       IStatus.ERROR, "plugin-id",
       "Error while ...", ex);
    StatusManager.getManager()
        .handle(status, StatusManager.SHOW);
}
@Inject
StatusReporter statusReporter;
...
try{
    ...
} catch (Exception ex) {
    statusReporter.show("Error while ...", ex);
}

Accessing preference values

IPreferenceStore store =
    IDEWorkbenchPlugin.getDefault()
        .getPreferenceStore();
boolean saveBeforeBuild = store
    .getBoolean(SAVE_BEFORE_BUILD);
@Inject @Preference(SAVE_BEFORE_BUILD)
boolean saveBeforeBuild;
IPreferenceStore store =
    IDEWorkbenchPlugin.getDefault()
        .getPreferenceStore();
store.putBoolean(SAVE_BEFORE_BUILD, false);
FIXME: there's way to do this...
@Inject @Preference(SAVE_BEFORE_BUILD)
Provider<Boolean> saveBeforeBuild;
...
saveBeforeBuild.set(false);

Why won't my application start?

E4AP products require having the following plugins:

  • org.eclipse.equinox.ds (must be started)
  • org.eclipse.equinox.event (must be started)

Note that org.eclipse.equinox.ds must be explicitly started. In your product file, you should have a section:

  <configurations>
     <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="2" />
     <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="3" />
     <plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="3" />
  </configurations>


Dependency Injection & Contexts

Why am I getting a new instance of an object?

The injector attempts to resolve objects in the context. If they are not found in the context, but the class exists, then the injector will instantiate and return a new instance providing that its injectable dependencies can be resolved.

Why is my widget/part not displaying? Why am I getting a new Shell?

The fix is to annotate the use with "@Named(ACTIVE_SHELL)".

Why am I being injected with null?

What is the difference between IEclipseContext#set and IEclipseContext#modify?

UI

How do I enable Drag N Drop (DND) of parts?

The DND addon is found in the org.eclipse.e4.ui.workbench.addons.swt plugin. However it requires the compatibility layer and is not available for native E4AP applications.