From 7d9620fa8eaa07476041e20ddd1d6402fee3bc24 Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Sat, 12 Apr 2008 10:05:44 +0000 Subject: [226317] Multiple Inheritence Wrong featureID https://bugs.eclipse.org/bugs/show_bug.cgi?id=226317 --- .../model/model1.ecore | 3 + .../emf/cdo/tests/model1/Model1Factory.java | 8 + .../emf/cdo/tests/model1/Model1Package.java | 127 +++++++++++- .../eclipse/emf/cdo/tests/model1/OrderAddress.java | 52 +++++ .../cdo/tests/model1/impl/Model1FactoryImpl.java | 14 ++ .../cdo/tests/model1/impl/Model1PackageImpl.java | 40 ++++ .../cdo/tests/model1/impl/OrderAddressImpl.java | 218 +++++++++++++++++++++ .../tests/model1/util/Model1AdapterFactory.java | 21 ++ .../emf/cdo/tests/model1/util/Model1Switch.java | 26 +++ .../src/org/eclipse/emf/cdo/tests/InitialTest.java | 61 ++++++ 10 files changed, 569 insertions(+), 1 deletion(-) create mode 100644 plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/OrderAddress.java create mode 100644 plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/OrderAddressImpl.java diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/model/model1.ecore b/plugins/org.eclipse.emf.cdo.tests.model1/model/model1.ecore index 7f1f538768..716968f5d2 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/model/model1.ecore +++ b/plugins/org.eclipse.emf.cdo.tests.model1/model/model1.ecore @@ -69,4 +69,7 @@ + + + diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Factory.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Factory.java index 686ca83fed..d19c6fb2c1 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Factory.java +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Factory.java @@ -64,6 +64,14 @@ public interface Model1Factory extends EFactory */ Product createProduct(); + /** + * Returns a new object of class 'Order Address'. + * + * @return a new object of class 'Order Address'. + * @generated + */ + OrderAddress createOrderAddress(); + /** * Returns a new object of class 'Category'. * diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Package.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Package.java index 411017aa98..eb07a66c3e 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Package.java +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/Model1Package.java @@ -590,6 +590,92 @@ public interface Model1Package extends EPackage */ int PRODUCT_FEATURE_COUNT = 3; + /** + * The meta object id for the '{@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl Order Address}' + * class. + * + * @see org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl + * @see org.eclipse.emf.cdo.tests.model1.impl.Model1PackageImpl#getOrderAddress() + * @generated + */ + int ORDER_ADDRESS = 10; + + /** + * The feature id for the 'Name' attribute. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__NAME = ADDRESS__NAME; + + /** + * The feature id for the 'Street' attribute. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__STREET = ADDRESS__STREET; + + /** + * The feature id for the 'City' attribute. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__CITY = ADDRESS__CITY; + + /** + * The feature id for the 'Order Details' containment reference list. + * + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__ORDER_DETAILS = ADDRESS_FEATURE_COUNT + 0; + + /** + * The feature id for the 'Order' container reference. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__ORDER = ADDRESS_FEATURE_COUNT + 1; + + /** + * The feature id for the 'Product' reference. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__PRODUCT = ADDRESS_FEATURE_COUNT + 2; + + /** + * The feature id for the 'Price' attribute. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__PRICE = ADDRESS_FEATURE_COUNT + 3; + + /** + * The feature id for the 'Test Attribute' attribute. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS__TEST_ATTRIBUTE = ADDRESS_FEATURE_COUNT + 4; + + /** + * The number of structural features of the 'Order Address' class. + * + * @generated + * @ordered + */ + int ORDER_ADDRESS_FEATURE_COUNT = ADDRESS_FEATURE_COUNT + 5; + /** * The meta object id for the '{@link org.eclipse.emf.cdo.tests.model1.VAT VAT}' enum. @@ -598,7 +684,7 @@ public interface Model1Package extends EPackage * @see org.eclipse.emf.cdo.tests.model1.impl.Model1PackageImpl#getVAT() * @generated */ - int VAT = 10; + int VAT = 11; /** * Returns the meta object for class '{@link org.eclipse.emf.cdo.tests.model1.Supplier Supplier}'. + * + * @return the meta object for class 'Order Address'. + * @see org.eclipse.emf.cdo.tests.model1.OrderAddress + * @generated + */ + EClass getOrderAddress(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.emf.cdo.tests.model1.OrderAddress#isTestAttribute Test Attribute}'. + * + * + * @return the meta object for the attribute 'Test Attribute'. + * @see org.eclipse.emf.cdo.tests.model1.OrderAddress#isTestAttribute() + * @see #getOrderAddress() + * @generated + */ + EAttribute getOrderAddress_TestAttribute(); + /** * Returns the meta object for enum '{@link org.eclipse.emf.cdo.tests.model1.VAT VAT}'. @@ -1118,6 +1225,24 @@ public interface Model1Package extends EPackage */ EAttribute PRODUCT__VAT = eINSTANCE.getProduct_Vat(); + /** + * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl Order Address}' + * class. + * + * @see org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl + * @see org.eclipse.emf.cdo.tests.model1.impl.Model1PackageImpl#getOrderAddress() + * @generated + */ + EClass ORDER_ADDRESS = eINSTANCE.getOrderAddress(); + + /** + * The meta object literal for the 'Test Attribute' attribute feature. + * + * + * @generated + */ + EAttribute ORDER_ADDRESS__TEST_ATTRIBUTE = eINSTANCE.getOrderAddress_TestAttribute(); + /** * The meta object literal for the '{@link org.eclipse.emf.cdo.tests.model1.VAT VAT}' enum. diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/OrderAddress.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/OrderAddress.java new file mode 100644 index 0000000000..e2feaa156d --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/OrderAddress.java @@ -0,0 +1,52 @@ +/** + * + * + * + * $Id: OrderAddress.java,v 1.1 2008-04-12 10:05:44 estepper Exp $ + */ +package org.eclipse.emf.cdo.tests.model1; + +/** + * A representation of the model object 'Order Address'. + *

+ * The following features are supported: + *

+ *

+ * + * @see org.eclipse.emf.cdo.tests.model1.Model1Package#getOrderAddress() + * @model + * @generated + */ +public interface OrderAddress extends Address, Order, OrderDetail +{ + /** + * Returns the value of the 'Test Attribute' attribute. + *

+ * If the meaning of the 'Test Attribute' attribute isn't clear, there really should be more of a + * description here... + *

+ * + * + * @return the value of the 'Test Attribute' attribute. + * @see #setTestAttribute(boolean) + * @see org.eclipse.emf.cdo.tests.model1.Model1Package#getOrderAddress_TestAttribute() + * @model + * @generated + */ + boolean isTestAttribute(); + + /** + * Sets the value of the '{@link org.eclipse.emf.cdo.tests.model1.OrderAddress#isTestAttribute Test Attribute}' + * attribute. + * + * @param value + * the new value of the 'Test Attribute' attribute. + * @see #isTestAttribute() + * @generated + */ + void setTestAttribute(boolean value); + +} // OrderAddress diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1FactoryImpl.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1FactoryImpl.java index b499935d74..421cd4edef 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1FactoryImpl.java +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1FactoryImpl.java @@ -13,6 +13,7 @@ import org.eclipse.emf.cdo.tests.model1.Customer; import org.eclipse.emf.cdo.tests.model1.Model1Factory; import org.eclipse.emf.cdo.tests.model1.Model1Package; import org.eclipse.emf.cdo.tests.model1.Order; +import org.eclipse.emf.cdo.tests.model1.OrderAddress; import org.eclipse.emf.cdo.tests.model1.OrderDetail; import org.eclipse.emf.cdo.tests.model1.Product; import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; @@ -97,6 +98,8 @@ public class Model1FactoryImpl extends EFactoryImpl implements Model1Factory return (EObject)createCategory(); case Model1Package.PRODUCT: return (EObject)createProduct(); + case Model1Package.ORDER_ADDRESS: + return (EObject)createOrderAddress(); default: throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); } @@ -191,6 +194,17 @@ public class Model1FactoryImpl extends EFactoryImpl implements Model1Factory return product; } + /** + * + * + * @generated + */ + public OrderAddress createOrderAddress() + { + OrderAddressImpl orderAddress = new OrderAddressImpl(); + return orderAddress; + } + /** * * diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1PackageImpl.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1PackageImpl.java index 19c25164f4..319b3cacb1 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1PackageImpl.java +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/Model1PackageImpl.java @@ -13,6 +13,7 @@ import org.eclipse.emf.cdo.tests.model1.Customer; import org.eclipse.emf.cdo.tests.model1.Model1Factory; import org.eclipse.emf.cdo.tests.model1.Model1Package; import org.eclipse.emf.cdo.tests.model1.Order; +import org.eclipse.emf.cdo.tests.model1.OrderAddress; import org.eclipse.emf.cdo.tests.model1.OrderDetail; import org.eclipse.emf.cdo.tests.model1.Product; import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; @@ -68,6 +69,13 @@ public class Model1PackageImpl extends EPackageImpl implements Model1Package */ private EClass productEClass = null; + /** + * + * + * @generated + */ + private EClass orderAddressEClass = null; + /** * * @@ -356,6 +364,26 @@ public class Model1PackageImpl extends EPackageImpl implements Model1Package return (EAttribute)productEClass.getEStructuralFeatures().get(2); } + /** + * + * + * @generated + */ + public EClass getOrderAddress() + { + return orderAddressEClass; + } + + /** + * + * + * @generated + */ + public EAttribute getOrderAddress_TestAttribute() + { + return (EAttribute)orderAddressEClass.getEStructuralFeatures().get(0); + } + /** * * @@ -610,6 +638,9 @@ public class Model1PackageImpl extends EPackageImpl implements Model1Package createEReference(productEClass, PRODUCT__ORDER_DETAILS); createEAttribute(productEClass, PRODUCT__VAT); + orderAddressEClass = createEClass(ORDER_ADDRESS); + createEAttribute(orderAddressEClass, ORDER_ADDRESS__TEST_ATTRIBUTE); + // Create enums vatEEnum = createEEnum(VAT); } @@ -647,6 +678,9 @@ public class Model1PackageImpl extends EPackageImpl implements Model1Package customerEClass.getESuperTypes().add(this.getAddress()); purchaseOrderEClass.getESuperTypes().add(this.getOrder()); salesOrderEClass.getESuperTypes().add(this.getOrder()); + orderAddressEClass.getESuperTypes().add(this.getAddress()); + orderAddressEClass.getESuperTypes().add(this.getOrder()); + orderAddressEClass.getESuperTypes().add(this.getOrderDetail()); // Initialize classes and features; add operations and parameters initEClass(addressEClass, Address.class, "Address", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); @@ -737,6 +771,12 @@ public class Model1PackageImpl extends EPackageImpl implements Model1Package initEAttribute(getProduct_Vat(), this.getVAT(), "vat", "vat15", 0, 1, Product.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEClass(orderAddressEClass, OrderAddress.class, "OrderAddress", !IS_ABSTRACT, !IS_INTERFACE, + IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getOrderAddress_TestAttribute(), ecorePackage.getEBoolean(), "testAttribute", null, 0, 1, + OrderAddress.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, + IS_ORDERED); + // Initialize enums and add enum literals initEEnum(vatEEnum, org.eclipse.emf.cdo.tests.model1.VAT.class, "VAT"); addEEnumLiteral(vatEEnum, org.eclipse.emf.cdo.tests.model1.VAT.VAT0); diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/OrderAddressImpl.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/OrderAddressImpl.java new file mode 100644 index 0000000000..ab8e6f179d --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/impl/OrderAddressImpl.java @@ -0,0 +1,218 @@ +/** + * + * + * + * $Id: OrderAddressImpl.java,v 1.1 2008-04-12 10:05:44 estepper Exp $ + */ +package org.eclipse.emf.cdo.tests.model1.impl; + +import org.eclipse.emf.cdo.tests.model1.Model1Package; +import org.eclipse.emf.cdo.tests.model1.Order; +import org.eclipse.emf.cdo.tests.model1.OrderAddress; +import org.eclipse.emf.cdo.tests.model1.OrderDetail; +import org.eclipse.emf.cdo.tests.model1.Product; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EClass; + +/** + * An implementation of the model object 'Order Address'. + *

+ * The following features are implemented: + *

+ *

+ * + * @generated + */ +public class OrderAddressImpl extends AddressImpl implements OrderAddress +{ + /** + * + * + * @generated + */ + protected OrderAddressImpl() + { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() + { + return Model1Package.Literals.ORDER_ADDRESS; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + public EList getOrderDetails() + { + return (EList)eGet(Model1Package.Literals.ORDER__ORDER_DETAILS, true); + } + + /** + * + * + * @generated + */ + public Order getOrder() + { + return (Order)eGet(Model1Package.Literals.ORDER_DETAIL__ORDER, true); + } + + /** + * + * + * @generated + */ + public void setOrder(Order newOrder) + { + eSet(Model1Package.Literals.ORDER_DETAIL__ORDER, newOrder); + } + + /** + * + * + * @generated + */ + public Product getProduct() + { + return (Product)eGet(Model1Package.Literals.ORDER_DETAIL__PRODUCT, true); + } + + /** + * + * + * @generated + */ + public void setProduct(Product newProduct) + { + eSet(Model1Package.Literals.ORDER_DETAIL__PRODUCT, newProduct); + } + + /** + * + * + * @generated + */ + public float getPrice() + { + return ((Float)eGet(Model1Package.Literals.ORDER_DETAIL__PRICE, true)).floatValue(); + } + + /** + * + * + * @generated + */ + public void setPrice(float newPrice) + { + eSet(Model1Package.Literals.ORDER_DETAIL__PRICE, new Float(newPrice)); + } + + /** + * + * + * @generated + */ + public boolean isTestAttribute() + { + return ((Boolean)eGet(Model1Package.Literals.ORDER_ADDRESS__TEST_ATTRIBUTE, true)).booleanValue(); + } + + /** + * + * + * @generated + */ + public void setTestAttribute(boolean newTestAttribute) + { + eSet(Model1Package.Literals.ORDER_ADDRESS__TEST_ATTRIBUTE, new Boolean(newTestAttribute)); + } + + /** + * + * + * @generated + */ + @Override + public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) + { + if (baseClass == Order.class) + { + switch (derivedFeatureID) + { + case Model1Package.ORDER_ADDRESS__ORDER_DETAILS: + return Model1Package.ORDER__ORDER_DETAILS; + default: + return -1; + } + } + if (baseClass == OrderDetail.class) + { + switch (derivedFeatureID) + { + case Model1Package.ORDER_ADDRESS__ORDER: + return Model1Package.ORDER_DETAIL__ORDER; + case Model1Package.ORDER_ADDRESS__PRODUCT: + return Model1Package.ORDER_DETAIL__PRODUCT; + case Model1Package.ORDER_ADDRESS__PRICE: + return Model1Package.ORDER_DETAIL__PRICE; + default: + return -1; + } + } + return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass); + } + + /** + * + * + * @generated + */ + @Override + public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) + { + if (baseClass == Order.class) + { + switch (baseFeatureID) + { + case Model1Package.ORDER__ORDER_DETAILS: + return Model1Package.ORDER_ADDRESS__ORDER_DETAILS; + default: + return -1; + } + } + if (baseClass == OrderDetail.class) + { + switch (baseFeatureID) + { + case Model1Package.ORDER_DETAIL__ORDER: + return Model1Package.ORDER_ADDRESS__ORDER; + case Model1Package.ORDER_DETAIL__PRODUCT: + return Model1Package.ORDER_ADDRESS__PRODUCT; + case Model1Package.ORDER_DETAIL__PRICE: + return Model1Package.ORDER_ADDRESS__PRICE; + default: + return -1; + } + } + return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass); + } + +} // OrderAddressImpl diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1AdapterFactory.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1AdapterFactory.java index 007220c1a4..3fa2016653 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1AdapterFactory.java +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1AdapterFactory.java @@ -12,6 +12,7 @@ import org.eclipse.emf.cdo.tests.model1.Company; import org.eclipse.emf.cdo.tests.model1.Customer; import org.eclipse.emf.cdo.tests.model1.Model1Package; import org.eclipse.emf.cdo.tests.model1.Order; +import org.eclipse.emf.cdo.tests.model1.OrderAddress; import org.eclipse.emf.cdo.tests.model1.OrderDetail; import org.eclipse.emf.cdo.tests.model1.Product; import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; @@ -141,6 +142,12 @@ public class Model1AdapterFactory extends AdapterFactoryImpl return createProductAdapter(); } + @Override + public Adapter caseOrderAddress(OrderAddress object) + { + return createOrderAddressAdapter(); + } + @Override public Adapter defaultCase(EObject object) { @@ -232,6 +239,20 @@ public class Model1AdapterFactory extends AdapterFactoryImpl return null; } + /** + * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.model1.OrderAddress Order Address}'. + * This default implementation returns null so that we can easily ignore cases; it's useful to + * ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see org.eclipse.emf.cdo.tests.model1.OrderAddress + * @generated + */ + public Adapter createOrderAddressAdapter() + { + return null; + } + /** * Creates a new adapter for an object of class '{@link org.eclipse.emf.cdo.tests.model1.Category Category}'. * This default implementation returns null so that we can easily ignore cases; it's useful to diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1Switch.java b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1Switch.java index 633e2919e1..920c3022d5 100644 --- a/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1Switch.java +++ b/plugins/org.eclipse.emf.cdo.tests.model1/src/org/eclipse/emf/cdo/tests/model1/util/Model1Switch.java @@ -12,6 +12,7 @@ import org.eclipse.emf.cdo.tests.model1.Company; import org.eclipse.emf.cdo.tests.model1.Customer; import org.eclipse.emf.cdo.tests.model1.Model1Package; import org.eclipse.emf.cdo.tests.model1.Order; +import org.eclipse.emf.cdo.tests.model1.OrderAddress; import org.eclipse.emf.cdo.tests.model1.OrderDetail; import org.eclipse.emf.cdo.tests.model1.Product; import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; @@ -172,6 +173,16 @@ public class Model1Switch if (result == null) result = defaultCase(theEObject); return result; } + case Model1Package.ORDER_ADDRESS: + { + OrderAddress orderAddress = (OrderAddress)theEObject; + T result = caseOrderAddress(orderAddress); + if (result == null) result = caseAddress(orderAddress); + if (result == null) result = caseOrder(orderAddress); + if (result == null) result = caseOrderDetail(orderAddress); + if (result == null) result = defaultCase(theEObject); + return result; + } default: return defaultCase(theEObject); } @@ -252,6 +263,21 @@ public class Model1Switch return null; } + /** + * Returns the result of interpreting the object as an instance of 'Order Address'. This implementation returns null; returning a non-null result will terminate the switch. + * + * @param object + * the target of the switch. + * @return the result of interpreting the object as an instance of 'Order Address'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseOrderAddress(OrderAddress object) + { + return null; + } + /** * Returns the result of interpreting the object as an instance of 'Category'. * This implementation returns null; returning a non-null result will terminate the switch. diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java index 6bb65cd7b0..7890f33efe 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java @@ -15,6 +15,9 @@ import org.eclipse.emf.cdo.CDOState; import org.eclipse.emf.cdo.CDOTransaction; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.tests.model1.Model1Package; +import org.eclipse.emf.cdo.tests.model1.OrderAddress; +import org.eclipse.emf.cdo.tests.model1.OrderDetail; import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; import org.eclipse.emf.cdo.tests.model1.Supplier; import org.eclipse.emf.cdo.util.CDOUtil; @@ -623,4 +626,62 @@ public class InitialTest extends AbstractCDOTest msg("Verifying name"); assertEquals("Stepper", s.getName()); } + + /** + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=226317 + */ + public void testMultipleInheritence() throws Exception + { + CDOSession session = openModel1Session(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource("/test1"); + OrderAddress orderAddress = Model1Factory.eINSTANCE.createOrderAddress(); + resource.getContents().add(orderAddress); + + assertEquals(Model1Package.eINSTANCE.getAddress_City().getFeatureID(), Model1Package.eINSTANCE + .getOrderDetail_Price().getFeatureID()); + + orderAddress.setCity("ALLO"); + orderAddress.setPrice(2.8f); + orderAddress.setTestAttribute(true); + + assertEquals(2.8f, orderAddress.getPrice()); + assertEquals("ALLO", orderAddress.getCity()); + + OrderDetail orderDetail = Model1Factory.eINSTANCE.createOrderDetail(); + resource.getContents().add(orderDetail); + orderDetail.setPrice(3f); + + transaction.commit(); + + orderAddress.setCity("ALLO"); + + transaction.commit(); + session.close(); + + session = openModel1Session(); + + msg("Opening transaction"); + transaction = session.openTransaction(); + orderAddress = (OrderAddress)transaction.getObject(orderAddress.cdoID(), true); + + assertEquals(2.8f, orderAddress.getPrice()); + assertEquals("ALLO", orderAddress.getCity()); + + orderAddress.setPrice(2.8f); + transaction.commit(); + session.close(); + + session = openModel1Session(); + + transaction = session.openTransaction(); + orderAddress = (OrderAddress)transaction.getObject(orderAddress.cdoID(), true); + + assertEquals(2.8f, orderAddress.getPrice()); + assertEquals("ALLO", orderAddress.getCity()); + + orderAddress.setPrice(2.8f); + + session.close(); + } } -- cgit v1.2.3