зеркало из https://github.com/mono/ikvm-fork.git
Restructured to allow openjdk.cs to reuse the annotation encoding.
This commit is contained in:
Родитель
9d95677c8c
Коммит
cae14c9023
|
@ -38,9 +38,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
|
||||||
@ikvm.lang.Internal
|
|
||||||
public final class StubGenerator
|
public final class StubGenerator
|
||||||
{
|
{
|
||||||
|
@ikvm.lang.Internal
|
||||||
public static byte[] generateStub(Class c)
|
public static byte[] generateStub(Class c)
|
||||||
{
|
{
|
||||||
Class outer = c.getDeclaringClass();
|
Class outer = c.getDeclaringClass();
|
||||||
|
@ -295,6 +295,27 @@ public final class StubGenerator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface IConstantPoolWriter
|
||||||
|
{
|
||||||
|
short AddUtf8(String str);
|
||||||
|
short AddInt(int i);
|
||||||
|
short AddLong(long l);
|
||||||
|
short AddFloat(float f);
|
||||||
|
short AddDouble(double d);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] writeAnnotations(IConstantPoolWriter cp, Annotation[] annotations) throws IOException, InvocationTargetException, IllegalAccessException
|
||||||
|
{
|
||||||
|
ByteArrayOutputStream mem = new ByteArrayOutputStream();
|
||||||
|
DataOutputStream dos = new DataOutputStream(mem);
|
||||||
|
dos.writeShort((short)annotations.length);
|
||||||
|
for(Annotation ann : annotations)
|
||||||
|
{
|
||||||
|
RuntimeVisibleAnnotationsAttribute.WriteAnnotation(cp, dos, ann);
|
||||||
|
}
|
||||||
|
return mem.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean hasParameterAnnotations(Annotation[][] parameterAnnotations)
|
private static boolean hasParameterAnnotations(Annotation[][] parameterAnnotations)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < parameterAnnotations.length; i++)
|
for(int i = 0; i < parameterAnnotations.length; i++)
|
||||||
|
@ -1129,7 +1150,7 @@ class RuntimeVisibleAnnotationsAttribute extends ClassFileAttribute
|
||||||
return o1.equals(o2);
|
return o1.equals(o2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteValue(ClassFileWriter classFile, DataOutputStream dos, Object val)
|
static void WriteValue(StubGenerator.IConstantPoolWriter classFile, DataOutputStream dos, Object val)
|
||||||
throws IOException, IllegalAccessException, InvocationTargetException
|
throws IOException, IllegalAccessException, InvocationTargetException
|
||||||
{
|
{
|
||||||
if(val instanceof Boolean)
|
if(val instanceof Boolean)
|
||||||
|
@ -1257,7 +1278,7 @@ class RuntimeVisibleAnnotationsAttribute extends ClassFileAttribute
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void WriteAnnotation(ClassFileWriter classFile, DataOutputStream dos, Annotation ann)
|
static void WriteAnnotation(StubGenerator.IConstantPoolWriter classFile, DataOutputStream dos, Annotation ann)
|
||||||
throws IOException, IllegalAccessException, InvocationTargetException
|
throws IOException, IllegalAccessException, InvocationTargetException
|
||||||
{
|
{
|
||||||
Class annotationType = ann.annotationType();
|
Class annotationType = ann.annotationType();
|
||||||
|
@ -1407,7 +1428,7 @@ class CodeAttribute extends ClassFileAttribute
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClassFileWriter
|
class ClassFileWriter implements StubGenerator.IConstantPoolWriter
|
||||||
{
|
{
|
||||||
private ArrayList cplist = new ArrayList();
|
private ArrayList cplist = new ArrayList();
|
||||||
private Hashtable cphashtable = new Hashtable();
|
private Hashtable cphashtable = new Hashtable();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче