Merge pull request #798 from eclipse/sz/xtextTransientValueService

[grammar][serializer] Terminal fragments don’t allow return types
This commit is contained in:
Sebastian Zarnekow 2015-11-12 11:18:12 +01:00
commit 6a5a409097
2 changed files with 7 additions and 3 deletions

View file

@ -10,7 +10,6 @@ package org.eclipse.xtext.xtext;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.xtext.AbstractMetamodelDeclaration;
import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.CrossReference;
@ -54,7 +53,7 @@ public class XtextTransientValueService extends DefaultTransientValueService {
}
} else if (rule instanceof TerminalRule) {
final TypeRef returnType = rule.getType();
return returnType == null || EcorePackage.eINSTANCE.getEString().equals(rule.getType().getClassifier());
return ((TerminalRule) rule).isFragment() || returnType == null || GrammarUtil.findEString(GrammarUtil.getGrammar(owner)).equals(rule.getType().getClassifier());
}
}
else if (feature == XtextPackage.eINSTANCE.getCrossReference_Terminal()) {

View file

@ -60,7 +60,12 @@ public class XtextTransientValueService2 extends TransientValueService {
final TypeRef returnType = rule.getType();
if (returnType == null)
return YES;
if (EcorePackage.eINSTANCE.getEString().equals(rule.getType().getClassifier()))
if (rule instanceof TerminalRule) {
if (((TerminalRule) rule).isFragment()) {
return YES;
}
}
if (GrammarUtil.findEString(GrammarUtil.getGrammar(owner)).equals(rule.getType().getClassifier()))
return PREFERABLY;
return NO;
}