private TypeBuilder defineNestedType(TypeBuilder declaringClass, String className, String shortName, SyntaxNode node) { if (context.TypeSystem.typeExists(className)) { throw context.error(CompileErrorId.AlreadyDefinedType, node, className.replace('/', '.').replace('$', '.')); } var result = declaringClass.defineNestedType(shortName); context.TypeBuilders.add(result); return result; }
private static void defineType(TypeInfo type, Library targetTypeSystem, TypeBuilder declaringType) { if (type.IsSynthetic) { return; } TypeBuilder clone; if (declaringType == null) { clone = targetTypeSystem.defineType(type.FullName); } else { clone = declaringType.defineNestedType(type.Name); clone.setNestedAbstract(type.IsNestedAbstract); clone.setNestedAnnotation(type.IsNestedAnnotation); clone.setNestedEnum(type.IsNestedEnum); clone.setNestedFinal(type.IsNestedFinal); clone.setNestedInterface(type.IsNestedInterface); clone.setNestedPrivate(type.IsNestedPrivate); clone.setNestedProtected(type.IsNestedProtected); clone.setNestedPublic(type.IsNestedPublic); clone.setNestedStatic(type.IsNestedStatic); } clone.setAbstract(type.IsAbstract); clone.setAnnotation(type.IsNestedAnnotation); clone.setEnum(type.IsEnum); clone.setFinal(type.IsFinal); clone.setInterface(type.IsInterface); clone.setPublic(type.IsPublic); clone.setSuper(type.IsSynthetic); foreach (var ga in type.GenericArguments) { clone.addGenericArgument(ga.FullName); } foreach (var nt in type.getNestedTypes()) { defineType(nt, targetTypeSystem, clone); } }