19 internal static long Compute(RuntimeJavaType javaType)
23 WriteClassName(writer, javaType);
24 WriteModifiers(writer, javaType);
25 WriteInterfaces(writer, javaType);
26 WriteFields(writer, javaType);
27 WriteStaticInitializer(writer, javaType);
28 WriteConstructors(writer, javaType);
29 WriteMethods(writer, javaType);
32 var hash = writer.Finalize();
34 for (var i = 7; i >= 0; i--)
43 static void WriteClassName(
SHA1HashWriter writer, RuntimeJavaType javaType)
48 static void WriteModifiers(
SHA1HashWriter writer, RuntimeJavaType javaType)
50 var mods = javaType.ReflectiveModifiers & (Modifiers.Public | Modifiers.Final | Modifiers.Interface |
Modifiers.Abstract);
54 if (HasJavaMethods(javaType))
61 static bool HasJavaMethods(RuntimeJavaType javaType)
63 return javaType.GetMethods().Any(i => !i.IsHideFromReflection && !i.IsClassInitializer);
66 static void WriteInterfaces(
SHA1HashWriter writer, RuntimeJavaType javaType)
68 foreach (var i
in javaType.Interfaces.OrderBy(i => i.Name))
72 static void WriteFields(
SHA1HashWriter writer, RuntimeJavaType javaType)
74 foreach (var fw
in javaType.GetFields().Where(i => !i.IsHideFromReflection).OrderBy(i => i.Name))
76 var mods = fw.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Volatile |
Modifiers.Transient);
81 writer.
WriteUtf8(fw.Signature.Replace(
'.',
'/'));
86 static void WriteStaticInitializer(
SHA1HashWriter writer, RuntimeJavaType javaType)
88 var type = javaType.TypeAsTBD;
89 if (!type.IsArray && type.TypeInitializer !=
null)
91 if (!javaType.Context.
AttributeHelper.IsHideFromJava(type.TypeInitializer))
100 static void WriteConstructors(
SHA1HashWriter writer, RuntimeJavaType javaType)
102 var ctors = javaType.GetMethods()
103 .Where(i => i.IsConstructor && !i.IsHideFromReflection && !i.IsPrivate)
104 .OrderBy(i => i.Signature);
106 foreach (var ctor
in ctors)
108 var mods = ctor.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Synchronized | Modifiers.Native | Modifiers.Abstract |
Modifiers.Strictfp);
115 static void WriteMethods(
SHA1HashWriter writer, RuntimeJavaType javaType)
117 var methods = javaType.GetMethods()
118 .Where(i => !i.IsConstructor && !i.IsHideFromReflection && !i.IsPrivate)
119 .OrderBy(i => i.Name)
120 .ThenBy(i => i.Signature);
122 foreach (var method
in methods)
124 var mods = method.Modifiers & (Modifiers.Public | Modifiers.Private | Modifiers.Protected | Modifiers.Static | Modifiers.Final | Modifiers.Synchronized | Modifiers.Native | Modifiers.Abstract |
Modifiers.Strictfp);