Skip to main content



      Home
Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc)  » [EMF Compare]MatchEngine NPE bug
[EMF Compare]MatchEngine NPE bug [message #121761] Fri, 02 May 2008 11:41 Go to next message
Eclipse UserFriend
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 #121789 is a reply to message #121761] Fri, 02 May 2008 11:57 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: merks.ca.ibm.com

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 #122141 is a reply to message #121761] Wed, 07 May 2008 04:57 Go to previous message
Eclipse UserFriend
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 Go to previous message
Eclipse UserFriend
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 Go to previous message
Eclipse UserFriend
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));
>
> }
Previous Topic:Graphical XML Schema Editor for 3.3.2?
Next Topic:[CDO 0.8.0] Transaction/Objects scope
Goto Forum:
  


Current Time: Fri May 09 15:13:02 EDT 2025

Powered by FUDForum. Page generated in 0.12180 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top