[Nice-commit] Nice/src/bossa/syntax javaMethod.nice,1.16,1.17
Brought to you by:
bonniot
From: Artem Gr K. <ar...@us...> - 2006-10-11 12:35:00
|
Update of /cvsroot/nice/Nice/src/bossa/syntax In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv17102/src/bossa/syntax Modified Files: javaMethod.nice Log Message: Bug 1509635; support Java5 covariant return types. Index: javaMethod.nice =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/javaMethod.nice,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** javaMethod.nice 18 Jun 2005 12:46:47 -0000 1.16 --- javaMethod.nice 11 Oct 2006 12:34:55 -0000 1.17 *************** *** 288,300 **** } ! ?gnu.bytecode.Method alreadyHasMethod(gnu.bytecode.ClassType c, gnu.bytecode.Method m) = ! c.getMethod(m.getName(), m.getParameterTypes()); private ?gnu.bytecode.Method findBaseMethod(gnu.bytecode.ClassType classType, gnu.bytecode.Method m) { ?gnu.bytecode.Method res = null; - /* Skips m if it was just overriden in classType ! but declared in a superclass or superinterface. */ ?gnu.bytecode.ClassType superClass = classType.getSuperclass(); --- 288,327 ---- } ! ?gnu.bytecode.Method alreadyHasMethod(gnu.bytecode.ClassType c, gnu.bytecode.Method m) { ! ?gnu.bytecode.Method res = c.getMethod(m.getName(), m.getParameterTypes()); ! if(res==null) ! return null; ! /* 1.5's covariant return types means we need to check return ! types too. ! */ ! let thisReturn = m.getReturnType(); ! let superReturn = res.getReturnType(); ! if(thisReturn.equals(superReturn)) ! return res; ! return null; ! } ! private ?gnu.bytecode.Method checkInterfaces(gnu.bytecode.ClassType classType, gnu.bytecode.Method m) ! { ! /* Check all of the interfaces of classType to see ! if m is overriding one of them. ! */ ! ?gnu.bytecode.Method res = null; ! for (gnu.bytecode.ClassType itf : classType.getInterfaces()) ! { ! res = alreadyHasMethod(itf,m); ! if (res != null){ ! return res; ! } ! } ! return null; ! } private ?gnu.bytecode.Method findBaseMethod(gnu.bytecode.ClassType classType, gnu.bytecode.Method m) { ?gnu.bytecode.Method res = null; /* Skips m if it was just overriden in classType ! but declared in a superclass or superinterface ! and the overriding method did not change the return ! type. */ ?gnu.bytecode.ClassType superClass = classType.getSuperclass(); *************** *** 307,322 **** if (superClass == null) superClass = gnu.bytecode.Type.pointer_type; ! ! res = alreadyHasMethod(superClass,m); ! if (res != null) ! return res; ! ! for (gnu.bytecode.ClassType itf : classType.getInterfaces()) ! { ! res = alreadyHasMethod(itf,m); ! if (res != null) ! return res; } ! return null; } --- 334,354 ---- if (superClass == null) superClass = gnu.bytecode.Type.pointer_type; ! /* Traverse the parents. There is probably a better way to do this ! rather than seaching the whole set every time. ! */ ! for(;superClass!=null; superClass = superClass.getSuperclass()){ ! res = checkInterfaces(superClass,m); ! if (res != null){ ! return res; } ! res = alreadyHasMethod(superClass,m); ! if (res != null){ ! return res; ! } ! } ! res = checkInterfaces(classType,m); ! if (res != null){ ! return res; ! } return null; } |