001/*******************************************************************************
002 * Copyright (c) 2018 Red Hat Inc
003 * All rights reserved. This program and the accompanying materials
004 * are made available under the terms of the Eclipse Public License v1.0
005 * which accompanies this distribution, and is available at
006 * http://www.eclipse.org/legal/epl-v10.html
007 *
008 * Contributors:
009 *     Jens Reimann - initial API and implementation
010 *******************************************************************************/
011package de.dentrassi.varlink.idl;
012
013import com.google.inject.Binder;
014import com.google.inject.Provider;
015import com.google.inject.name.Names;
016import de.dentrassi.varlink.idl.generator.VarlinkIdlGenerator;
017import de.dentrassi.varlink.idl.parser.antlr.VarlinkIdlAntlrTokenFileProvider;
018import de.dentrassi.varlink.idl.parser.antlr.VarlinkIdlParser;
019import de.dentrassi.varlink.idl.parser.antlr.internal.InternalVarlinkIdlLexer;
020import de.dentrassi.varlink.idl.scoping.VarlinkIdlScopeProvider;
021import de.dentrassi.varlink.idl.serializer.VarlinkIdlSemanticSequencer;
022import de.dentrassi.varlink.idl.serializer.VarlinkIdlSyntacticSequencer;
023import de.dentrassi.varlink.idl.services.VarlinkIdlGrammarAccess;
024import de.dentrassi.varlink.idl.validation.VarlinkIdlValidator;
025import java.util.Properties;
026import org.eclipse.xtext.Constants;
027import org.eclipse.xtext.IGrammarAccess;
028import org.eclipse.xtext.generator.IGenerator2;
029import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
030import org.eclipse.xtext.naming.IQualifiedNameProvider;
031import org.eclipse.xtext.parser.IParser;
032import org.eclipse.xtext.parser.ITokenToStringConverter;
033import org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider;
034import org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter;
035import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
036import org.eclipse.xtext.parser.antlr.ITokenDefProvider;
037import org.eclipse.xtext.parser.antlr.Lexer;
038import org.eclipse.xtext.parser.antlr.LexerBindings;
039import org.eclipse.xtext.parser.antlr.LexerProvider;
040import org.eclipse.xtext.resource.IContainer;
041import org.eclipse.xtext.resource.IResourceDescriptions;
042import org.eclipse.xtext.resource.containers.IAllContainersState;
043import org.eclipse.xtext.resource.containers.ResourceSetBasedAllContainersStateProvider;
044import org.eclipse.xtext.resource.containers.StateBasedContainerManager;
045import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider;
046import org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions;
047import org.eclipse.xtext.scoping.IGlobalScopeProvider;
048import org.eclipse.xtext.scoping.IScopeProvider;
049import org.eclipse.xtext.scoping.IgnoreCaseLinking;
050import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
051import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
052import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider;
053import org.eclipse.xtext.serializer.ISerializer;
054import org.eclipse.xtext.serializer.impl.Serializer;
055import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
056import org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer;
057import org.eclipse.xtext.service.DefaultRuntimeModule;
058import org.eclipse.xtext.service.SingletonBinding;
059
060/**
061 * Manual modifications go to {@link VarlinkIdlRuntimeModule}.
062 */
063@SuppressWarnings("all")
064public abstract class AbstractVarlinkIdlRuntimeModule extends DefaultRuntimeModule {
065
066        protected Properties properties = null;
067
068        @Override
069        public void configure(Binder binder) {
070                properties = tryBindProperties(binder, "de/dentrassi/varlink/idl/VarlinkIdl.properties");
071                super.configure(binder);
072        }
073        
074        public void configureLanguageName(Binder binder) {
075                binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance("de.dentrassi.varlink.idl.VarlinkIdl");
076        }
077        
078        public void configureFileExtensions(Binder binder) {
079                if (properties == null || properties.getProperty(Constants.FILE_EXTENSIONS) == null)
080                        binder.bind(String.class).annotatedWith(Names.named(Constants.FILE_EXTENSIONS)).toInstance("varlink");
081        }
082        
083        // contributed by org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessFragment2
084        public ClassLoader bindClassLoaderToInstance() {
085                return getClass().getClassLoader();
086        }
087        
088        // contributed by org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessFragment2
089        public Class<? extends IGrammarAccess> bindIGrammarAccess() {
090                return VarlinkIdlGrammarAccess.class;
091        }
092        
093        // contributed by org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2
094        public Class<? extends ISemanticSequencer> bindISemanticSequencer() {
095                return VarlinkIdlSemanticSequencer.class;
096        }
097        
098        // contributed by org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2
099        public Class<? extends ISyntacticSequencer> bindISyntacticSequencer() {
100                return VarlinkIdlSyntacticSequencer.class;
101        }
102        
103        // contributed by org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2
104        public Class<? extends ISerializer> bindISerializer() {
105                return Serializer.class;
106        }
107        
108        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
109        public Class<? extends IParser> bindIParser() {
110                return VarlinkIdlParser.class;
111        }
112        
113        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
114        public Class<? extends ITokenToStringConverter> bindITokenToStringConverter() {
115                return AntlrTokenToStringConverter.class;
116        }
117        
118        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
119        public Class<? extends IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
120                return VarlinkIdlAntlrTokenFileProvider.class;
121        }
122        
123        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
124        public Class<? extends Lexer> bindLexer() {
125                return InternalVarlinkIdlLexer.class;
126        }
127        
128        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
129        public Class<? extends ITokenDefProvider> bindITokenDefProvider() {
130                return AntlrTokenDefProvider.class;
131        }
132        
133        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
134        public Provider<? extends InternalVarlinkIdlLexer> provideInternalVarlinkIdlLexer() {
135                return LexerProvider.create(InternalVarlinkIdlLexer.class);
136        }
137        
138        // contributed by org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2
139        public void configureRuntimeLexer(Binder binder) {
140                binder.bind(Lexer.class)
141                        .annotatedWith(Names.named(LexerBindings.RUNTIME))
142                        .to(InternalVarlinkIdlLexer.class);
143        }
144        
145        // contributed by org.eclipse.xtext.xtext.generator.validation.ValidatorFragment2
146        @SingletonBinding(eager=true)
147        public Class<? extends VarlinkIdlValidator> bindVarlinkIdlValidator() {
148                return VarlinkIdlValidator.class;
149        }
150        
151        // contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
152        public Class<? extends IScopeProvider> bindIScopeProvider() {
153                return VarlinkIdlScopeProvider.class;
154        }
155        
156        // contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
157        public void configureIScopeProviderDelegate(Binder binder) {
158                binder.bind(IScopeProvider.class).annotatedWith(Names.named(AbstractDeclarativeScopeProvider.NAMED_DELEGATE)).to(ImportedNamespaceAwareLocalScopeProvider.class);
159        }
160        
161        // contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
162        public Class<? extends IGlobalScopeProvider> bindIGlobalScopeProvider() {
163                return DefaultGlobalScopeProvider.class;
164        }
165        
166        // contributed by org.eclipse.xtext.xtext.generator.scoping.ImportNamespacesScopingFragment2
167        public void configureIgnoreCaseLinking(Binder binder) {
168                binder.bindConstant().annotatedWith(IgnoreCaseLinking.class).to(false);
169        }
170        
171        // contributed by org.eclipse.xtext.xtext.generator.exporting.QualifiedNamesFragment2
172        public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
173                return DefaultDeclarativeQualifiedNameProvider.class;
174        }
175        
176        // contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
177        public Class<? extends IContainer.Manager> bindIContainer$Manager() {
178                return StateBasedContainerManager.class;
179        }
180        
181        // contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
182        public Class<? extends IAllContainersState.Provider> bindIAllContainersState$Provider() {
183                return ResourceSetBasedAllContainersStateProvider.class;
184        }
185        
186        // contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
187        public void configureIResourceDescriptions(Binder binder) {
188                binder.bind(IResourceDescriptions.class).to(ResourceSetBasedResourceDescriptions.class);
189        }
190        
191        // contributed by org.eclipse.xtext.xtext.generator.builder.BuilderIntegrationFragment2
192        public void configureIResourceDescriptionsPersisted(Binder binder) {
193                binder.bind(IResourceDescriptions.class).annotatedWith(Names.named(ResourceDescriptionsProvider.PERSISTED_DESCRIPTIONS)).to(ResourceSetBasedResourceDescriptions.class);
194        }
195        
196        // contributed by org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2
197        public Class<? extends IGenerator2> bindIGenerator2() {
198                return VarlinkIdlGenerator.class;
199        }
200        
201}