avoid early startup
diff --git a/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF b/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF
index acc12d4..aa91ce6 100644
--- a/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.builder.ui.access/META-INF/MANIFEST.MF
@@ -12,7 +12,8 @@
org.eclipse.xtext.ui;bundle-version="[2.11.0,2.12.0)",
org.eclipse.jdt.launching,
org.eclipse.xtext.common.types.ui;bundle-version="[2.11.0,2.12.0)",
- org.eclipse.osbp.xtext.builder.types.loader.api;bundle-version="[0.9.0,0.10.0)"
+ org.eclipse.osbp.xtext.builder.types.loader.api;bundle-version="[0.9.0,0.10.0)",
+ org.eclipse.osbp.runtime.common
Import-Package: org.osgi.framework;version="1.7.0",
org.osgi.framework.wiring;version="1.1.0",
org.osgi.service.component;version="1.2.0",
diff --git a/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml b/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml
index 1757a86..3359bfc 100644
--- a/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml
+++ b/org.eclipse.osbp.xtext.builder.ui.access/OSGI-INF/org.eclipse.osbp.xtext.builder.ui.access.impl.XtextUtilService.xml
@@ -4,4 +4,5 @@
<service>
<provide interface="org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService"/>
</service>
+ <reference bind="bindWorkbenchAvailableService" cardinality="1..1" interface="org.eclipse.osbp.runtime.common.ui.IWorkbenchAvailable" name="WorkbenchAvailableService" policy="static" unbind="unbindWorkbenchAvailableService"/>
</scr:component>
\ No newline at end of file
diff --git a/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java b/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java
index fd0cd70..4ff5016 100644
--- a/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java
+++ b/org.eclipse.osbp.xtext.builder.ui.access/src/org/eclipse/osbp/xtext/builder/ui/access/impl/XtextUtilService.java
@@ -14,6 +14,11 @@
import org.eclipse.core.resources.IStorage;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.osbp.runtime.common.ui.IWorkbenchAvailable;
+import org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService;
+import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoader;
+import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderFactory;
+import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderProvider;
import org.eclipse.xtext.common.types.TypesPackage;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.IEObjectDescription;
@@ -24,14 +29,12 @@
import org.eclipse.xtext.ui.resource.XtextResourceSetProvider;
import org.eclipse.xtext.ui.shared.Access;
import org.eclipse.xtext.util.Pair;
-import org.eclipse.osbp.xtext.builder.ui.access.IXtextUtilService;
-import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoader;
-import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderFactory;
-import org.eclipse.osbp.xtext.builder.ui.access.jdt.IJdtTypeLoaderProvider;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
import com.google.inject.Guice;
import com.google.inject.Injector;
@@ -47,6 +50,7 @@
private XtextResourceSetProvider resourceSetProvider;
private IJdtTypeLoaderProvider typeLoaderProvider;
private IJdtTypeLoaderFactory typeLoaderFactory;
+ private IWorkbenchAvailable bindWorkbenchAvailableService;
public XtextUtilService() {
@@ -59,8 +63,7 @@
injector = Guice.createInjector(new UiModule());
resourceDescriptions = Access.getIResourceDescriptions().get();
javaStateHelper = injector.getInstance(JavaProjectsStateHelper.class);
- resourceSetProvider = injector
- .getInstance(XtextResourceSetProvider.class);
+ resourceSetProvider = injector.getInstance(XtextResourceSetProvider.class);
typeLoaderProvider = injector.getInstance(IJdtTypeLoaderProvider.class);
typeLoaderFactory = injector.getInstance(IJdtTypeLoaderFactory.class);
}
@@ -85,8 +88,7 @@
@Override
public IProject getProject(EClass eClass, String qualifiedName) {
IEObjectDescription temp = null;
- for (IEObjectDescription desc : getEObjectDescriptions(eClass,
- qualifiedName)) {
+ for (IEObjectDescription desc : getEObjectDescriptions(eClass, qualifiedName)) {
temp = desc;
break;
}
@@ -97,9 +99,8 @@
public IProject getProject(IEObjectDescription desc) {
IProject project = null;
if (desc != null) {
- Iterable<Pair<IStorage, IProject>> storages = javaStateHelper
- .getMapper().getStorages(
- desc.getEObjectURI().trimFragment());
+ Iterable<Pair<IStorage, IProject>> storages = javaStateHelper.getMapper()
+ .getStorages(desc.getEObjectURI().trimFragment());
for (Pair<IStorage, IProject> pair : storages) {
project = pair.getSecond();
@@ -113,8 +114,7 @@
public IProject getProject(IResourceDescription description) {
IProject project = null;
if (description != null) {
- Iterable<Pair<IStorage, IProject>> storages = javaStateHelper
- .getMapper().getStorages(description.getURI());
+ Iterable<Pair<IStorage, IProject>> storages = javaStateHelper.getMapper().getStorages(description.getURI());
for (Pair<IStorage, IProject> pair : storages) {
project = pair.getSecond();
@@ -125,11 +125,9 @@
}
@Override
- public XtextResourceSet getConfiguredXtextResourceFor(EClass eClass,
- String qualifiedName) {
+ public XtextResourceSet getConfiguredXtextResourceFor(EClass eClass, String qualifiedName) {
IEObjectDescription firstDesc = null;
- for (IEObjectDescription desc : getEObjectDescriptions(eClass,
- qualifiedName)) {
+ for (IEObjectDescription desc : getEObjectDescriptions(eClass, qualifiedName)) {
firstDesc = desc;
break;
}
@@ -138,10 +136,8 @@
if (firstDesc != null) {
IProject project = getProject(firstDesc);
if (project != null) {
- resourceSet = (XtextResourceSet) resourceSetProvider
- .get(project);
- resourceSet.getResource(firstDesc.getEObjectURI()
- .trimFragment(), true);
+ resourceSet = (XtextResourceSet) resourceSetProvider.get(project);
+ resourceSet.getResource(firstDesc.getEObjectURI().trimFragment(), true);
}
}
return resourceSet;
@@ -153,13 +149,11 @@
}
@Override
- public XtextResourceSet getConfiguredXtextResourceFor(IProject project,
- Scope scope) {
+ public XtextResourceSet getConfiguredXtextResourceFor(IProject project, Scope scope) {
XtextResourceSet resourceSet = null;
if (project != null) {
if (project != null) {
- resourceSet = (XtextResourceSet) resourceSetProvider
- .get(project);
+ resourceSet = (XtextResourceSet) resourceSetProvider.get(project);
if (scope != null) {
scope.putLoadOption(resourceSet.getLoadOptions());
}
@@ -168,19 +162,15 @@
return resourceSet;
}
- public Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass,
- String qualifiedName) {
- Iterable<IEObjectDescription> result = resourceDescriptions
- .getExportedObjects(eClass,
- QualifiedName.create(qualifiedName.split("\\.")), true);
+ public Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass, String qualifiedName) {
+ Iterable<IEObjectDescription> result = resourceDescriptions.getExportedObjects(eClass,
+ QualifiedName.create(qualifiedName.split("\\.")), true);
return result;
}
- private Iterable<IEObjectDescription> getEObjectDescriptionsForJvmTypes(
- String qualifiedName) {
- Iterable<IEObjectDescription> result = resourceDescriptions
- .getExportedObjects(TypesPackage.Literals.JVM_TYPE,
- QualifiedName.create(qualifiedName.split("\\.")), true);
+ private Iterable<IEObjectDescription> getEObjectDescriptionsForJvmTypes(String qualifiedName) {
+ Iterable<IEObjectDescription> result = resourceDescriptions.getExportedObjects(TypesPackage.Literals.JVM_TYPE,
+ QualifiedName.create(qualifiedName.split("\\.")), true);
return result;
}
@@ -193,8 +183,7 @@
if (firstDesc != null) {
IProject project = getProject(firstDesc);
- IJdtTypeLoader loader = typeLoaderProvider.get(JavaCore
- .create(project));
+ IJdtTypeLoader loader = typeLoaderProvider.get(JavaCore.create(project));
return loader.findTypeByName(qualifiedName);
}
return null;
@@ -209,10 +198,25 @@
if (firstDesc != null) {
IProject project = getProject(firstDesc);
- IJdtTypeLoader loader = typeLoaderFactory
- .createJdtTypeLoader(JavaCore.create(project));
+ IJdtTypeLoader loader = typeLoaderFactory.createJdtTypeLoader(JavaCore.create(project));
return loader.findTypeByName(qualifiedName);
}
return null;
}
+
+ /**
+ * Is used to track the workbench state. As soon as the workbench is
+ * available, this service may start. But not before to avoid eager
+ * swt.Display instantiation.
+ *
+ * @param service
+ */
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ void bindWorkbenchAvailableService(IWorkbenchAvailable service) {
+ this.bindWorkbenchAvailableService = service;
+ }
+
+ void unbindWorkbenchAvailableService(IWorkbenchAvailable service) {
+ this.bindWorkbenchAvailableService = null;
+ }
}