mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 16:58:56 +00:00
Patch from Heiko
Common Compatible Type of two EClasses is always EObject see https://bugs.eclipse.org/bugs/attachment.cgi?id=113712
This commit is contained in:
parent
ffc6edc234
commit
0cee786b1c
2 changed files with 30 additions and 2 deletions
|
@ -11,11 +11,14 @@ import junit.framework.TestCase;
|
|||
|
||||
import org.eclipse.emf.ecore.EClass;
|
||||
import org.eclipse.emf.ecore.EcoreFactory;
|
||||
import org.eclipse.emf.ecore.EcorePackage;
|
||||
|
||||
/**
|
||||
* @author Heiko Behrens - Initial contribution and API
|
||||
*/
|
||||
public class EcoreUtil2Tests extends TestCase {
|
||||
static private final EClass EOBJECT = EcorePackage.Literals.EOBJECT;
|
||||
|
||||
private EClass createEClass(String name) {
|
||||
EClass result = EcoreFactory.eINSTANCE.createEClass();
|
||||
result.setName(name);
|
||||
|
@ -39,10 +42,10 @@ public class EcoreUtil2Tests extends TestCase {
|
|||
f.getESuperTypes().add(e);
|
||||
|
||||
assertSame(a, EcoreUtil2.getCompatibleType(a, a));
|
||||
assertSame(null, EcoreUtil2.getCompatibleType(d, f));
|
||||
assertSame(EOBJECT, EcoreUtil2.getCompatibleType(d, f));
|
||||
assertSame(c, EcoreUtil2.getCompatibleType(d, e));
|
||||
assertSame(b, EcoreUtil2.getCompatibleType(b, f));
|
||||
assertSame(null, EcoreUtil2.getCompatibleType(b, c));
|
||||
assertSame(EOBJECT, EcoreUtil2.getCompatibleType(b, c));
|
||||
}
|
||||
|
||||
public void testCommonCompatibleType02() {
|
||||
|
|
|
@ -594,4 +594,29 @@ public class Xtext2EcoreTransformerTests extends AbstractGeneratorTest {
|
|||
assertReferenceConfiguration(typeA, 0, "featureA", "RuleC", true, 0, 1);
|
||||
}
|
||||
|
||||
public void testAddingDifferentFeaturesWithSameName03() throws Exception {
|
||||
// independent rules are combined as EObject
|
||||
String grammar = "language test generate test 'http://test'";
|
||||
grammar += " RuleA returns TypeA: featureA1=ID featureA2=RuleD featureA3=RuleC;";
|
||||
grammar += " RuleB returns TypeA: featureA2=RuleC featureA4=INT;";
|
||||
grammar += " RuleC: featureC=INT;";
|
||||
grammar += " RuleD: featureD=ID;";
|
||||
EPackage ePackage = getEPackageFromGrammar(grammar);
|
||||
|
||||
assertEquals(3, ePackage.getEClassifiers().size());
|
||||
EClass typeA = (EClass) ePackage.getEClassifier("TypeA");
|
||||
assertNotNull(typeA);
|
||||
EClass ruleC = (EClass) ePackage.getEClassifier("RuleC");
|
||||
assertNotNull(ruleC);
|
||||
EClass ruleD = (EClass) ePackage.getEClassifier("RuleD");
|
||||
assertNotNull(ruleD);
|
||||
|
||||
assertEquals(2, typeA.getEAllAttributes().size());
|
||||
assertAttributeConfiguration(typeA, 0, "featureA1", "EString");
|
||||
assertAttributeConfiguration(typeA, 1, "featureA4", "EInt");
|
||||
|
||||
assertEquals(2, typeA.getEReferences().size());
|
||||
assertReferenceConfiguration(typeA, 0, "featureA2", "EObject", true, 0, 1);
|
||||
assertReferenceConfiguration(typeA, 1, "featureA3", "RuleC", true, 0, 1);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue