|
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 {
|