public ParameterDeclaration(ComParameter parameter, Declaration parent, QualifiedModuleName module)
     : this(
         module.QualifyMemberName(parameter.Name),
         parent,
         parameter.TypeName,
         null,
         null,
         parameter.IsOptional,
         parameter.IsByRef,
         parameter.IsArray,
         parameter.IsParamArray)
 {
 }
示例#2
0
 public ParameterDeclaration(ComParameter parameter, Declaration parent, QualifiedModuleName module)
     : this(
         module.QualifyMemberName(parameter.Name),
         parent,
         parameter.TypeName,
         null,
         null,
         parameter.IsOptional,
         parameter.IsByRef,
         parameter.IsArray,
         parameter.IsParamArray)
 {
     if (!string.IsNullOrEmpty(parameter.DefaultAsEnum))
     {
         DefaultValue = parameter.DefaultAsEnum;
     }
     else if (parameter.HasDefaultValue)
     {
         DefaultValue = parameter.DefaultValue is string defaultValue?defaultValue.ToVbExpression(false) : parameter.DefaultValue.ToString();
     }
 }
        private Declaration CreateMemberDeclaration(FUNCDESC memberDescriptor, TYPEKIND typeKind, ITypeInfo info, IMPLTYPEFLAGS parentImplFlags,
                                                    QualifiedModuleName typeQualifiedModuleName, Declaration moduleDeclaration, out string[] memberNames)
        {
            if (memberDescriptor.callconv != CALLCONV.CC_STDCALL)
            {
                memberNames = new string[] { };
                return(null);
            }

            memberNames = new string[255];
            int namesArrayLength;

            info.GetNames(memberDescriptor.memid, memberNames, 255, out namesArrayLength);

            var memberName            = memberNames[0];
            var funcValueType         = (VarEnum)memberDescriptor.elemdescFunc.tdesc.vt;
            var memberDeclarationType = GetDeclarationType(memberName, memberDescriptor, funcValueType, typeKind, parentImplFlags);

            if (((FUNCFLAGS)memberDescriptor.wFuncFlags).HasFlag(FUNCFLAGS.FUNCFLAG_FRESTRICTED) &&
                IgnoredInterfaceMembers.Contains(memberName)) // Ignore IDispatch and IUnknown members - quick-and-dirty for beta
            {
                return(null);
            }

            var asTypeName = new ComParameter(string.Empty, false);

            if (memberDeclarationType != DeclarationType.Procedure)
            {
                asTypeName = GetParameterInfo(memberDescriptor.elemdescFunc.tdesc, info);
            }
            var attributes = new Attributes();

            if (memberName == "_NewEnum" && ((FUNCFLAGS)memberDescriptor.wFuncFlags).HasFlag(FUNCFLAGS.FUNCFLAG_FNONBROWSABLE))
            {
                attributes.AddEnumeratorMemberAttribute(memberName);
            }
            else if (memberDescriptor.memid == 0)
            {
                attributes.AddDefaultMemberAttribute(memberName);
            }
            else if (((FUNCFLAGS)memberDescriptor.wFuncFlags).HasFlag(FUNCFLAGS.FUNCFLAG_FHIDDEN))
            {
                attributes.AddHiddenMemberAttribute(memberName);
            }

            switch (memberDeclarationType)
            {
            case DeclarationType.Procedure:
                return(new SubroutineDeclaration(
                           new QualifiedMemberName(typeQualifiedModuleName, memberName),
                           moduleDeclaration,
                           moduleDeclaration,
                           asTypeName.Name,
                           Accessibility.Global,
                           null,
                           Selection.Home,
                           true,
                           null,
                           attributes));

            case DeclarationType.Function:
                return(new FunctionDeclaration(
                           new QualifiedMemberName(typeQualifiedModuleName, memberName),
                           moduleDeclaration,
                           moduleDeclaration,
                           asTypeName.Name,
                           null,
                           null,
                           Accessibility.Global,
                           null,
                           Selection.Home,
                           asTypeName.IsArray,
                           true,
                           null,
                           attributes));

            case DeclarationType.PropertyGet:
                return(new PropertyGetDeclaration(
                           new QualifiedMemberName(typeQualifiedModuleName, memberName),
                           moduleDeclaration,
                           moduleDeclaration,
                           asTypeName.Name,
                           null,
                           null,
                           Accessibility.Global,
                           null,
                           Selection.Home,
                           asTypeName.IsArray,
                           true,
                           null,
                           attributes));

            case DeclarationType.PropertySet:
                return(new PropertySetDeclaration(
                           new QualifiedMemberName(typeQualifiedModuleName, memberName),
                           moduleDeclaration,
                           moduleDeclaration,
                           asTypeName.Name,
                           Accessibility.Global,
                           null,
                           Selection.Home,
                           true,
                           null,
                           attributes));

            case DeclarationType.PropertyLet:
                return(new PropertyLetDeclaration(
                           new QualifiedMemberName(typeQualifiedModuleName, memberName),
                           moduleDeclaration,
                           moduleDeclaration,
                           asTypeName.Name,
                           Accessibility.Global,
                           null,
                           Selection.Home,
                           true,
                           null,
                           attributes));

            default:
                return(new Declaration(
                           new QualifiedMemberName(typeQualifiedModuleName, memberName),
                           moduleDeclaration,
                           moduleDeclaration,
                           asTypeName.Name,
                           null,
                           false,
                           false,
                           Accessibility.Global,
                           memberDeclarationType,
                           null,
                           Selection.Home,
                           false,
                           null,
                           true,
                           null,
                           attributes));
            }
        }