mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 16:58:56 +00:00
applied patch from bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=247406
This commit is contained in:
parent
a849b76b90
commit
a89298ee83
3 changed files with 41 additions and 6 deletions
|
@ -17,6 +17,7 @@ import org.eclipse.emf.ecore.EStructuralFeature;
|
|||
import org.eclipse.emf.ecore.EcoreFactory;
|
||||
import org.eclipse.xtext.EcoreUtil2;
|
||||
import org.eclipse.xtext.resource.metamodel.ErrorAcceptor.ErrorCode;
|
||||
import org.eclipse.xtext.util.Strings;
|
||||
|
||||
/**
|
||||
* @author Jan Köhnlein - Initial contribution and API
|
||||
|
@ -89,8 +90,12 @@ public abstract class EClassifierInfo {
|
|||
|
||||
public boolean addFeature(EStructuralFeature prototype) {
|
||||
try {
|
||||
return addFeature(prototype.getName(), prototype.getEType(), prototype.isMany(), prototype
|
||||
.getUpperBound() > 1, null);
|
||||
boolean isContainment = false;
|
||||
if (prototype instanceof EReference) {
|
||||
EReference reference = (EReference) prototype;
|
||||
isContainment = reference.isContainment();
|
||||
}
|
||||
return addFeature(prototype.getName(), prototype.getEType(), prototype.isMany(), isContainment, null);
|
||||
}
|
||||
catch (TransformationException e) {
|
||||
throw new IllegalArgumentException(e.getMessage());
|
||||
|
@ -163,13 +168,16 @@ public abstract class EClassifierInfo {
|
|||
|
||||
@Override
|
||||
public boolean addSupertype(EClassifierInfo superTypeInfo) {
|
||||
throw new UnsupportedOperationException("Cannot add supertype to simple datatype");
|
||||
throw new UnsupportedOperationException("Cannot add supertype "
|
||||
+ Strings.emptyIfNull(superTypeInfo.getEClassifier().getName()) + " to simple datatype "
|
||||
+ Strings.emptyIfNull(this.getEClassifier().getName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addFeature(String featureName, EClassifierInfo featureType, boolean isMultivalue,
|
||||
boolean isContainment, EObject parserElement) throws TransformationException {
|
||||
throw new UnsupportedOperationException("Cannot add feature to simple datatype");
|
||||
throw new UnsupportedOperationException("Cannot add feature " + featureName + " to simple datatype"
|
||||
+ Strings.emptyIfNull(this.getEClassifier().getName()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -71,11 +71,12 @@ public class TypeHierarchyHelperTests extends TestCase {
|
|||
eClass.getEClass().getEStructuralFeatures().add(feature);
|
||||
}
|
||||
|
||||
private void addReference(EClassInfo eClass, EClassInfo ref, String name) {
|
||||
private EReference addReference(EClassInfo eClass, EClassInfo ref, String name) {
|
||||
EReference feature = EcoreFactory.eINSTANCE.createEReference();
|
||||
feature.setName(name);
|
||||
feature.setEType(ref.getEClassifier());
|
||||
eClass.getEClass().getEStructuralFeatures().add(feature);
|
||||
return feature;
|
||||
}
|
||||
|
||||
public void testSimpeCase01() throws Exception {
|
||||
|
@ -220,6 +221,32 @@ public class TypeHierarchyHelperTests extends TestCase {
|
|||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
}
|
||||
|
||||
public void testConfigurationOfLiftedReference() throws Exception {
|
||||
EClassInfo a = addClass("a");
|
||||
EClassInfo b = addClass("b");
|
||||
EClassInfo c = addClass("c");
|
||||
|
||||
b.addSupertype(a);
|
||||
c.addSupertype(a);
|
||||
EReference refB = addReference(b, a, "ref");
|
||||
refB.setContainment(true);
|
||||
EReference refC = addReference(c, a, "ref");
|
||||
refC.setContainment(true);
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, c.getEClass().getEStructuralFeatures().size());
|
||||
|
||||
liftUpFeatures();
|
||||
|
||||
assertEquals(1, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
|
||||
EReference refA = (EReference) a.getEClass().getEStructuralFeatures().get(0);
|
||||
assertTrue(refA.isContainment());
|
||||
}
|
||||
|
||||
public void testDublicateDerivedFeature() throws Exception {
|
||||
EClassInfo a = addClass("a");
|
||||
EClassInfo b = addClass("b");
|
||||
|
|
|
@ -337,7 +337,7 @@ public class Xtext2EcoreTransformerTests extends AbstractGeneratorTest {
|
|||
assertEquals(1, ruleA.getEAttributes().size());
|
||||
assertAttributeConfiguration(ruleA, 0, "featureAS", "EString");
|
||||
assertEquals(1, ruleA.getEReferences().size());
|
||||
assertReferenceConfiguration(ruleA, 0, "a", "RuleA", false, 0, 1);
|
||||
assertReferenceConfiguration(ruleA, 0, "a", "RuleA", true, 0, 1);
|
||||
|
||||
assertEquals(0, add.getEAttributes().size());
|
||||
assertEquals(0, add.getEReferences().size());
|
||||
|
|
Loading…
Reference in a new issue