Skip to content

Commit a1b22cb

Browse files
committed
Stop collecting parameter declarations for return values and property puts.
1 parent 7e196a1 commit a1b22cb

File tree

11 files changed

+22
-11
lines changed

11 files changed

+22
-11
lines changed

Rubberduck.Parsing/ComReflection/ComMember.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ public class ComMember : ComBase
3939
public ComParameter ReturnType { get; private set; } = ComParameter.Void;
4040

4141
private readonly List<ComParameter> _parameters = new List<ComParameter>();
42-
public IEnumerable<ComParameter> Parameters => _parameters;
42+
43+
//See https://docs.microsoft.com/en-us/windows/desktop/midl/retval
44+
//"Parameters with the [retval] attribute are not displayed in user-oriented browsers."
45+
public IEnumerable<ComParameter> Parameters => _parameters.Where(param => !param.IsReturnValue);
4346

4447
public ComMember(IComBase parent, ITypeInfo info, FUNCDESC funcDesc) : base(parent, info, funcDesc)
4548
{
@@ -100,6 +103,14 @@ private void LoadParameters(FUNCDESC funcDesc, ITypeInfo info)
100103
var names = new string[255];
101104
info.GetNames(Index, names, names.Length, out int count);
102105

106+
// See https://docs.microsoft.com/en-us/windows/desktop/midl/propput
107+
// "A function that has the [propput] attribute must also have, as its last parameter, a parameter that has the [in] attribute."
108+
if (funcDesc.invkind.HasFlag(INVOKEKIND.INVOKE_PROPERTYPUTREF) ||
109+
funcDesc.invkind.HasFlag(INVOKEKIND.INVOKE_PROPERTYPUT))
110+
{
111+
count--;
112+
}
113+
103114
for (var index = 0; index < count - 1; index++)
104115
{
105116
var paramPtr = new IntPtr(funcDesc.lprgelemdescParam.ToInt64() + Marshal.SizeOf(typeof(ELEMDESC)) * index);

RubberduckTests/Testfiles/Resolver/ADODB.6.1.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/ADOR.6.0.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/Excel.1.8.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/MSForms.2.0.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/MSXML2.6.0.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/Office.2.7.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/Scripting.1.0.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/VBA.4.2.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

RubberduckTests/Testfiles/Resolver/VBIDE.5.3.xml

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)