[jboss-svn-commits] JBL Code SVN: r6528 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: base util/asm
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Oct 2 14:33:22 EDT 2006
Author: tirelli
Date: 2006-10-02 14:33:16 -0400 (Mon, 02 Oct 2006)
New Revision: 6528
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java
Log:
JBRULES-44:
* Ignoring final methods when overrinding methods in the proxy
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java 2006-10-02 18:28:22 UTC (rev 6527)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java 2006-10-02 18:33:16 UTC (rev 6528)
@@ -43,7 +43,7 @@
public static Class getProxy(final Class clazz) {
try {
- final ClassFieldInspector inspector = new ClassFieldInspector( clazz );
+ final ClassFieldInspector inspector = new ClassFieldInspector( clazz, false );
final String className = Type.getInternalName( clazz ) + "ShadowProxy";
// generating byte array to create target class
final byte[] bytes = dump( clazz,
@@ -78,9 +78,6 @@
Map fieldNames = inspector.getFieldNames();
Map fieldTypes = inspector.getFieldTypes();
Map fieldGetters = inspector.getGetterMethods();
- fieldNames.remove( "class" );
- fieldTypes.remove( "class" );
- fieldGetters.remove( "class" );
for ( Iterator it = fieldNames.keySet().iterator(); it.hasNext(); ) {
String fieldName = (String) it.next();
buildField( FIELD_NAME_PREFIX + fieldName,
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-10-02 18:28:22 UTC (rev 6527)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/ClassFieldInspector.java 2006-10-02 18:33:16 UTC (rev 6528)
@@ -57,25 +57,30 @@
* @throws IOException
*/
public ClassFieldInspector(final Class clazz) throws IOException {
- processClass( clazz );
+ this(clazz, true);
}
+
+ public ClassFieldInspector(final Class clazz, final boolean includeFinalMethods) throws IOException {
+ processClass( clazz, includeFinalMethods );
+ }
/** Walk up the inheritance hierarchy recursively, reading in fields */
- private void processClass(final Class clazz) throws IOException {
+ private void processClass(final Class clazz, final boolean includeFinalMethods) throws IOException {
final String name = getResourcePath( clazz );
final InputStream stream = clazz.getResourceAsStream( name );
final ClassReader reader = new ClassReader( stream );
final ClassFieldVisitor visitor = new ClassFieldVisitor( clazz,
+ includeFinalMethods,
this );
reader.accept( visitor,
false );
if ( clazz.getSuperclass() != null ) {
- processClass( clazz.getSuperclass() );
+ processClass( clazz.getSuperclass(), includeFinalMethods );
}
if ( clazz.isInterface() ) {
final Class[] interfaces = clazz.getInterfaces();
for ( int i = 0; i < interfaces.length; i++ ) {
- processClass( interfaces[i] );
+ processClass( interfaces[i], includeFinalMethods );
}
}
}
@@ -128,10 +133,13 @@
private Class clazz;
private ClassFieldInspector inspector;
+ private boolean includeFinalMethods;
ClassFieldVisitor(final Class cls,
+ final boolean includeFinalMethods,
final ClassFieldInspector inspector) {
this.clazz = cls;
+ this.includeFinalMethods = includeFinalMethods;
this.inspector = inspector;
}
@@ -140,9 +148,10 @@
final String desc,
final String signature,
final String[] exceptions) {
- //only want public methods that start with 'get' or 'is'
+ //only want public methods
//and have no args, and return a value
- if ( (access & Opcodes.ACC_PUBLIC) > 0 ) {
+ int mask = this.includeFinalMethods ? Opcodes.ACC_PUBLIC : Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL;
+ if ( (access & mask) == Opcodes.ACC_PUBLIC ) {
if ( desc.startsWith( "()" ) && !(name.equals( "<init>" )) ) {// && ( name.startsWith("get") || name.startsWith("is") ) ) {
try {
final Method method = this.clazz.getMethod( name,
More information about the jboss-svn-commits
mailing list