mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 23:25:24 +02:00
libjava
* Regenerated headers with new gjavah. libjava/classpath * tools/gnu/classpath/tools/javah/MethodHelper.java (print): Changed arguments. Directly print method name. * tools/gnu/classpath/tools/javah/ClassWrapper.java (methodNameMap): New field. (makeVtable): Initialize it. (printMethods): Compute name for bridge targets. From-SVN: r123965
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
2007-04-18 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* tools/gnu/classpath/tools/javah/MethodHelper.java (print):
|
||||
Changed arguments. Directly print method name.
|
||||
* tools/gnu/classpath/tools/javah/ClassWrapper.java
|
||||
(methodNameMap): New field.
|
||||
(makeVtable): Initialize it.
|
||||
(printMethods): Compute name for bridge targets.
|
||||
|
||||
2007-04-17 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* gnu/java/rmi/server/UnicastConnectionManager.java
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
/* ClassWrapper.java - wrap ASM class objects
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -43,6 +43,7 @@ import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
@@ -68,6 +69,11 @@ public class ClassWrapper
|
||||
// A set of all the method names in this class.
|
||||
HashSet methodNames = new HashSet();
|
||||
|
||||
// This maps a method name + descriptor, e.g. "method()V", to the
|
||||
// name chosen for the method. This is used when computing the
|
||||
// names of bridge method targets.
|
||||
HashMap methodNameMap = new HashMap();
|
||||
|
||||
public ClassWrapper(Main classpath)
|
||||
{
|
||||
this.classpath = classpath;
|
||||
@@ -187,18 +193,24 @@ public class ClassWrapper
|
||||
superClass.makeVtable();
|
||||
vtable = new ArrayList(superClass.vtable);
|
||||
bridgeTargets = new HashSet(superClass.bridgeTargets);
|
||||
methodNameMap = new HashMap(superClass.methodNameMap);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Object.
|
||||
vtable = new ArrayList();
|
||||
bridgeTargets = new HashSet();
|
||||
methodNameMap = new HashMap();
|
||||
}
|
||||
addLocalMethods();
|
||||
addInterfaces(this);
|
||||
|
||||
// Make a set of all the targets of bridge methods.
|
||||
// We rename bridge methods to avoid problems with C++.
|
||||
// Make a set of all the targets of bridge methods. We rename
|
||||
// bridge target methods to avoid problems with C++. You might
|
||||
// think we could rename the bridge methods themselves, but bridge
|
||||
// methods by definition override a method from the superclass --
|
||||
// and we have to consider the superclass' header as an
|
||||
// unchangeable entity.
|
||||
Iterator i = methods.iterator();
|
||||
while (i.hasNext())
|
||||
{
|
||||
@@ -232,8 +244,25 @@ public class ClassWrapper
|
||||
while (i.hasNext())
|
||||
{
|
||||
MethodNode m = (MethodNode) i.next();
|
||||
boolean isTarget = bridgeTargets.contains(m.name + m.desc);
|
||||
MethodHelper.print(out, m, this, isTarget);
|
||||
String nameToUse;
|
||||
String sum = m.name + m.desc;
|
||||
if (bridgeTargets.contains(sum))
|
||||
{
|
||||
if (methodNameMap.containsKey(sum))
|
||||
nameToUse = (String) methodNameMap.get(sum);
|
||||
else
|
||||
{
|
||||
// Bridge target that is new in this class.
|
||||
String cname = this.name;
|
||||
int index = cname.lastIndexOf('/');
|
||||
cname = cname.substring(index + 1);
|
||||
nameToUse = cname + "$" + m.name;
|
||||
}
|
||||
}
|
||||
else
|
||||
nameToUse = Keywords.getCxxName(m.name);
|
||||
methodNameMap.put(sum, nameToUse);
|
||||
MethodHelper.print(out, m, this, nameToUse);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* MethodHelper.java - helper class for manipulating methods
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@@ -76,7 +76,7 @@ public class MethodHelper
|
||||
}
|
||||
|
||||
public static void print(CniPrintStream out, MethodNode meth,
|
||||
ClassWrapper declarer, boolean isBridgeTarget)
|
||||
ClassWrapper declarer, String realMethodName)
|
||||
{
|
||||
if ("<clinit>".equals(meth.name))
|
||||
return;
|
||||
@@ -97,15 +97,7 @@ public class MethodHelper
|
||||
{
|
||||
out.print(Type.getReturnType(meth.desc));
|
||||
out.print(" ");
|
||||
if (isBridgeTarget)
|
||||
{
|
||||
out.print("target$");
|
||||
out.print(meth.name);
|
||||
}
|
||||
else
|
||||
{
|
||||
out.print(Keywords.getCxxName(meth.name));
|
||||
}
|
||||
out.print(realMethodName);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user