private void defineInterfaceMembers(InterfaceDeclarationNode interfaceDeclaration) { var typeBuilder = interfaceDeclaration.getUserData(typeof(TypeBuilder)); context.CurrentType = typeBuilder; context.MemberResolver.enterType(typeBuilder); try { setTypeConstraints(interfaceDeclaration.ConstraintsClauses, typeBuilder); foreach (var member in interfaceDeclaration.Members) { switch (member.TypeMemberKind) { case Method: defineInterfaceMethod((MethodDeclarationNode)member, typeBuilder); break; case Indexer: defineInterfaceIndexer((IndexerDeclarationNode)member, typeBuilder); break; case Property: defineInterfaceProperty((PropertyDeclarationNode)member, typeBuilder); break; case EnumConstant: case Class: case Interface: case Delegate: case Constructor: case Destructor: case Field: default: throw new Exception("Internal error: unhandled member kind: " + member.TypeMemberKind); } context.CurrentType = typeBuilder; } } finally { context.MemberResolver.leaveType(); } }
private void setInterfaceBaseTypes(InterfaceDeclarationNode interfaceDeclaration) { var typeBuilder = interfaceDeclaration.getUserData(typeof(TypeBuilder)); context.MemberResolver.enterType(typeBuilder); try { typeBuilder.setBaseType(context.TypeSystem.ObjectType); foreach (var typeReference in interfaceDeclaration.InterfaceBase) { var type = CompilerHelper.resolveTypeReference(context, typeBuilder.PackageName, typeReference); if (!type.IsInterface) { context.addError(CompileErrorId.ClassInInterfaceList, typeReference, BytecodeHelper.getDisplayName(typeBuilder), BytecodeHelper.getDisplayName(type)); continue; } typeBuilder.addInterface(type); if (type.FullName.equals("java/lang/annotation/Annotation")) { typeBuilder.setAnnotation(true); } } } finally { context.MemberResolver.leaveType(); } }
public void enterInterface(InterfaceDeclarationNode declaration) { typeInfos.add(declaration.getUserData(typeof(TypeInfo))); }