From: <jbo...@li...> - 2006-07-08 23:04:03
|
Author: mar...@jb... Date: 2006-07-08 19:03:53 -0400 (Sat, 08 Jul 2006) New Revision: 4955 Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/asm/ClassFieldInspectorTest.java Log: JBRULES-365 bug in the compiler when creating Field Extractors for upper-case letter accessors -It now builds up a map of correct case for the fields and attempts to use this first. Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java 2006-07-08 17:05:01 UTC (rev 4954) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java 2006-07-08 23:03:53 UTC (rev 4955) @@ -127,6 +127,7 @@ private Class clazz; private ClassFieldInspector inspector; + private Map fields = new HashMap(); ClassFieldVisitor(final Class cls, final ClassFieldInspector inspector) { @@ -159,65 +160,50 @@ return null; } - public void visit(final int arg0, - final int arg1, - final String arg2, - final String arg3, - final String[] arg4, - final String arg5) { + public void visitInnerClass(String name, + String outerName, + String innerName, + int access) { } - public void visitInnerClass(final String arg0, - final String arg1, - final String arg2, - final int arg3) { + public void visitAttribute(Attribute attr) { } - public void visitField(final int access, - final String arg1, - final String arg2, - final Object arg3, - final Attribute arg4) { - } - - public void visitAttribute(final Attribute arg0) { - } - public void visitEnd() { } - public void visit(final int arg0, - final int arg1, - final String arg2, - final String arg3, - final String arg4, - final String[] arg5) { - + public void visit(int version, + int access, + String name, + String signature, + String superName, + String[] interfaces) { } - public void visitSource(final String arg0, - final String arg1) { + public void visitSource(String source, + String debug) { } - public void visitOuterClass(final String arg0, - final String arg1, - final String arg2) { + public void visitOuterClass(String owner, + String name, + String desc) { } - public AnnotationVisitor visitAnnotation(final String arg0, - final boolean arg1) { + public AnnotationVisitor visitAnnotation(String desc, + boolean visible) { return new ClassFieldAnnotationVisitor(); } - public FieldVisitor visitField(final int arg0, - final String arg1, - final String arg2, - final String arg3, - final Object arg4) { - + public FieldVisitor visitField(final int access, + final String name, + final String desc, + final String signature, + final Object value) { + this.fields.put( name.toLowerCase(), + name ); return null; } @@ -276,10 +262,15 @@ private String calcFieldName(String name, final int offset) { - name = name.substring( offset ); - final char first = Character.toLowerCase( name.charAt( 0 ) ); - name = first + name.substring( 1 ); - return name; + if ( offset > 0 ) { + name = name.substring( offset ); + } + String result = ( String ) this.fields.get( name.toLowerCase() ); + if ( result == null ) { + final char first = Character.toLowerCase( name.charAt( 0 ) ); + result = first + name.substring( 1 ); + } + return result; } } Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/asm/ClassFieldInspectorTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/asm/ClassFieldInspectorTest.java 2006-07-08 17:05:01 UTC (rev 4954) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/util/asm/ClassFieldInspectorTest.java 2006-07-08 23:03:53 UTC (rev 4955) @@ -28,7 +28,7 @@ public void testIt() throws Exception { final ClassFieldInspector ext = new ClassFieldInspector( Person.class ); - assertEquals( 6, + assertEquals( 7, ext.getPropertyGetters().size() ); assertEquals( "getAge", ((Method) ext.getPropertyGetters().get( 0 )).getName() ); @@ -39,7 +39,7 @@ final Map names = ext.getFieldNames(); assertNotNull( names ); - assertEquals( 6, + assertEquals( 7, names.size() ); assertEquals( 0, ((Integer) names.get( "age" )).intValue() ); @@ -163,6 +163,15 @@ ext.getFieldTypes().get( "foo" ) ); } + + public void testWierdCapsForField() throws Exception { + final ClassFieldInspector ext = new ClassFieldInspector( Person.class ); + final Map methods = ext.getGetterMethods(); + assertEquals( "getURI", + ((Method) methods.get( "URI" )).getName() ); + assertEquals( 7, + methods.size() ); + } static class NonGetter { @@ -187,6 +196,7 @@ private boolean happy; private String name; private int age; + private String URI; public int getAge() { return this.age; @@ -226,6 +236,15 @@ public String getAlsoBad(final String s) { return "ignored"; } + + //this should show up, as its a getter, but all CAPS + public String getURI() { + return this.URI; + } + + public void setURI(String URI) { + this.URI = URI; + } } static class SubPerson { |