[EMF Compare]MatchEngine NPE bug [message #121761] |
Fri, 02 May 2008 11:41  |
Eclipse User |
|
|
|
Hi,
It seems there is a bug in the GenericMatchEngine.hasSameUri() code:
if one of the EObject returns an empty eResource() (which happens for some
objects in my model), it throws a NPE. I suggest the following fix below.
Thanks,
David
/**
* Checks wether the two given {@link EObject} have the same URI.
*
* @param obj1
* First of the two {@link EObject} we're comparing.
* @param obj2
* Second {@link EObject} we're comparing.
* @return <code>True</code> if the {@link EObject}s have the same URI,
<code>False</code> otherwise.
*/
private boolean hasSameUri(EObject obj1, EObject obj2) {
if ( obj1.eResource() == obj2.eResource() ) // null==null returns true
return true;
if ( obj1.eResource() == null || obj2.eResource() == null ) // if one of
them is null and not the other return false
return false;
return
obj1.eResource().getURIFragment(obj1).equals(obj2.eResource( ).getURIFragment(obj2));
}
|
|
|
|
Re: [EMF Compare]MatchEngine NPE bug [message #122141 is a reply to message #121761] |
Wed, 07 May 2008 04:57  |
Eclipse User |
|
|
|
Hi David,
Thanks (again ;) ) for your feedback, we'll apply the fix ASAP.
Cédric
David Michonneau wrote:
> Hi,
>
> It seems there is a bug in the GenericMatchEngine.hasSameUri() code:
>
> if one of the EObject returns an empty eResource() (which happens for some
> objects in my model), it throws a NPE. I suggest the following fix below.
>
> Thanks,
>
> David
> /**
>
> * Checks wether the two given {@link EObject} have the same URI.
>
> *
>
> * @param obj1
>
> * First of the two {@link EObject} we're comparing.
>
> * @param obj2
>
> * Second {@link EObject} we're comparing.
>
> * @return <code>True</code> if the {@link EObject}s have the same URI,
> <code>False</code> otherwise.
>
> */
>
> private boolean hasSameUri(EObject obj1, EObject obj2) {
>
> if ( obj1.eResource() == obj2.eResource() ) // null==null returns true
>
> return true;
>
> if ( obj1.eResource() == null || obj2.eResource() == null ) // if one of
> them is null and not the other return false
>
> return false;
>
> return
>
obj1.eResource().getURIFragment(obj1).equals(obj2.eResource( ).getURIFragment(obj2));
>
> }
|
|
|
Re: [EMF Compare]MatchEngine NPE bug [message #617987 is a reply to message #121761] |
Fri, 02 May 2008 11:57  |
Eclipse User |
|
|
|
Guys,
Just a suggestion. Calling eResource can potentially be quite
expensive, since you have to traverse all the way to the root, so I'd
suggest calling it once and using the returned value multiple times.
David Michonneau wrote:
> Hi,
>
> It seems there is a bug in the GenericMatchEngine.hasSameUri() code:
>
> if one of the EObject returns an empty eResource() (which happens for some
> objects in my model), it throws a NPE. I suggest the following fix below.
>
> Thanks,
>
> David
> /**
>
> * Checks wether the two given {@link EObject} have the same URI.
>
> *
>
> * @param obj1
>
> * First of the two {@link EObject} we're comparing.
>
> * @param obj2
>
> * Second {@link EObject} we're comparing.
>
> * @return <code>True</code> if the {@link EObject}s have the same URI,
> <code>False</code> otherwise.
>
> */
>
> private boolean hasSameUri(EObject obj1, EObject obj2) {
>
> if ( obj1.eResource() == obj2.eResource() ) // null==null returns true
>
> return true;
>
> if ( obj1.eResource() == null || obj2.eResource() == null ) // if one of
> them is null and not the other return false
>
> return false;
>
> return
> obj1.eResource().getURIFragment(obj1).equals(obj2.eResource( ).getURIFragment(obj2));
>
> }
>
>
>
|
|
|
Re: [EMF Compare]MatchEngine NPE bug [message #618014 is a reply to message #121761] |
Wed, 07 May 2008 04:57  |
Eclipse User |
|
|
|
Hi David,
Thanks (again ;) ) for your feedback, we'll apply the fix ASAP.
Cédric
David Michonneau wrote:
> Hi,
>
> It seems there is a bug in the GenericMatchEngine.hasSameUri() code:
>
> if one of the EObject returns an empty eResource() (which happens for some
> objects in my model), it throws a NPE. I suggest the following fix below.
>
> Thanks,
>
> David
> /**
>
> * Checks wether the two given {@link EObject} have the same URI.
>
> *
>
> * @param obj1
>
> * First of the two {@link EObject} we're comparing.
>
> * @param obj2
>
> * Second {@link EObject} we're comparing.
>
> * @return <code>True</code> if the {@link EObject}s have the same URI,
> <code>False</code> otherwise.
>
> */
>
> private boolean hasSameUri(EObject obj1, EObject obj2) {
>
> if ( obj1.eResource() == obj2.eResource() ) // null==null returns true
>
> return true;
>
> if ( obj1.eResource() == null || obj2.eResource() == null ) // if one of
> them is null and not the other return false
>
> return false;
>
> return
>
obj1.eResource().getURIFragment(obj1).equals(obj2.eResource( ).getURIFragment(obj2));
>
> }
|
|
|
Powered by
FUDForum. Page generated in 0.12180 seconds