/// <summary>determines the mapping for the case, where clsType is a CLS-interface</summary> private object CallActionForDNInterface(ref Type clsType, MappingAction action) { // distinguish the different cases here object[] attrs = clsType.GetCustomAttributes(s_interfaceTypeAttrType, true); if (attrs.Length > 1) { // only one InterfaceTypeAttribute for an interface allowed throw new INTERNAL(18811, CompletionStatus.Completed_MayBe); } InterfaceTypeAttribute interfaceAttr = null; if (attrs.Length > 0) { interfaceAttr = (InterfaceTypeAttribute) attrs[0]; } if ((interfaceAttr == null) || (interfaceAttr.IdlType.Equals(IdlTypeInterface.AbstractInterface))) { return action.MapToIdlAbstractInterface(clsType); } else if (interfaceAttr.IdlType.Equals(IdlTypeInterface.ConcreteInterface)) { return action.MapToIdlConcreteInterface(clsType); } else if (interfaceAttr.IdlType.Equals(IdlTypeInterface.AbstractValueType)) { return action.MapToIdlAbstractValueType(clsType); } else if (interfaceAttr.IdlType.Equals(IdlTypeInterface.LocalInterface)) { return action.MapToIdlLocalInterface(clsType); } else { // ttributte IntrerfaceTypeAttribute had an unknown value for IDLType: interfaceAttr.IdlType throw new MARSHAL(18809, CompletionStatus.Completed_MayBe); } }