[xtext][generator] Handle line delimiters explicitly

The grammar generator and a few fragments accept an explicit
line delimiter, now. A variable in the workflow along with
some auto-injects allow to control the line delimiter that
is used for the generated files.

see https://bugs.eclipse.org/bugs/show_bug.cgi?id=392982
and https://bugs.eclipse.org/bugs/show_bug.cgi?id=311478

Change-Id: I754dec05c1d82d4225295e881eb8942b68dcac2e
This commit is contained in:
Sebastian Zarnekow 2014-07-15 17:35:32 +02:00 committed by Stefan Oehme
parent 4f9b182cf3
commit e53c5b3075
34 changed files with 90 additions and 39 deletions

View file

@ -38,15 +38,13 @@ public class AntlrTokenDefProvider implements ITokenDefProvider {
protected volatile Map<Integer, String> tokenDefMap;
// private static final String TOKEN_COUNT = "Tokens";
public Map<Integer, String> getTokenDefMap() {
if (antlrTokenFileProvider == null)
return Collections.emptyMap();
if (tokenDefMap == null) {
InputStream tokenFile = antlrTokenFileProvider.getAntlrTokenFile();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(tokenFile));
BufferedReader br = createReader(tokenFile);
Map<Integer, String> tokenDefMap = new HashMap<Integer, String>();
String line = br.readLine();
Pattern pattern = Pattern.compile("(.*)=(\\d+)");
@ -63,7 +61,7 @@ public class AntlrTokenDefProvider implements ITokenDefProvider {
antlrTokenDef = Strings.convertFromJavaString(antlrTokenDef, true);
antlrTokenDef = "'" + antlrTokenDef + "'";
tokenDefMap.put(antlrTokenType, antlrTokenDef);
} else if (antlrTokenDef.startsWith("RULE_") || antlrTokenDef.startsWith("KEYWORD_")) {
} else if (antlrTokenDef.startsWith("RULE_") || isKeywordToken(antlrTokenDef)) {
tokenDefMap.put(antlrTokenType, antlrTokenDef);
}
line = br.readLine();
@ -84,6 +82,20 @@ public class AntlrTokenDefProvider implements ITokenDefProvider {
return tokenDefMap;
}
/**
* @since 2.7
*/
protected boolean isKeywordToken(String antlrTokenDef) {
return antlrTokenDef.startsWith("KEYWORD_");
}
/**
* @since 2.7
*/
protected BufferedReader createReader(InputStream stream) {
return new BufferedReader(new InputStreamReader(stream));
}
protected void setTokenDefMap(Map<Integer, String> tokenDefMap) {
this.tokenDefMap = ImmutableMap.copyOf(tokenDefMap);
}

View file

@ -5,6 +5,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.testlanguages"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -19,7 +20,7 @@ Workflow {
directory = "${runtimeProject}.ui/src-gen"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
pathUiProject = "${runtimeProject}.ui"
projectNameRt = projectName

View file

@ -8,13 +8,15 @@ var grammarURI
var backtrack = false
var memoize = false
var classSplitting = true
var parser = parser.antlr.ex.rt.AntlrGeneratorFragment {
var lineDelimiter = '\n'
var parser = parser.antlr.ex.rt.AntlrGeneratorFragment auto-inject {
options = auto-inject {
fieldsPerClass = "100"
methodsPerClass = "100"
}
}
var contentAssist.parser = parser.antlr.ex.ca.ContentAssistParserGeneratorFragment {
var contentAssist.parser = parser.antlr.ex.ca.ContentAssistParserGeneratorFragment auto-inject {
options = auto-inject {
fieldsPerClass = "100"
methodsPerClass = "100"

View file

@ -8,13 +8,15 @@ var grammarURI
var backtrack = false
var memoize = false
var classSplitting = true
var parser = parser.antlr.XtextAntlrGeneratorFragment {
var lineDelimiter = '\n'
var parser = parser.antlr.XtextAntlrGeneratorFragment auto-inject {
options = auto-inject {
fieldsPerClass = "100"
methodsPerClass = "100"
}
}
var contentAssist.parser = parser.antlr.XtextAntlrUiGeneratorFragment {
var contentAssist.parser = parser.antlr.XtextAntlrUiGeneratorFragment auto-inject {
options = auto-inject {
fieldsPerClass = "100"
methodsPerClass = "100"
@ -27,7 +29,7 @@ LanguageConfig {
fragment = grammarAccess.GrammarAccessFragment {}
// generates Java API for the generated EPackages
fragment = ecore.EcoreGeneratorFragment {
fragment = ecore.EcoreGeneratorFragment auto-inject {
emfRuntimeVersion = "2.9"
}

View file

@ -7,6 +7,7 @@ import org.eclipse.xtext.ui.generator.*
var grammarURI = "classpath:/org/eclipse/xtext/testlanguages/noJdt/NoJdtTestLanguage.xtext"
var fileExtensions = "nojdt"
var generateXtendStub = true
var lineDelimiter = '\n'
LanguageConfig auto-inject {
uri = grammarURI

View file

@ -13,6 +13,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -50,10 +51,11 @@ Workflow {
component = org.eclipse.emf.mwe2.ecore.EcoreGenerator {
genModel = "platform:/resource/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/GenModelAccessTest.genmodel"
srcPath = "foo"
lineDelimiter = lineDelimiter
}
component = org.eclipse.xtext.generator.ecore.GenModelAccessTestGenerator {}
component = Generator {
component = Generator auto-inject {
mergeManifest = false
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -15,12 +15,13 @@ var generateDebugData = false
var graphvizCommand = ""
var srcGenOnly=true
var emfRuntimeVersion = "2.9"
var lineDelimiter = '\n'
CompositeGeneratorFragment {
fragment = parser.antlr.XtextAntlrGeneratorFragment {
fragment = parser.antlr.XtextAntlrGeneratorFragment auto-inject {
options = auto-inject {}
}
fragment = parser.antlr.DebugAntlrGeneratorFragment {}
fragment = parser.antlr.DebugAntlrGeneratorFragment auto-inject {}
fragment = resourceFactory.ResourceFactoryFragment {
fileExtensions = file.extensions
}

View file

@ -23,9 +23,10 @@ var generateDotDiagram = false
var graphvizCommand = ""
var srcGenOnly=true
var emfRuntimeVersion = "2.9"
var lineDelimiter = '\n'
CompositeGeneratorFragment {
fragment = parser.antlr.ex.rt.AntlrGeneratorFragment {
fragment = parser.antlr.ex.rt.AntlrGeneratorFragment auto-inject {
options = auto-inject {}
}
fragment = resourceFactory.ResourceFactoryFragment {

View file

@ -22,9 +22,10 @@ var backtrackLexer = false
var generateDotDiagram = false
var graphvizCommand = ""
var emfRuntimeVersion = "2.9"
var lineDelimiter = '\n'
CompositeGeneratorFragment {
fragment = parser.antlr.ex.rt.AntlrGeneratorFragment {
fragment = parser.antlr.ex.rt.AntlrGeneratorFragment auto-inject {
options = auto-inject {}
}
fragment = resourceFactory.ResourceFactoryFragment {

View file

@ -14,9 +14,10 @@ var memoize = false
var generateDotDiagram = false
var graphvizCommand = ""
var emfRuntimeVersion = "2.9"
var lineDelimiter = '\n'
CompositeGeneratorFragment {
fragment = parser.antlr.XtextAntlrGeneratorFragment {
fragment = parser.antlr.XtextAntlrGeneratorFragment auto-inject {
options = auto-inject {}
}
fragment = resourceFactory.ResourceFactoryFragment {

View file

@ -18,9 +18,10 @@ var skipGenerate = false
var backtrack = false
var srcGenOnly=true
var emfRuntimeVersion = "2.9"
var lineDelimiter = '\n'
CompositeGeneratorFragment {
fragment = parser.antlr.XtextAntlrGeneratorFragment {
fragment = parser.antlr.XtextAntlrGeneratorFragment auto-inject {
options = auto-inject {}
}
fragment = resourceFactory.ResourceFactoryFragment {

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -25,7 +26,7 @@ Workflow {
directory="${runtimeProject}/src-gen/org/eclipse/xtext/enumrules"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.Generator
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -26,6 +27,7 @@ Workflow {
component = org.eclipse.emf.mwe2.ecore.EcoreGenerator {
genModel = "platform:/resource/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/GenModelAccessTest.genmodel"
srcPath = "foo"
lineDelimiter = lineDelimiter
}
component = org.eclipse.xtext.generator.ecore.GenModelAccessTestGenerator {}
}

View file

@ -14,13 +14,14 @@ import org.eclipse.xtext.generator.Generator
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
platformUri="${runtimeProject}/.."
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.Generator
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory="${runtimeProject}/src-gen/org/eclipse/xtext/generator/grammarAccess"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -36,7 +37,7 @@ Workflow {
directory="${runtimeProject}/src-gen/org/eclipse/xtext/grammarinheritance"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/lexer"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/lexer"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/linking"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -36,7 +37,7 @@ Workflow {
directory="${runtimeProject}/src-gen/org/eclipse/xtext/metamodelreferencing/tests"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parser/antlr"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parser/assignments"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parser/encoding"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parser/terminalrules"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parser/unorderedGroups"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
var generateDotDiagram = true
//var graphvizCommand = "/opt/local/bin/dot -o %1.pdf -v -T pdf"
@ -27,7 +28,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parsetree/formatter"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -12,13 +12,14 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
platformUri="${runtimeProject}/.."
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -12,13 +12,14 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
platformUri="${runtimeProject}/.."
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
var generateDotDiagram = true
//var graphvizCommand = "/opt/local/bin/dot -o %1.pdf -v -T pdf"
@ -27,7 +28,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parsetree/reconstr"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/parsetree/unassignedtext"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -26,7 +27,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/resource"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,7 +14,10 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
//var graphvizCommand = "/opt/local/bin/dot -o %1.pdf -v -T pdf"
Workflow {
bean = StandaloneSetup {
platformUri = "${runtimeProject}/.."
@ -24,7 +27,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/serializer"
}
component = Generator {
component = Generator auto-inject {
mergeManifest = false
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
var generateDotDiagram = true
//var graphvizCommand = "/opt/local/bin/dot -o %1.pdf -v -T pdf"
@ -27,7 +28,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/validation"
}
component = Generator {
component = Generator auto-inject {
mergeManifest = false
pathRtProject = runtimeProject
projectNameRt = projectName

View file

@ -14,6 +14,7 @@ import org.eclipse.xtext.generator.*
var projectName = "org.eclipse.xtext.tests"
var runtimeProject = "../${projectName}"
var lineDelimiter = '\n'
Workflow {
bean = StandaloneSetup {
@ -24,7 +25,7 @@ Workflow {
directory = "${runtimeProject}/src-gen/org/eclipse/xtext/xtext/ecoreInference"
}
component = Generator {
component = Generator auto-inject {
pathRtProject = runtimeProject
projectNameRt = projectName