[ 
https://issues.apache.org/jira/browse/PYLUCENE-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17181772#comment-17181772
 ] 

Andrea Sterbini edited comment on PYLUCENE-55 at 8/21/20, 9:59 AM:
-------------------------------------------------------------------

Thanks for the solution.

Still sometimes I find that something is missing. E.g. one of the methods I 
need is it.uniroma1.lcl.babelnet.BabelNet.getSynsets(...), which has many 
implementations (I need at least the first three)

 
{code:java}
// from it/uniroma1/lcl/babelnet/BabelNet.class
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String);                                                   
                                                
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, it.uniroma1.lcl.jlt.util.Language);                
                                                
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, it.uniroma1.lcl.jlt.util.Language, 
com.babelscape.util.POS);                                       
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, 
java.util.Collection<it.uniroma1.lcl.jlt.util.Language>);                       
                   
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, 
java.util.Collection<it.uniroma1.lcl.jlt.util.Language>, 
com.babelscape.util.POS);                 
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(it.uniroma1.lcl.kb.ResourceID...);    
{code}
Yet, after building and installing the module the resulting BabelNet class 
shows only 3 versions of the method
{code:java}
// from ... build/_babelnet/it/uniroma1/lcl/babelnet/BabelNet.h
          ::java::util::List getSynsets(const JArray< 
::it::uniroma1::lcl::kb::ResourceID > &) const;                                 
                                                        
          ::java::util::List getSynsets(const ::java::lang::String &) const;    
                                                                                
                              
          ::java::util::List getSynsets(const ::java::lang::String &, jboolean) 
const;         
{code}
I have tried also to add the methods I need to the mappings but the result is 
the same, non-deterministic, the resulting module could have or could have not 
the methods.
{code:java}
// from the Makefile
MAPPING=
MAPPING+=--mapping it/uniroma1/lcl/babelnet/BabelNet     
'getSynsets:(Ljava/lang/String;Lit/uniroma1/lcl/jlt/util/Language;)Ljava/lang/List<it/uniroma1/lcl/babelnet/BabelSynset>;'
MAPPING+=--mapping it/uniroma1/lcl/babelnet/BabelNet     
'getSynsets:(Ljava/lang/String;Lit/uniroma1/lcl/jlt/util/Language;com/babelscape/util/POS;)Ljava/lang/List<it/uniroma1/lcl/babelnet/BabelSynset>;'
MAPPING+=--mapping it/uniroma1/lcl/babelnet/BabelSynset  
'getLemmas:()Ljava/lang/List<it/uniroma1/lcl/babelnet/data/BabelLemma>;'
{code}
What is the reason for so different generated modules?

How the order of class wrapper generation influences the resulting methods?

Why some methods sometimes are NON generated?


was (Author: a.sterbini):
Thanks for the solution.

Still sometimes I find that something is missing. E.g. one of the methods I 
need is it.uniroma1.lcl.babelnet.BabelNet.getSynsets(...), which has many 
implementations (I need at least the first three)

 
{code:java}
// from it/uniroma1/lcl/babelnet/BabelNet.class
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String);                                                   
                                                
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, it.uniroma1.lcl.jlt.util.Language);                
                                                
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, it.uniroma1.lcl.jlt.util.Language, 
com.babelscape.util.POS);                                       
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, 
java.util.Collection<it.uniroma1.lcl.jlt.util.Language>);                       
                   
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(java.lang.String, 
java.util.Collection<it.uniroma1.lcl.jlt.util.Language>, 
com.babelscape.util.POS);                 
  public java.util.List<it.uniroma1.lcl.babelnet.BabelSynset> 
getSynsets(it.uniroma1.lcl.kb.ResourceID...);    
{code}
Yet, after building and installing the module the resulting BabelNet class 
shows only 3 versions of the method

 

 
{code:java}
// from ... build/_babelnet/it/uniroma1/lcl/babelnet/BabelNet.h
          ::java::util::List getSynsets(const JArray< 
::it::uniroma1::lcl::kb::ResourceID > &) const;                                 
                                                        
          ::java::util::List getSynsets(const ::java::lang::String &) const;    
                                                                                
                              
          ::java::util::List getSynsets(const ::java::lang::String &, jboolean) 
const;         
{code}
I have tried also to add the methods I need to the mappings but the result is 
the same, non-deterministic, the resulting module could have or could have not 
the methods.

 
{code:java}
// from the Makefile
MAPPING=
MAPPING+=--mapping it/uniroma1/lcl/babelnet/BabelNet     
'getSynsets:(Ljava/lang/String;Lit/uniroma1/lcl/jlt/util/Language;)Ljava/lang/List<it/uniroma1/lcl/babelnet/BabelSynset>;'
MAPPING+=--mapping it/uniroma1/lcl/babelnet/BabelNet     
'getSynsets:(Ljava/lang/String;Lit/uniroma1/lcl/jlt/util/Language;com/babelscape/util/POS;)Ljava/lang/List<it/uniroma1/lcl/babelnet/BabelSynset>;'
MAPPING+=--mapping it/uniroma1/lcl/babelnet/BabelSynset  
'getLemmas:()Ljava/lang/List<it/uniroma1/lcl/babelnet/data/BabelLemma>;'
{code}
 

 

What is the reason for so different generated modules?

How the order of class wrapper generation influences the resulting methods?

Why some methods sometimes are NON generated?

 

 

 

 

 

> JCC creates the classes in non-deterministic order
> --------------------------------------------------
>
>                 Key: PYLUCENE-55
>                 URL: https://issues.apache.org/jira/browse/PYLUCENE-55
>             Project: PyLucene
>          Issue Type: Bug
>            Reporter: Andrea Sterbini
>            Priority: Major
>
> I am trying to wrap the BabelNet API code.
> The resulting module is non-deterministically not-working (once every 5 I get 
> it OK).
> This seems to be related to the order the classes are handled, because they 
> are kept in a set, which has nondeterministic order.
> By changing cpp.py at line 696 to sort the class names I get a working module.
> {code:java}
> // changed from
> for cls in todo:
> {code}
> {code:java}
> // to
> for cls in sorted(todo, key=lambda c: c.getName()):{code}
> I have been luky with this way to order the classes. Possibly a better 
> algorithm exists to fix this bug. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to