Generated eBaseStructuralFeatureID issue [message #1140514] |
Wed, 16 October 2013 08:06  |
Eclipse User |
|
|
|
Hi,
I have the following ECore model (simplified)
abstract class Package<T extends PackageElement>
reference elements : T (containment, inverse to PackageElement.package)
abstract class PackageElement
reference package : Package (container, inverse to Package.elements)
class DomainElementPackage extends Package<DomainElement>
class DomainElement extends PackageElement
class Entity extends DomainElement
The generated code in EntityImpl.eBaseStructuralFeatureID:
public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
if (baseClass == PackageElement.class) {
switch (derivedFeatureID) {
case DomainPackage.ENTITY__PACKAGE: return DomainPackage.PACKAGE_ELEMENT__PACKAGE;
default: return -1;
}
}
if (baseClass == DomainElement.class) {
switch (derivedFeatureID) {
default: return -1;
}
}
return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
}
Which causes incorrect results from ECoreEList.contains() in case the number of Entity objects in a DomainElementPackage is greater than 4.
Is it a bug or there is something wrong with my metamodel?
Thanks,
Michal
|
|
|
Re: Generated eBaseStructuralFeatureID issue [message #1140596 is a reply to message #1140514] |
Wed, 16 October 2013 09:17   |
Eclipse User |
|
|
|
Michael,
Just looking at your snippets doesn't really tell me what if anything is
going wrong. If you want me to have a look, please provide a
reproducible self contained test case as a zipped project attached to a
bugzilla. Please also indicate which version of EMF you're using; it
sounds vaguely like something the e4 team notices and was fixed...
On 16/10/2013 2:06 PM, Michal Kleczek wrote:
> Hi,
>
> I have the following ECore model (simplified)
>
> abstract class Package<T extends PackageElement>
> reference elements : T (containment, inverse to PackageElement.package)
>
> abstract class PackageElement
> reference package : Package (container, inverse to Package.elements)
>
> class DomainElementPackage extends Package<DomainElement>
>
> class DomainElement extends PackageElement
>
> class Entity extends DomainElement
>
>
> The generated code in EntityImpl.eBaseStructuralFeatureID:
>
> public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?>
> baseClass) {
> if (baseClass == PackageElement.class) {
> switch (derivedFeatureID) {
> case DomainPackage.ENTITY__PACKAGE: return
> DomainPackage.PACKAGE_ELEMENT__PACKAGE;
> default: return -1;
> }
> }
> if (baseClass == DomainElement.class) {
> switch (derivedFeatureID) {
> default: return -1;
> }
> }
> return super.eBaseStructuralFeatureID(derivedFeatureID,
> baseClass);
> }
>
>
> Which causes incorrect results from ECoreEList.contains() in case the
> number of Entity objects in a DomainElementPackage is greater than 4.
>
> Is it a bug or there is something wrong with my metamodel?
>
> Thanks,
> Michal
|
|
|
|
|
Re: Generated eBaseStructuralFeatureID issue [message #1140876 is a reply to message #1140697] |
Wed, 16 October 2013 13:24  |
Eclipse User |
|
|
|
EMF version is 2.9.1
Indeed - there is multiple inheritance involved - didn't show that in my snipplet. Actually it is:
class NamedElement
abstract class Package<T extends PackageElement> extends NamedElement
reference elements : T (containment, inverse to PackageElement.package)
abstract class PackageElement
reference package : Package (container, inverse to Package.elements)
class DomainElementPackage extends Package<DomainElement>
class DomainElement extends PackageElement
class Entity extends NamedElement, DomainElement
|
|
|
Powered by
FUDForum. Page generated in 0.04303 seconds