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

"This action will reset your project" on parse #5722

Closed A9G-Data-Droid closed 3 years ago

A9G-Data-Droid commented 3 years ago

Rubberduck version information Version 2.5.1.5735 OS: Microsoft Windows NT 10.0.19042.0, x64 Host Product: Microsoft Office x64 Host Version: 16.0.13801.20360 Host Executable: MSACCESS.EXE

Description Starting in Version 2.5.1.5735+ I am seeing the "This action will reset your project" popup on parse with one of my projects. This occurs on every parse. I can do it back to back with no running code between. I can open the project file using SHIFT to avoid running any code. When I open it this way I begin getting the message on the second parse and every subsequent parse.

To Reproduce Steps to reproduce the behavior:

  1. Open complex MS-Access project
  2. Open VBE
  3. Click "Ready" in the RD toolbar to parse
  4. See error

Expected behavior This doesn't happen on Version v2.5.1.5731 or before.

Screenshots image

Logfile

2021-04-06 14:59:13.0926;WARN-2.5.1.5735;Rubberduck.CodeAnalysis.Inspections.Logistics.Inspector;System.NullReferenceException: Object reference not set to an instance of an object.
   at Rubberduck.Common.StringExtensions.Capitalize(String input) in C:\projects\rubberduck\Rubberduck.InternalApi\Common\StringExtensions.cs:line 13
   at Rubberduck.CodeAnalysis.Inspections.Concrete.ImplementedInterfaceMemberInspection.ResultDescription(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Concrete\ImplementedInterfaceMemberInspection.cs:line 75
   at Rubberduck.CodeAnalysis.Inspections.Abstract.DeclarationInspectionBase.InspectionResult(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\DeclarationInspectionBase.cs:line 38
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.DeclarationInspectionBaseBase.<>c__DisplayClass4_0.<DoGetInspectionResults>b__1(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\DeclarationInspectionBaseBase.cs:line 37
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.InspectionBase.GetInspectionResults(CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\InspectionBase.cs:line 82
   at Rubberduck.CodeAnalysis.Inspections.Logistics.Inspector.RunInspection(IInspection inspection, ConcurrentBag`1 allIssues, CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Logistics\Inspector.cs:line 175;System.NullReferenceException: Object reference not set to an instance of an object.
   at Rubberduck.Common.StringExtensions.Capitalize(String input) in C:\projects\rubberduck\Rubberduck.InternalApi\Common\StringExtensions.cs:line 13
   at Rubberduck.CodeAnalysis.Inspections.Concrete.ImplementedInterfaceMemberInspection.ResultDescription(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Concrete\ImplementedInterfaceMemberInspection.cs:line 75
   at Rubberduck.CodeAnalysis.Inspections.Abstract.DeclarationInspectionBase.InspectionResult(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\DeclarationInspectionBase.cs:line 38
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.DeclarationInspectionBaseBase.<>c__DisplayClass4_0.<DoGetInspectionResults>b__1(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\DeclarationInspectionBaseBase.cs:line 37
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.InspectionBase.GetInspectionResults(CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\InspectionBase.cs:line 82
2021-04-06 15:06:08.4096;WARN-2.5.1.5735;Rubberduck.CodeAnalysis.Inspections.Logistics.Inspector;System.InvalidOperationException: Sequence contains no elements
   at System.Linq.Enumerable.Last[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Concrete.AssignmentNotUsedInspection.FindUnusedAssignmentNodes(INode node, Declaration localVariable, IEnumerable`1 allAssignmentsAndReferences) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Concrete\AssignmentNotUsedInspection.cs:line 133
   at Rubberduck.CodeAnalysis.Inspections.Concrete.AssignmentNotUsedInspection.FindUnusedAssignmentReferences(Declaration localVariable, Walker walker) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Concrete\AssignmentNotUsedInspection.cs:line 112
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.IdentifierReferenceInspectionBase.<>c__DisplayClass4_0.<DoGetInspectionResults>b__1(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\IdentifierReferenceInspectionBase.cs:line 26
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.InspectionBase.GetInspectionResults(CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\InspectionBase.cs:line 82
   at Rubberduck.CodeAnalysis.Inspections.Logistics.Inspector.RunInspection(IInspection inspection, ConcurrentBag`1 allIssues, CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Logistics\Inspector.cs:line 175;System.InvalidOperationException: Sequence contains no elements
   at System.Linq.Enumerable.Last[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Concrete.AssignmentNotUsedInspection.FindUnusedAssignmentNodes(INode node, Declaration localVariable, IEnumerable`1 allAssignmentsAndReferences) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Concrete\AssignmentNotUsedInspection.cs:line 133
   at Rubberduck.CodeAnalysis.Inspections.Concrete.AssignmentNotUsedInspection.FindUnusedAssignmentReferences(Declaration localVariable, Walker walker) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Concrete\AssignmentNotUsedInspection.cs:line 112
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.IdentifierReferenceInspectionBase.<>c__DisplayClass4_0.<DoGetInspectionResults>b__1(Declaration declaration) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\IdentifierReferenceInspectionBase.cs:line 26
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Rubberduck.CodeAnalysis.Inspections.Abstract.InspectionBase.GetInspectionResults(CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Abstract\InspectionBase.cs:line 82
   at Rubberduck.CodeAnalysis.Inspections.Logistics.Inspector.RunInspection(IInspection inspection, ConcurrentBag`1 allIssues, CancellationToken token) in C:\projects\rubberduck\Rubberduck.CodeAnalysis\Inspections\Logistics\Inspector.cs:line 175

Additional context This only happens with some project files

bclothier commented 3 years ago

The immediate fix for this is to remove this addition: https://github.com/rubberduck-vba/Rubberduck/blob/9ab31756560d6e4a8c505bfc3dd368b9dc28c0d0/Rubberduck.VBEEditor/ComManagement/TypeLibs/TypeLibVBEExtensions.cs#L100-L108

This will restore the occasional AV that happens when compacting & repairing but at least it won't yield this behavior which is not good to have either.

daFreeMan commented 3 years ago

No repo in my Access project running RD .5788. A9G stated "complex" Access project, perhaps mine isn't "complex" enough...

A9G-Data-Droid commented 3 years ago

@daFreeMan Sorry, I'm being vague because I have no idea what about this project would cause it to happen. I'm not seeing it on other projects, just my big one.

A9G-Data-Droid commented 3 years ago

I can confirm that the problem is now gone in v2.5.1.5797-pre