From: Steve F. <sm...@us...> - 2003-06-27 16:05:54
|
Update of /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/tools In directory sc8-pr-cvs1:/tmp/cvs-serv8236/src/core/com/mockobjects/tools Modified Files: Tag: Nat_reworks_dynamics_from_0_09 Boxer.java Log Message: Further changes from Nat Index: Boxer.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/tools/Attic/Boxer.java,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -r1.1.2.2 -r1.1.2.3 --- Boxer.java 26 Jun 2003 17:32:48 -0000 1.1.2.2 +++ Boxer.java 27 Jun 2003 16:03:03 -0000 1.1.2.3 @@ -10,8 +10,14 @@ import java.lang.reflect.Modifier; import java.util.*; +/** Warning: this tool generates code containing a potentially dangerous pun + */ public class Boxer { + static boolean parameterShouldBeBoxed( Class type ) { + return type == Object.class; + } + static final String INDENT1 = " "; static final String INDENT2 = INDENT1+INDENT1; @@ -163,6 +169,8 @@ for( Iterator oi = overloads.iterator(); oi.hasNext(); ) { Class[] arguments = (Class[])oi.next(); + expandedOverloads.add(arguments); + for( Iterator bi = BOXES.keySet().iterator(); bi.hasNext(); ) { Class primitiveType = (Class)bi.next(); @@ -176,8 +184,27 @@ return expandedOverloads; } - static List listOverloadsForMethod( Class[] parameterTypes ) { + static void removeUnnecessaryOverloads( Method m, List overloads ) { + ListIterator i = overloads.listIterator(); + + filteringMethods: while( i.hasNext() ) { + Class[] overloadedParameterTypes = (Class[])i.next(); + + try { + m.getDeclaringClass().getMethod( m.getName(), + overloadedParameterTypes ); + i.remove(); + } + catch( NoSuchMethodException ex ) { + continue filteringMethods; + } + } + } + + static List listOverloadsForMethod( Method m ) { + Class[] parameterTypes = m.getParameterTypes(); List overloads = new ArrayList(); + overloads.add(parameterTypes); for( int i = 0; i < parameterTypes.length; i++ ) { @@ -186,7 +213,9 @@ } } - return overloads; + removeUnnecessaryOverloads( m, overloads ); + + return overloads; } static void generateBoxExpression( PrintWriter out, @@ -219,7 +248,7 @@ out.print( m.getDeclaringClass().getName() ); out.print("."); } else { - out.print("super."); + out.print("super."); } out.print(m.getName()); out.print("("); @@ -227,7 +256,7 @@ for( int i = 0; i < originalParameterTypes.length; i++ ) { if( i > 0 ) out.print(", "); - if( parameterShouldBeBoxed(originalParameterTypes[i]) ) { + if( originalParameterTypes[i] != overloadedParameterTypes[i] ) { generateBoxExpression( out, overloadedParameterTypes[i], parameterName(i) ); } else { @@ -238,10 +267,6 @@ out.println(");"); } - static boolean parameterShouldBeBoxed( Class type ) { - return type == Object.class; - } - static void generateOverloadedMethod( PrintWriter out, Method m, Class[] overloadedParameterTypes ) @@ -268,7 +293,7 @@ static void generateOverloadsForMethod( PrintWriter out, Method m ) { - List overloads = listOverloadsForMethod( m.getParameterTypes() ); + List overloads = listOverloadsForMethod( m ); if( overloads.size() > 1 ) { for( Iterator i = overloads.iterator(); i.hasNext(); ) { @@ -295,9 +320,10 @@ Class template, String className ) { out.println( "// WARNING: DO NOT EDIT" ); - out.println( "// This file was automatically generated by the Boxer " - + "(floats like a butterfly, strings like a bee)" ); - out.println( "// Generated on " + (new Date()) ); + out.println( "// This file was automatically generated by the Boxer" ); + out.println( "// \"Float like a butterfly, string like a bee.\"" ); + out.println( "// Generated on " + (new Date()) + " by " + + System.getProperty("user.name") ); out.println(); if( classHasPackage(className) ) { |