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}