rubberduck-vba / Rubberduck

Every programmer needs a rubberduck. COM add-in for the VBA & VB6 IDE (VBE).
https://rubberduckvba.com
GNU General Public License v3.0
1.91k stars 299 forks source link

Rubberduck wants me to assign Object() array with 'Set' keyword #6200

Open gitqube opened 8 months ago

gitqube commented 8 months ago

Version 2.5.9.6319 OS: Microsoft Windows NT 10.0.19045.0, x64 Host Product: Microsoft Office x64 Host Version: 16.0.17029.20140 Host Executable: EXCEL.EXE

For demonstration use this Module code:

Private myObjectArray() As Object

Public Property Get ObjectArray() As Object()
    ObjectArray = myObjectArray
End Property

Public Sub Test()

    Dim oArr1(0) As Object
    Set oArr1(0) = ThisWorkbook

    myObjectArray = oArr1

    Dim oArr2() As Object
    oArr2 = ObjectArray

    Debug.Print oArr2(0).Name

End Sub

Description This code compiles and runs. Rubberduck gives me 3 Code Inspection Errors:

  1. Return value for member 'ObjectArray' is never assigned. This refers to line Public Property Get ObjectArray() As Object()
  2. Object variable 'ObjectArray' is assigned without the 'Set' keyword. This refers to line ObjectArray = myObjectArray
  3. In a context that requires a value type, the expression 'ObjectArray' of object type 'Object()' is used that does not have a suitable default member. This refers to line oArr2 = ObjectArray and may be related to #6094

If I use the 'Set' keyword in front of ObjectArray = myObjectArray and in front of oArr2 = ObjectArray Rubberduck is satisfied and does not report any errors. But it does not compile, of course.

retailcoder commented 8 months ago

Thanks for the report!

The inspection results are all consistent with the object array being mistakenly resolved as an object type; something somewhere is missing a check against Declaration.IsArray 🫤