Search in sources :

Example 61 with StringConcatenationClient

use of org.eclipse.xtend2.lib.StringConcatenationClient in project xtext-core by eclipse.

the class GeneratorFragment2 method doGenerateMweFile.

protected void doGenerateMweFile() {
    String _path = this.getGeneratorStub(this.getLanguage().getGrammar()).getPath();
    String _plus = (_path + "MWE.mwe2");
    StringConcatenationClient _client = new StringConcatenationClient() {

        @Override
        protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
            String _fileHeader = GeneratorFragment2.this.codeConfig.getFileHeader();
            _builder.append(_fileHeader);
            _builder.newLineIfNotEmpty();
            _builder.append("module ");
            String _name = GeneratorFragment2.this.getGeneratorStub(GeneratorFragment2.this.getLanguage().getGrammar()).getName();
            _builder.append(_name);
            _builder.append("MWE");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("import org.eclipse.emf.mwe.utils.*");
            _builder.newLine();
            _builder.append("import ");
            String _packageName = GeneratorFragment2.this._xtextGeneratorNaming.getRuntimeSetup(GeneratorFragment2.this.getGrammar()).getPackageName();
            _builder.append(_packageName);
            _builder.append(".*");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("var targetDir");
            _builder.newLine();
            _builder.append("var modelPath");
            _builder.newLine();
            _builder.newLine();
            _builder.append("Workflow {");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("component = org.eclipse.xtext.mwe.Reader {");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("// lookup all resources on the classpath");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("// useJavaClassPath = true");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("// or define search scope explicitly");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("path = modelPath");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("// this class will be generated by the xtext generator ");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("register = ");
            String _simpleName = GeneratorFragment2.this._xtextGeneratorNaming.getRuntimeSetup(GeneratorFragment2.this.getGrammar()).getSimpleName();
            _builder.append(_simpleName, "\t\t");
            _builder.append(" {}");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("loadResource = {");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("slot = \"model\"");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("component = org.eclipse.xtext.generator.GeneratorComponent {");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("register = ");
            String _simpleName_1 = GeneratorFragment2.this._xtextGeneratorNaming.getRuntimeSetup(GeneratorFragment2.this.getGrammar()).getSimpleName();
            _builder.append(_simpleName_1, "\t\t");
            _builder.append(" {}");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("slot = \'model\'");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("outlet = {");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("path = targetDir");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("}");
            _builder.newLine();
        }
    };
    this.fileAccessFactory.createTextFile(_plus, _client).writeTo(this.getProjectConfig().getRuntime().getSrc());
}
Also used : StringConcatenationClient(org.eclipse.xtend2.lib.StringConcatenationClient)

Example 62 with StringConcatenationClient

use of org.eclipse.xtend2.lib.StringConcatenationClient in project xtext-core by eclipse.

the class GeneratorFragment2 method contributeEclipsePluginGuiceBindings.

protected void contributeEclipsePluginGuiceBindings() {
    StringConcatenationClient _client = new StringConcatenationClient() {

        @Override
        protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
            TypeReference _typeRef = TypeReference.typeRef("org.eclipse.core.resources.ResourcesPlugin");
            _builder.append(_typeRef);
            _builder.append(".getWorkspace().getRoot()");
        }
    };
    final StringConcatenationClient expression = _client;
    StringConcatenationClient _client_1 = new StringConcatenationClient() {

        @Override
        protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
            _builder.append("binder.bind(");
            TypeReference _typeRef = TypeReference.typeRef("org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer");
            _builder.append(_typeRef);
            _builder.append(".class)");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append(".annotatedWith(");
            _builder.append(Names.class, "\t");
            _builder.append(".named(\"builderPreferenceInitializer\"))");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append(".to(");
            TypeReference _typeReference = new TypeReference("org.eclipse.xtext.builder.preferences", "BuilderPreferenceAccess.Initializer");
            _builder.append(_typeReference, "\t");
            _builder.append(".class);");
            _builder.newLineIfNotEmpty();
        }
    };
    final StringConcatenationClient statement = _client_1;
    new GuiceModuleAccess.BindingFactory().addTypeToType(TypeReference.typeRef("org.eclipse.xtext.builder.IXtextBuilderParticipant"), TypeReference.typeRef("org.eclipse.xtext.builder.BuilderParticipant")).addTypeToInstance(TypeReference.typeRef("org.eclipse.core.resources.IWorkspaceRoot"), expression).addConfiguredBinding("BuilderPreferenceStoreInitializer", statement).contributeTo(this.getLanguage().getEclipsePluginGenModule());
}
Also used : StringConcatenationClient(org.eclipse.xtend2.lib.StringConcatenationClient) TypeReference(org.eclipse.xtext.xtext.generator.model.TypeReference)

Example 63 with StringConcatenationClient

use of org.eclipse.xtend2.lib.StringConcatenationClient in project xtext-core by eclipse.

the class GrammarAccessExtensions method gaFullAccessor.

/**
 * Returns the invocation of the element accessor method as fully qualified Java statement.
 * Example: return FowlerDslTestLanguageGrammarAccess.INSTANCE.prStatemachine().ele1AssignmentStates()
 */
public StringConcatenationClient gaFullAccessor(final AbstractElement ele) {
    StringConcatenationClient _client = new StringConcatenationClient() {

        @Override
        protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
            TypeReference _grammarAccess = GrammarAccessExtensions.this.getGrammarAccess(GrammarUtil.getGrammar(ele));
            _builder.append(_grammarAccess);
            _builder.append(".INSTANCE.");
            String _gaRuleElementAccessor = GrammarAccessExtensions.this.gaRuleElementAccessor(ele);
            _builder.append(_gaRuleElementAccessor);
        }
    };
    return _client;
}
Also used : StringConcatenationClient(org.eclipse.xtend2.lib.StringConcatenationClient) TypeReference(org.eclipse.xtext.xtext.generator.model.TypeReference)

Example 64 with StringConcatenationClient

use of org.eclipse.xtend2.lib.StringConcatenationClient in project xtext-core by eclipse.

the class GrammarAccessFragment2 method _initializer.

protected StringConcatenationClient _initializer(final TerminalRule it) {
    StringConcatenationClient _client = new StringConcatenationClient() {

        @Override
        protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
            _builder.append("this.");
            String _gaRuleAccessorLocalVarName = GrammarAccessFragment2.this.gaRuleAccessorLocalVarName(it);
            _builder.append(_gaRuleAccessorLocalVarName);
            _builder.append(" = (");
            _builder.append(TerminalRule.class);
            _builder.append(") ");
            _builder.append(GrammarUtil.class);
            _builder.append(".findRuleForName(getGrammar(), \"");
            String _qualifiedName = GrammarAccessFragment2.this.getQualifiedName(it);
            _builder.append(_qualifiedName);
            _builder.append("\");");
            _builder.newLineIfNotEmpty();
        }
    };
    return _client;
}
Also used : StringConcatenationClient(org.eclipse.xtend2.lib.StringConcatenationClient)

Example 65 with StringConcatenationClient

use of org.eclipse.xtend2.lib.StringConcatenationClient in project xtext-core by eclipse.

the class GrammarAccessFragment2 method doGenerateGrammarAccess.

protected void doGenerateGrammarAccess() {
    final GeneratedJavaFileAccess javaFile = this.fileAccessFactory.createGeneratedJavaFile(this._grammarAccessExtensions.getGrammarAccess(this.getGrammar()));
    List<IClassAnnotation> _annotations = javaFile.getAnnotations();
    SingletonClassAnnotation _singletonClassAnnotation = new SingletonClassAnnotation();
    _annotations.add(_singletonClassAnnotation);
    StringConcatenationClient _client = new StringConcatenationClient() {

        @Override
        protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
            _builder.append("public class ");
            String _simpleName = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(GrammarAccessFragment2.this.getLanguage().getGrammar()).getSimpleName();
            _builder.append(_simpleName);
            _builder.append(" extends ");
            _builder.append(AbstractElementFinder.AbstractGrammarElementFinder.class);
            _builder.append(" {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.newLine();
            {
                Iterable<ParserRule> _filter = Iterables.<ParserRule>filter(GrammarAccessFragment2.this.getLanguage().getGrammar().getRules(), ParserRule.class);
                for (final ParserRule r : _filter) {
                    _builder.append("\t");
                    StringConcatenationClient _parserRuleClasses = GrammarAccessFragment2.this.parserRuleClasses(r);
                    _builder.append(_parserRuleClasses, "\t");
                    _builder.newLineIfNotEmpty();
                }
            }
            _builder.append("\t");
            _builder.newLine();
            {
                Iterable<EnumRule> _filter_1 = Iterables.<EnumRule>filter(GrammarAccessFragment2.this.getLanguage().getGrammar().getRules(), EnumRule.class);
                for (final EnumRule r_1 : _filter_1) {
                    _builder.append("\t");
                    StringConcatenationClient _parserRuleClasses_1 = GrammarAccessFragment2.this.parserRuleClasses(r_1);
                    _builder.append(_parserRuleClasses_1, "\t");
                    _builder.newLineIfNotEmpty();
                }
            }
            _builder.append("\t");
            _builder.newLine();
            {
                EList<AbstractRule> _rules = GrammarAccessFragment2.this.getLanguage().getGrammar().getRules();
                for (final AbstractRule r_2 : _rules) {
                    _builder.append("\t");
                    StringConcatenationClient _cache = GrammarAccessFragment2.this.cache(r_2);
                    _builder.append(_cache, "\t");
                    _builder.newLineIfNotEmpty();
                }
            }
            _builder.append("\t");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("private final ");
            _builder.append(Grammar.class, "\t");
            _builder.append(" grammar;");
            _builder.newLineIfNotEmpty();
            {
                List<Grammar> _effectivelyUsedGrammars = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
                for (final Grammar g : _effectivelyUsedGrammars) {
                    _builder.append("\t");
                    _builder.newLine();
                    _builder.append("\t");
                    _builder.append("private final ");
                    TypeReference _grammarAccess = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g);
                    _builder.append(_grammarAccess, "\t");
                    _builder.append(" ");
                    String _gaGrammarAccessLocalVarName = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g);
                    _builder.append(_gaGrammarAccessLocalVarName, "\t");
                    _builder.append(";");
                    _builder.newLineIfNotEmpty();
                }
            }
            _builder.newLine();
            _builder.append("\t");
            _builder.append("@");
            _builder.append(Inject.class, "\t");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("public ");
            String _simpleName_1 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(GrammarAccessFragment2.this.getLanguage().getGrammar()).getSimpleName();
            _builder.append(_simpleName_1, "\t");
            _builder.append("(");
            _builder.append(GrammarProvider.class, "\t");
            _builder.append(" grammarProvider");
            {
                List<Grammar> _effectivelyUsedGrammars_1 = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
                for (final Grammar g_1 : _effectivelyUsedGrammars_1) {
                    _builder.append(",");
                    _builder.newLineIfNotEmpty();
                    _builder.append("\t");
                    _builder.append("\t\t");
                    TypeReference _grammarAccess_1 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g_1);
                    _builder.append(_grammarAccess_1, "\t\t\t");
                    _builder.append(" ");
                    String _gaGrammarAccessLocalVarName_1 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_1);
                    _builder.append(_gaGrammarAccessLocalVarName_1, "\t\t\t");
                }
            }
            _builder.append(") {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("this.grammar = internalFindGrammar(grammarProvider);");
            _builder.newLine();
            {
                List<Grammar> _effectivelyUsedGrammars_2 = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
                for (final Grammar g_2 : _effectivelyUsedGrammars_2) {
                    _builder.append("\t\t");
                    _builder.append("this.");
                    String _gaGrammarAccessLocalVarName_2 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_2);
                    _builder.append(_gaGrammarAccessLocalVarName_2, "\t\t");
                    _builder.append(" = ");
                    String _gaGrammarAccessLocalVarName_3 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_2);
                    _builder.append(_gaGrammarAccessLocalVarName_3, "\t\t");
                    _builder.append(";");
                    _builder.newLineIfNotEmpty();
                }
            }
            {
                EList<AbstractRule> _rules_1 = GrammarAccessFragment2.this.getLanguage().getGrammar().getRules();
                for (final AbstractRule r_3 : _rules_1) {
                    _builder.append("\t\t");
                    StringConcatenationClient _initializer = GrammarAccessFragment2.this.initializer(r_3);
                    _builder.append(_initializer, "\t\t");
                    _builder.newLineIfNotEmpty();
                }
            }
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("protected ");
            _builder.append(Grammar.class, "\t");
            _builder.append(" internalFindGrammar(");
            _builder.append(GrammarProvider.class, "\t");
            _builder.append(" grammarProvider) {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append(Grammar.class, "\t\t");
            _builder.append(" grammar = grammarProvider.getGrammar(this);");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("while (grammar != null) {");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("if (\"");
            String _name = GrammarAccessFragment2.this.getLanguage().getGrammar().getName();
            _builder.append(_name, "\t\t\t");
            _builder.append("\".equals(grammar.getName())) {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t\t");
            _builder.append("return grammar;");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append(List.class, "\t\t\t");
            _builder.append("<");
            _builder.append(Grammar.class, "\t\t\t");
            _builder.append("> grammars = grammar.getUsedGrammars();");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append("if (!grammars.isEmpty()) {");
            _builder.newLine();
            _builder.append("\t\t\t\t");
            _builder.append("grammar = grammars.iterator().next();");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("} else {");
            _builder.newLine();
            _builder.append("\t\t\t\t");
            _builder.append("return null;");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("return grammar;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("@Override");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("public ");
            _builder.append(Grammar.class, "\t");
            _builder.append(" getGrammar() {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("return grammar;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.newLine();
            {
                List<Grammar> _effectivelyUsedGrammars_3 = GrammarAccessFragment2.this.getEffectivelyUsedGrammars(GrammarAccessFragment2.this.getLanguage().getGrammar());
                for (final Grammar g_3 : _effectivelyUsedGrammars_3) {
                    _builder.append("\t");
                    _builder.newLine();
                    _builder.append("\t");
                    _builder.append("public ");
                    TypeReference _grammarAccess_2 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g_3);
                    _builder.append(_grammarAccess_2, "\t");
                    _builder.append(" get");
                    String _simpleName_2 = GrammarAccessFragment2.this._grammarAccessExtensions.getGrammarAccess(g_3).getSimpleName();
                    _builder.append(_simpleName_2, "\t");
                    _builder.append("() {");
                    _builder.newLineIfNotEmpty();
                    _builder.append("\t");
                    _builder.append("\t");
                    _builder.append("return ");
                    String _gaGrammarAccessLocalVarName_4 = GrammarAccessFragment2.this.gaGrammarAccessLocalVarName(g_3);
                    _builder.append(_gaGrammarAccessLocalVarName_4, "\t\t");
                    _builder.append(";");
                    _builder.newLineIfNotEmpty();
                    _builder.append("\t");
                    _builder.append("}");
                    _builder.newLine();
                }
            }
            _builder.newLine();
            {
                List<AbstractRule> _allRules = GrammarUtil.allRules(GrammarAccessFragment2.this.getLanguage().getGrammar());
                for (final AbstractRule r_4 : _allRules) {
                    _builder.append("\t");
                    _builder.newLine();
                    _builder.append("\t");
                    StringConcatenationClient _ter = GrammarAccessFragment2.this.getter(r_4, GrammarAccessFragment2.this.getLanguage().getGrammar());
                    _builder.append(_ter, "\t");
                    _builder.newLineIfNotEmpty();
                }
            }
            _builder.append("}");
            _builder.newLine();
        }
    };
    javaFile.setContent(_client);
    javaFile.writeTo(this.getProjectConfig().getRuntime().getSrcGen());
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) StringConcatenationClient(org.eclipse.xtend2.lib.StringConcatenationClient) SingletonClassAnnotation(org.eclipse.xtext.xtext.generator.model.annotations.SingletonClassAnnotation) Grammar(org.eclipse.xtext.Grammar) EnumRule(org.eclipse.xtext.EnumRule) EList(org.eclipse.emf.common.util.EList) AbstractElementFinder(org.eclipse.xtext.service.AbstractElementFinder) IClassAnnotation(org.eclipse.xtext.xtext.generator.model.annotations.IClassAnnotation) GeneratedJavaFileAccess(org.eclipse.xtext.xtext.generator.model.GeneratedJavaFileAccess) List(java.util.List) EList(org.eclipse.emf.common.util.EList) TypeReference(org.eclipse.xtext.xtext.generator.model.TypeReference) AbstractRule(org.eclipse.xtext.AbstractRule)

Aggregations

StringConcatenationClient (org.eclipse.xtend2.lib.StringConcatenationClient)194 TypeReference (org.eclipse.xtext.xtext.generator.model.TypeReference)119 GeneratedJavaFileAccess (org.eclipse.xtext.xtext.generator.model.GeneratedJavaFileAccess)24 GuiceModuleAccess (org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess)24 Grammar (org.eclipse.xtext.Grammar)23 StringConcatenation (org.eclipse.xtend2.lib.StringConcatenation)19 List (java.util.List)18 Test (org.junit.Test)18 Set (java.util.Set)14 JavaFileAccess (org.eclipse.xtext.xtext.generator.model.JavaFileAccess)12 ManifestAccess (org.eclipse.xtext.xtext.generator.model.ManifestAccess)12 EClass (org.eclipse.emf.ecore.EClass)11 EList (org.eclipse.emf.common.util.EList)10 AbstractRule (org.eclipse.xtext.AbstractRule)10 IGeneratorNode (org.eclipse.xtext.generator.trace.node.IGeneratorNode)10 EObject (org.eclipse.emf.ecore.EObject)9 IClassAnnotation (org.eclipse.xtext.xtext.generator.model.annotations.IClassAnnotation)9 Function1 (org.eclipse.xtext.xbase.lib.Functions.Function1)8 SuppressWarningsAnnotation (org.eclipse.xtext.xtext.generator.model.annotations.SuppressWarningsAnnotation)8 ArrayList (java.util.ArrayList)7