[jboss-svn-commits] JBL Code SVN: r9411 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Feb 9 14:05:17 EST 2007
Author: tirelli
Date: 2007-02-09 14:05:17 -0500 (Fri, 09 Feb 2007)
New Revision: 9411
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_primitiveArray.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/codehaus/jfdi/interpreter/ClassTypeResolver.java
Log:
JBRULES-657: fixing type resolver to resolve array classes
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2007-02-09 11:59:41 UTC (rev 9410)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2007-02-09 19:05:17 UTC (rev 9411)
@@ -3862,14 +3862,19 @@
final Primitives p1 = new Primitives();
p1.setPrimitiveArrayAttribute( new int[] { 1, 2, 3 } );
+ p1.setArrayAttribute( new String[] { "a","b" } );
workingMemory.assertObject( p1 );
workingMemory.fireAllRules();
- assertEquals( 1,
+ assertEquals( 3,
result.size() );
assertEquals( 3,
((Integer)result.get( 0 )).intValue());
+ assertEquals( 2,
+ ((Integer)result.get( 1 )).intValue());
+ assertEquals( 3,
+ ((Integer)result.get( 2 )).intValue());
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_primitiveArray.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_primitiveArray.drl 2007-02-09 11:59:41 UTC (rev 9410)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_primitiveArray.drl 2007-02-09 19:05:17 UTC (rev 9411)
@@ -2,8 +2,32 @@
global java.util.List result;
-rule "Test Array"
+function boolean testNonEmptyArray(int[] array) {
+ return array != null && array.length > 0;
+}
+
+function boolean isNonEmptyObjectArray(Object[] array) {
+ return array != null && array.length > 0;
+}
+
+rule "Primitive array in function" salience 20
when
+ Primitives( $array : primitiveArrayAttribute )
+ eval( testNonEmptyArray($array) )
+ then
+ result.add( new Integer( $array.length ) );
+end
+
+rule "Primitive Array with Object in function" salience 10
+ when
+ Primitives( $sArray : arrayAttribute )
+ eval( isNonEmptyObjectArray($sArray) )
+ then
+ result.add( new Integer( $sArray.length ) );
+end
+
+rule "Test Array" salience 0
+ when
Primitives( $array : primitiveArrayAttribute -> (($array != null) && ($array.length > 0)))
then
result.add( new Integer( $array.length ) );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/codehaus/jfdi/interpreter/ClassTypeResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/codehaus/jfdi/interpreter/ClassTypeResolver.java 2007-02-09 11:59:41 UTC (rev 9410)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/codehaus/jfdi/interpreter/ClassTypeResolver.java 2007-02-09 19:05:17 UTC (rev 9411)
@@ -32,8 +32,9 @@
private final ClassLoader classLoader;
private Map cachedImports = new HashMap();
+
public ClassTypeResolver() {
- this( Collections.EMPTY_LIST );
+ this( Collections.EMPTY_LIST );
}
public ClassTypeResolver(final List imports) {
@@ -95,29 +96,53 @@
/* (non-Javadoc)
* @see org.drools.semantics.java.TypeResolver#resolveType(java.lang.String)
*/
- public Class resolveType(final String className) throws ClassNotFoundException {
+ public Class resolveType(String className) throws ClassNotFoundException {
Class clazz = null;
+ boolean isArray = false;
//is the class a primitive?
- if ( "boolean".equals( className )) {
+ if ( "boolean".equals( className ) ) {
clazz = boolean.class;
} else if ( "byte".equals( className ) ) {
- clazz = byte.class;
+ clazz = byte.class;
} else if ( "short".equals( className ) ) {
- clazz = short.class;
+ clazz = short.class;
} else if ( "char".equals( className ) ) {
- clazz = char.class;
+ clazz = char.class;
} else if ( "int".equals( className ) ) {
- clazz = int.class;
+ clazz = int.class;
} else if ( "long".equals( className ) ) {
- clazz = long.class;
+ clazz = long.class;
} else if ( "float".equals( className ) ) {
- clazz = float.class;
+ clazz = float.class;
} else if ( "double".equals( className ) ) {
- clazz = double.class;
+ clazz = double.class;
+ // Could also be a primitive array
+ } else if ( "boolean[]".equals( className ) ) {
+ clazz = boolean[].class;
+ } else if ( "byte[]".equals( className ) ) {
+ clazz = byte[].class;
+ } else if ( "short[]".equals( className ) ) {
+ clazz = short[].class;
+ } else if ( "char[]".equals( className ) ) {
+ clazz = char[].class;
+ } else if ( "int[]".equals( className ) ) {
+ clazz = int[].class;
+ } else if ( "long[]".equals( className ) ) {
+ clazz = long[].class;
+ } else if ( "float[]".equals( className ) ) {
+ clazz = float[].class;
+ } else if ( "double[]".equals( className ) ) {
+ clazz = double[].class;
+ // Could be primitive array of objects
+ } else if ( className.endsWith( "[]" ) ) {
+ String componentName = className.substring( 0,
+ className.length() - 2 );
+ className = componentName;
+ isArray = true;
}
-
- if( clazz == null ) {
+
+ if ( clazz == null ) {
// Now try the package object type cache
clazz = lookupFromCache( className );
}
@@ -144,15 +169,6 @@
}
}
- // make a last try using java.lang.* package
- if( validClazzCandidates.isEmpty() ) {
- clazz = importClass( "java.lang.*",
- className );
- if ( clazz != null ) {
- validClazzCandidates.add( clazz );
- }
- }
-
// If there are more than one possible resolutions, complain about
// the ambiguity
if ( validClazzCandidates.size() > 1 ) {
@@ -174,10 +190,20 @@
}
// Now try the java.lang package
- if (clazz == null) {
- clazz = defaultClass( className );
+ if ( clazz == null ) {
+ clazz = defaultClass( className );
}
+ // If array component class was found, try to resolve the array class of it
+ if( isArray && clazz != null ) {
+ String arrayClassName = new StringBuffer().append( "[L" ).append( clazz.getName() ).append( ";" ).toString();
+ try {
+ clazz = Class.forName( arrayClassName );
+ } catch ( ClassNotFoundException e ) {
+ clazz = null;
+ }
+ }
+
// We still can't find the class so throw an exception
if ( clazz == null ) {
throw new ClassNotFoundException( "Unable to find class '" + className + "'" );
@@ -234,22 +260,23 @@
}
private Class defaultClass(String className) {
- String qualifiedClass = "java.lang." + className;
- Class clazz = null;
- try {
- clazz = this.classLoader.loadClass(qualifiedClass);
- } catch (final ClassNotFoundException e) {
- // do nothing
- }
- if (clazz != null) {
- if (this.cachedImports == Collections.EMPTY_MAP) {
- this.cachedImports = new HashMap();
- }
- this.cachedImports.put(className, clazz);
- }
- return clazz;
- }
-
+ String qualifiedClass = "java.lang." + className;
+ Class clazz = null;
+ try {
+ clazz = this.classLoader.loadClass( qualifiedClass );
+ } catch ( final ClassNotFoundException e ) {
+ // do nothing
+ }
+ if ( clazz != null ) {
+ if ( this.cachedImports == Collections.EMPTY_MAP ) {
+ this.cachedImports = new HashMap();
+ }
+ this.cachedImports.put( className,
+ clazz );
+ }
+ return clazz;
+ }
+
public boolean isEmpty() {
return this.imports.isEmpty();
}
More information about the jboss-svn-commits
mailing list