[jboss-jira] [JBoss JIRA] Closed: (JBRULES-737) Filter out <clinit> method when inspecting classes

Edson Tirelli (JIRA) jira-events at lists.jboss.org
Wed Mar 14 18:02:32 EDT 2007


     [ http://jira.jboss.com/jira/browse/JBRULES-737?page=all ]

Edson Tirelli closed JBRULES-737.
---------------------------------

    Resolution: Done

Patch applied. 

Thank you for reporting and providing the patch.

> Filter out <clinit> method when inspecting classes
> --------------------------------------------------
>
>                 Key: JBRULES-737
>                 URL: http://jira.jboss.com/jira/browse/JBRULES-737
>             Project: JBoss Rules
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: Reteoo
>    Affects Versions: 3.1-m1
>            Reporter: Edson Tirelli
>         Assigned To: Edson Tirelli
>             Fix For: 3.1-m2
>
>
> FROM TERRY LAURENZO:
> -------------------------------------------------
> The attached diff (against 3.0.5 sources) adds a condition to the  ClassFieldInspector to not analyze methods named <clinit>.  For some  reason, the Groovy compiler is outputing classes that were causing  this check to choke and throw an IllegalArgumentException because of  a <clinit> method with ACC_PUBLIC access code.
> Applying this patch allows Drools to operate correctly with compiled  Groovy Fact classes.
> This seems like a pretty innocuous change that someone should apply  to SVN.  Unfortunately, it is rather difficult to create a test case  for it.
> Terry Laurenzo 
> --------------
> Index: src/main/java/org/drools/util/asm/ClassFieldInspector.java
> ===================================================================
> *** src/main/java/org/drools/util/asm/ClassFieldInspector.java	Wed Mar 14 08:58:24 2007
> --- src/main/java/org/drools/util/asm/ClassFieldInspector.java	Mon Mar 12 11:21:23 2007
> *************** public class ClassFieldInspector {
> *** 241,247 ****
>               //only want public methods that start with 'get' or 'is'
>               //and have no args, and return a value
>               if ( (access & Opcodes.ACC_PUBLIC) > 0 ) {
> !                 if ( desc.startsWith( "()" ) && !(name.equals( "<init>" )) ) {// && ( name.startsWith("get") || name.startsWith("is") ) ) {
>                       try {
>                           final Method method = this.clazz.getMethod( name,
>                                                                       (Class[]) null );
> --- 241,247 ----
>               //only want public methods that start with 'get' or 'is'
>               //and have no args, and return a value
>               if ( (access & Opcodes.ACC_PUBLIC) > 0 ) {
> !                 if ( desc.startsWith( "()" ) && !(name.equals( "<init>" )) && !(name.equals( "<clinit>" )) ) {// && ( name.startsWith("get") || name.startsWith("is") ) ) {
>                       try {
>                           final Method method = this.clazz.getMethod( name,
>                                                                       (Class[]) null );

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list