public TypeBuilder[] getDependencies() { checkCreated(); var dependencies = new HashSet<TypeBuilder>(); addType(dependencies, baseType); foreach (var t in interfaces) { addType(dependencies, t); } foreach (var a in annotations) { addType(dependencies, a.Type); } foreach (var nt in nestedTypes) { foreach (var t in ((TypeBuilder)nt).getDependencies()) { dependencies.add((TypeBuilder)t); } } foreach (var f in fields) { foreach (var a in f.Annotations) { addType(dependencies, a.Type); } addType(dependencies, f.Type); } foreach (var m in methods) { if (!m.IsExcludedFromCompilation) { foreach (var a in m.Annotations) { addType(dependencies, a.Type); } addType(dependencies, m.ReturnType); foreach (var p in m.Parameters) { foreach (var a in p.Annotations) { addType(dependencies, a.Type); } addType(dependencies, p.Type); } foreach (var e in m.Exceptions) { addType(dependencies, e); } foreach (var instruction in ((MethodBuilder)m).CodeGenerator.Instructions) { switch (instruction.Opcode) { case Getfield: case Getstatic: case Putfield: case Putstatic: addType(dependencies, instruction.Field.DeclaringType); break; case Invokedynamic: case Invokeinterface: case Invokespecial: case Invokestatic: case Invokevirtual: addType(dependencies, instruction.Method.DeclaringType); break; case Anewarray: case Checkcast: case Instanceof: case New: addType(dependencies, instruction.Type); break; } } } } return dependencies.toArray(new TypeBuilder[dependencies.size()]); }