package com.github.jknack.antlr4ide.ui; import java.util.Set; import org.eclipse.core.runtime.IPath; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.xtext.documentation.impl.AbstractMultiLineCommentProvider; import org.eclipse.xtext.resource.containers.IAllContainersState; import org.eclipse.xtext.ui.editor.IXtextEditorCallback; import org.eclipse.xtext.ui.editor.actions.IActionContributor; import org.eclipse.xtext.ui.editor.folding.IFoldingRegionProvider; import org.eclipse.xtext.ui.editor.folding.IFoldingStructureProvider; import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider; import org.eclipse.xtext.ui.editor.model.IResourceForEditorInputFactory; import org.eclipse.xtext.ui.editor.model.ResourceForIEditorInputFactory; import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer; import org.eclipse.xtext.ui.editor.syntaxcoloring.AbstractAntlrTokenToAttributeIdMapper; import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfiguration; import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator; import org.eclipse.xtext.ui.resource.IResourceSetProvider; import org.eclipse.xtext.ui.resource.Storage2UriMapperJavaImpl; import org.eclipse.xtext.ui.resource.IStorage2UriMapperJdtExtensions; import org.eclipse.xtext.ui.resource.SimpleResourceSetProvider; import org.eclipse.xtext.ui.wizard.IProjectCreator; import com.github.jknack.antlr4ide.ui.console.AntlrConsoleFactory; import com.github.jknack.antlr4ide.ui.console.DefaultConsole; import com.github.jknack.antlr4ide.console.ConsoleImpl; import com.github.jknack.antlr4ide.generator.CodeGeneratorListener; import com.github.jknack.antlr4ide.generator.ToolOptionsProvider; import com.github.jknack.antlr4ide.services.GrammarResource; import com.github.jknack.antlr4ide.ui.editor.Antlr4NatureCallback; import com.github.jknack.antlr4ide.ui.folding.Antlr4FoldingPreferenceStoreInitializer; import com.github.jknack.antlr4ide.ui.folding.Antlr4FoldingRegionProvider; import com.github.jknack.antlr4ide.ui.folding.Antlr4FoldingStructureProvider; import com.github.jknack.antlr4ide.ui.generator.DefaultToolOptionsProvider; import com.github.jknack.antlr4ide.ui.generator.RefreshProjectProcessor; import com.github.jknack.antlr4ide.ui.generator.TodoListProcessor; import com.github.jknack.antlr4ide.ui.highlighting.AntlrHighlightingCalculator; import com.github.jknack.antlr4ide.ui.highlighting.AntlrHighlightingConfiguration; import com.github.jknack.antlr4ide.ui.highlighting.ShowWhitespaceCharactersActionContributor; import com.github.jknack.antlr4ide.ui.highlighting.TokenToAttributeIdMapper; import com.github.jknack.antlr4ide.ui.labeling.Antlr4HoverProvider; import com.github.jknack.antlr4ide.ui.preferences.Antlr4PreferenceStoreInitializer; import com.github.jknack.antlr4ide.ui.preferences.BuildPreferenceStoreInitializer; import com.github.jknack.antlr4ide.ui.services.DefaultGrammarResource; import com.github.jknack.antlr4ide.ui.wizard.JdtFreeProjectCreator; import com.google.common.collect.Sets; import com.google.inject.Binder; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Provides; import com.google.inject.name.Names; import com.google.inject.util.Providers; /** * Use this class to register components to be used within the IDE. */ public class Antlr4UiModule extends com.github.jknack.antlr4ide.ui.AbstractAntlr4UiModule { private IPath stateLocation; public Antlr4UiModule(final AbstractUIPlugin plugin) { super(plugin); this.stateLocation = plugin.getStateLocation(); } @Override public void configure(final Binder binder) { super.configure(binder); binder.requestStaticInjection(AntlrConsoleFactory.class); binder.requestStaticInjection(AntlrHighlightingConfiguration.class); binder.bind(GrammarResource.class).to(DefaultGrammarResource.class); binder.bind(ToolOptionsProvider.class).to(DefaultToolOptionsProvider.class); binder.bind(Antlr4FoldingPreferenceStoreInitializer.class); binder.bind(BuildPreferenceStoreInitializer.class); binder.bind(IFoldingStructureProvider.class).to(Antlr4FoldingStructureProvider.class); binder.bind(IFoldingRegionProvider.class).to(Antlr4FoldingRegionProvider.class); binder.bind(String.class) .annotatedWith(Names.named(AbstractMultiLineCommentProvider.START_TAG)) .toInstance("/\\*\\*"); binder.bind(IActionContributor.class).annotatedWith(Names.named("Show Whitespace")) .to(ShowWhitespaceCharactersActionContributor.class); binder.bind(TodoListProcessor.class); binder.bind(RefreshProjectProcessor.class); binder.bind(IPath.class).annotatedWith(Names.named("stateLocation")).toInstance(stateLocation); ConsoleImpl.getLogger().addAppender(new DefaultConsole()); } @Provides @Inject public Set<CodeGeneratorListener> codeGeneratorListeners(final TodoListProcessor todoProcessor, final RefreshProjectProcessor refreshProjectProcessor) { return Sets.<CodeGeneratorListener> newHashSet(todoProcessor, refreshProjectProcessor); } public Class<? extends AbstractAntlrTokenToAttributeIdMapper> bindAntlrTokenToAttributeIdMapper() { return TokenToAttributeIdMapper.class; } public Class<? extends IHighlightingConfiguration> bindIHighlightingConfiguration() { return AntlrHighlightingConfiguration.class; } public Class<? extends ISemanticHighlightingCalculator> bindISemanticHighlightingCalculator() { return AntlrHighlightingCalculator.class; } public Class<? extends IPreferenceStoreInitializer> bindIPreferenceStoreInitializer() { return Antlr4PreferenceStoreInitializer.class; } public Class<? extends IEObjectHoverProvider> bindIEObjectHoverProvider() { return Antlr4HoverProvider.class; } @Override public Class<? extends IXtextEditorCallback> bindIXtextEditorCallback() { return Antlr4NatureCallback.class; } // prevent JDT dependencies, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=404322 @Override public Class<? extends IResourceForEditorInputFactory> bindIResourceForEditorInputFactory() { return ResourceForIEditorInputFactory.class; } @Override public Class<? extends IResourceSetProvider> bindIResourceSetProvider() { return SimpleResourceSetProvider.class; } @Override public Provider<IAllContainersState> provideIAllContainersState() { return org.eclipse.xtext.ui.shared.Access.getWorkspaceProjectsState(); } // FIXME: due to "Xtext based editor does not start since 2.5 without JDT installed", // https://bugs.eclipse.org/bugs/show_bug.cgi?id=424455 // TODO: Check if still needed (HS 20161118) public void configureIStorage2UriMapperJdtExtensions(final Binder binder) { binder.bind(IStorage2UriMapperJdtExtensions.class).toProvider( Providers.of((IStorage2UriMapperJdtExtensions) (new Storage2UriMapperJavaImpl()))); } @Override public Class<? extends IProjectCreator> bindIProjectCreator() { return JdtFreeProjectCreator.class; } // Override needed to control build sequence // contributed by org.eclipse.xtext.generator.generator.GeneratorFragment @Override public Class<? extends org.eclipse.xtext.builder.IXtextBuilderParticipant> bindIXtextBuilderParticipant() { return com.github.jknack.antlr4ide.ui.builder.Antlr4BuilderParticipant.class; } }