package org.erlide.builder; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.xtext.service.AbstractGenericModule; import com.google.common.eventbus.EventBus; import com.google.inject.Binder; import com.google.inject.Provider; import com.google.inject.TypeLiteral; import com.google.inject.matcher.Matchers; import com.google.inject.name.Names; import com.google.inject.spi.InjectionListener; import com.google.inject.spi.TypeEncounter; import com.google.inject.spi.TypeListener; public class BuilderModule extends AbstractGenericModule { public Provider<IWorkspace> provideIWorkspace() { return new Provider<IWorkspace>() { @Override public IWorkspace get() { return ResourcesPlugin.getWorkspace(); } }; } private final EventBus builderEventBus = new EventBus("erlangBuilder"); @Override public void configure(final Binder binder) { super.configure(binder); binder.bind(EventBus.class).annotatedWith(Names.named("erlangBuilder")) .toInstance(builderEventBus); // do this to automatically register all injected objects with the event // bus binder.bindListener(Matchers.any(), new TypeListener() { @Override public <I> void hear(final TypeLiteral<I> typeLiteral, final TypeEncounter<I> typeEncounter) { typeEncounter.register(new InjectionListener<I>() { @Override public void afterInjection(final I i) { // builderEventBus.register(i); } }); } }); } }