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)));
		}