/*******************************************************************************
* Copyright (c) 2010 itemis AG (http://www.itemis.eu) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.emf.mwe2.language;
import org.eclipse.emf.mwe.utils.DirectoryCleaner;
import org.eclipse.emf.mwe.utils.StandaloneSetup;
import org.eclipse.emf.mwe2.runtime.workflow.Workflow;
import org.eclipse.emf.mwe2.runtime.workflow.WorkflowContextImpl;
import org.eclipse.xtext.generator.Generator;
import org.eclipse.xtext.generator.LanguageConfig;
import org.eclipse.xtext.generator.builder.BuilderIntegrationFragment;
import org.eclipse.xtext.generator.exporting.QualifiedNamesFragment;
import org.eclipse.xtext.generator.formatting.FormatterFragment;
import org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment;
import org.eclipse.xtext.generator.junit.Junit4Fragment;
import org.eclipse.xtext.generator.parser.antlr.ex.ExternalAntlrLexerFragment;
import org.eclipse.xtext.generator.parser.antlr.ex.ca.ContentAssistParserGeneratorFragment;
import org.eclipse.xtext.generator.parser.antlr.ex.rt.AntlrGeneratorFragment;
import org.eclipse.xtext.generator.resourceFactory.ResourceFactoryFragment;
import org.eclipse.xtext.generator.scoping.ImportNamespacesScopingFragment;
import org.eclipse.xtext.generator.serializer.SerializerFragment;
import org.eclipse.xtext.generator.types.TypesGeneratorFragment;
import org.eclipse.xtext.generator.validation.JavaValidatorFragment;
import org.eclipse.xtext.ui.generator.compare.CompareFragment;
import org.eclipse.xtext.ui.generator.contentAssist.JavaBasedContentAssistFragment;
import org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment;
import org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment;
import org.eclipse.xtext.ui.generator.outline.QuickOutlineFragment;
import org.eclipse.xtext.ui.generator.quickfix.QuickfixProviderFragment;
import org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment;
import org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment;
/**
* Java version of a workflow used in order to avoid unnecessary bootstrapping and circular dependency problems.
*
* @author Sven Efftinge - Initial contribution and API
*/
@SuppressWarnings("restriction")
public class GenerateMwe2 {
public static void main(String[] args) {
final String grammarURI = "classpath:/org/eclipse/emf/mwe2/language/Mwe2.xtext";
final String file_extensions = "mwe2";
final String projectName = "org.eclipse.emf.mwe2.language";
final String runtimeProject = "../"+projectName+"";
final String testProject = "../../tests/"+projectName+".tests";
final String uiProject = ""+runtimeProject+".ui";
Workflow workflow = new Workflow() {
{
addBean(new StandaloneSetup() {
{
setIgnoreBrokenProjectFiles(true);
setPlatformUri(runtimeProject+"/../..");
// xtext plugins git repo location
setPlatformUri(runtimeProject+"/../../../xtext-master/plugins");
}
});
addComponent(new DirectoryCleaner() {
{
setDirectory(""+runtimeProject+"/emf-gen");
}
});
addComponent(new org.eclipse.emf.mwe2.ecore.EcoreGenerator() {
{
setGenModel("platform:/resource/"+projectName+"/model/Mwe2.genmodel");
addSrcPath("platform:/resource/"+projectName+"/src");
}
});
addComponent(new DirectoryCleaner() {
{
setDirectory(""+runtimeProject+"/src-gen");
}
});
addComponent(new DirectoryCleaner() {
{
setDirectory(""+runtimeProject+".ui/src-gen");
}
});
addComponent(new DirectoryCleaner() {
{
setDirectory(""+testProject+".ui/src-gen");
}
});
addComponent(new Generator() {
{
setPathRtProject(runtimeProject);
setPathUiProject(uiProject);
setPathTestProject(testProject);
setProjectNameRt(projectName);
setProjectNameUi(""+projectName+".ui");
addLanguage(new LanguageConfig() {
{
setUri(grammarURI);
setFileExtensions(file_extensions);
// Java API to access grammar elements (required by several other fragments)
addFragment(new GrammarAccessFragment());
// the serialization component
addFragment(new SerializerFragment());
// a custom ResourceFactory for use with EMF
ResourceFactoryFragment resourceFragment = new ResourceFactoryFragment();
resourceFragment.setFileExtensions(file_extensions);
addFragment(resourceFragment);
addFragment(new AntlrGeneratorFragment());
ExternalAntlrLexerFragment antlrFragment1 = new ExternalAntlrLexerFragment();
antlrFragment1.setLexerGrammar("org.eclipse.emf.mwe2.language.lexer.Mwe2Lexer");
antlrFragment1.setRuntime(true);
antlrFragment1.addAntlrParam("-lib");
antlrFragment1.addAntlrParam(""+runtimeProject+"/src-gen/org/eclipse/emf/mwe2/language/parser/antlr/lexer");
addFragment(antlrFragment1);
// java-based API for validation
JavaValidatorFragment validationFragment = new JavaValidatorFragment();
validationFragment.addComposedCheck("org.eclipse.xtext.validation.ImportUriValidator");
addFragment(validationFragment);
// scoping API
addFragment(new ImportNamespacesScopingFragment());
// java types
addFragment(new TypesGeneratorFragment());
// formatter API
addFragment(new FormatterFragment());
// labeling API
addFragment(new LabelProviderFragment());
// outline API
addFragment(new OutlineTreeProviderFragment());
addFragment(new QuickOutlineFragment());
// java-based API for content assistance
addFragment(new JavaBasedContentAssistFragment());
addFragment(new ContentAssistParserGeneratorFragment());
addFragment(new BuilderIntegrationFragment());
addFragment(new QualifiedNamesFragment());
ExternalAntlrLexerFragment antlrFragment2 = new ExternalAntlrLexerFragment();
antlrFragment2.setLexerGrammar("org.eclipse.emf.mwe2.language.ui.highlighting.MweHighlightingLexer");
antlrFragment2.setHighlighting(true);
addFragment(antlrFragment2);
ExternalAntlrLexerFragment antlrFragment3 = new ExternalAntlrLexerFragment();
antlrFragment3.setLexerGrammar("org.eclipse.emf.mwe2.language.ui.contentassist.Mwe2ContentAssistLexer");
antlrFragment3.setContentAssist(true);
antlrFragment3.addAntlrParam("-lib");
antlrFragment3.addAntlrParam(""+uiProject+"/src-gen/org/eclipse/emf/mwe2/language/ui/contentassist/antlr/lexer");
addFragment(antlrFragment3);
// quickfix API
addFragment(new QuickfixProviderFragment());
// refactoring
RefactorElementNameFragment refactoringFragment = new RefactorElementNameFragment();
refactoringFragment.setUseJdtRefactoring(true);
addFragment(refactoringFragment);
CompareFragment compareFragment = new CompareFragment();
compareFragment.setFileExtensions(file_extensions);
addFragment(compareFragment);
addFragment(new CodetemplatesGeneratorFragment());
addFragment(new Junit4Fragment());
}
});
}
});
}
};
workflow.preInvoke();
workflow.run(new WorkflowContextImpl());
workflow.postInvoke();
}
}