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:
+ *
+ * - {@link org.eclipse.emf.cdo.tests.model1.OrderAddress#isTestAttribute Test Attribute}
+ *
+ *
+ *
+ * @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:
+ *
+ * - {@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl#getOrderDetails Order Details}
+ * - {@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl#getOrder Order}
+ * - {@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl#getProduct Product}
+ * - {@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl#getPrice Price}
+ * - {@link org.eclipse.emf.cdo.tests.model1.impl.OrderAddressImpl#isTestAttribute Test Attribute}
+ *
+ *
+ *
+ * @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