/// <summary> /// Create a type builder for the given type. /// </summary> internal static IClassBuilder[] Create(ReachableContext context, AssemblyCompiler compiler, TypeDefinition typeDef) { if (typeDef.FullName == "<Module>") return new IClassBuilder[] { new SkipClassBuilder() }; if (typeDef.IsDelegate()) return new IClassBuilder[] {new DelegateClassBuilder(context, compiler, typeDef) }; if (typeDef.IsAttribute()) return new IClassBuilder[] {new AttributeClassBuilder(context, compiler, typeDef) }; if (typeDef.IsAnnotation()) return new IClassBuilder[] {new AnnotationClassBuilder(context, compiler, typeDef) }; if (typeDef.HasDexImportAttribute()) return new IClassBuilder[] {new DexImportClassBuilder(context, compiler, typeDef) }; if (typeDef.HasJavaImportAttribute()) return new IClassBuilder[] {CreateJavaImportBuilder(context, compiler, typeDef)}; if (typeDef.BaseType != null && typeDef.BaseType.FullName == "Android.App.Application") return new IClassBuilder[] { new AndroidAppApplicationDerivedBuilder(context,compiler,typeDef) }; if (typeDef.IsEnum) { if (typeDef.UsedInNullableT) { var nullableBaseClassBuilder = new NullableEnumBaseClassBuilder(context, compiler, typeDef); IClassBuilder builder = new EnumClassBuilder(context, compiler, typeDef, nullableBaseClassBuilder); return new[] { builder, nullableBaseClassBuilder }; } return new IClassBuilder[] { new EnumClassBuilder(context, compiler, typeDef, null) }; } else { if (!typeDef.UsedInNullableT) return new[] { new StandardClassBuilder(context, compiler, typeDef) }; var builder = new StandardClassBuilder(context, compiler, typeDef); var nullableBuilder = new NullableMarkerClassBuilder(context, compiler, typeDef, builder); return new IClassBuilder[] { builder, nullableBuilder }; } }
/// <summary> /// Create a type builder for the given type. /// </summary> internal static IClassBuilder[] Create(ReachableContext context, AssemblyCompiler compiler, TypeDefinition typeDef) { if (typeDef.FullName == "<Module>") { return new IClassBuilder[] { new SkipClassBuilder() } } ; if (typeDef.IsDelegate()) { return new IClassBuilder[] { new DelegateClassBuilder(context, compiler, typeDef) } } ; if (typeDef.IsAttribute()) { return new IClassBuilder[] { new AttributeClassBuilder(context, compiler, typeDef) } } ; if (typeDef.IsAnnotation()) { return new IClassBuilder[] { new AnnotationClassBuilder(context, compiler, typeDef) } } ; if (typeDef.HasDexImportAttribute()) { return new IClassBuilder[] { new DexImportClassBuilder(context, compiler, typeDef) } } ; if (typeDef.HasJavaImportAttribute()) { return new IClassBuilder[] { CreateJavaImportBuilder(context, compiler, typeDef) } } ; if (typeDef.BaseType != null && typeDef.BaseType.FullName == "Android.App.Application") { return new IClassBuilder[] { new AndroidAppApplicationDerivedBuilder(context, compiler, typeDef) } } ; if (typeDef.IsEnum) { if (typeDef.UsedInNullableT) { var nullableBaseClassBuilder = new NullableEnumBaseClassBuilder(context, compiler, typeDef); IClassBuilder builder = new EnumClassBuilder(context, compiler, typeDef, nullableBaseClassBuilder); return(new[] { builder, nullableBaseClassBuilder }); } return(new IClassBuilder[] { new EnumClassBuilder(context, compiler, typeDef, null) }); } else { if (!typeDef.UsedInNullableT) { return new[] { new StandardClassBuilder(context, compiler, typeDef) } } ; var builder = new StandardClassBuilder(context, compiler, typeDef); var nullableBuilder = new NullableMarkerClassBuilder(context, compiler, typeDef, builder); return(new IClassBuilder[] { builder, nullableBuilder }); } }