Skip to content

Commit 56165d1

Browse files
committed
Merge branch 'next' into IncompatibleObjectTypeInspection
2 parents 8668b13 + aac8edc commit 56165d1

File tree

76 files changed

+6170
-2512
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+6170
-2512
lines changed

Rubberduck.Core/UI/Command/ReparseCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
using Rubberduck.Settings;
99
using Rubberduck.SettingsProvider;
1010
using Rubberduck.Resources;
11-
using Rubberduck.VBEditor.ComManagement.TypeLibsAPI;
11+
using Rubberduck.VBEditor.ComManagement.TypeLibs.Abstract;
1212
using Rubberduck.VBEditor.SafeComWrappers;
1313
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1414
using Rubberduck.VBEditor.VbeRuntime.Settings;

Rubberduck.Core/UI/UnitTesting/TestExplorerControl.xaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,13 @@
5454
<BitmapImage x:Key="OutcomeInconclusive" UriSource="pack://application:,,,/Rubberduck.Resources;component/Icons/Fugue/exclamation.png" />
5555
<BitmapImage x:Key="OutcomeSucceeded" UriSource="pack://application:,,,/Rubberduck.Resources;component/Icons/Fugue/tick-circle.png" />
5656

57+
<BitmapImage x:Key="IgnoreTestImage" UriSource="pack://application:,,,/Rubberduck.Resources;component/Icons/Fugue/flask-empty.png" />
58+
<BitmapImage x:Key="UnignoreTestImage" UriSource="pack://application:,,,/Rubberduck.Resources;component/Icons/Fugue/flask-undo.png" />
59+
5760
<local:TestOutcomeImageSourceConverter x:Key="OutcomeIconConverter" />
5861
<converters:MillisecondToTimeMagnitudeConverter x:Key="FormattedTime" />
5962
<converters:InvertBoolValueConverter x:Key="InvertBoolValue" />
63+
<BooleanToVisibilityConverter x:Key="BoolToVisibility" />
6064

6165
<Style x:Key="ToolbarImageOpacity" TargetType="Image" >
6266
<Setter Property="Height" Value="16" />
@@ -433,6 +437,20 @@
433437
<Image Source="{StaticResource RunAllTestsImage}" />
434438
</MenuItem.Icon>
435439
</MenuItem>
440+
<MenuItem Command="{Binding IgnoreTestCommand}"
441+
Header="{Resx ResxName=Rubberduck.Resources.UnitTesting.TestExplorer, Key=TestExplorer_TestToggle_Ignore}"
442+
Visibility="{Binding DisplayIgnoreTestLabel, Converter={StaticResource BoolToVisibility}}">
443+
<MenuItem.Icon>
444+
<Image Source="{StaticResource IgnoreTestImage}" />
445+
</MenuItem.Icon>
446+
</MenuItem>
447+
<MenuItem Command="{Binding UnignoreTestCommand}"
448+
Header="{Resx ResxName=Rubberduck.Resources.UnitTesting.TestExplorer, Key=TestExplorer_TestToggle_Unignore}"
449+
Visibility="{Binding DisplayUnignoreTestLabel, Converter={StaticResource BoolToVisibility}}">
450+
<MenuItem.Icon>
451+
<Image Source="{StaticResource UnignoreTestImage}" />
452+
</MenuItem.Icon>
453+
</MenuItem>
436454
</ContextMenu>
437455
</DataGrid.ContextMenu>
438456
<i:Interaction.Behaviors>

Rubberduck.Core/UI/UnitTesting/TestExplorerViewModel.cs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
using System.ComponentModel;
55
using System.Globalization;
66
using System.Linq;
7+
using System.Windows.Annotations;
78
using System.Windows.Data;
89
using NLog;
910
using Rubberduck.Common;
1011
using Rubberduck.Interaction.Navigation;
12+
using Rubberduck.Parsing;
13+
using Rubberduck.Parsing.Rewriter;
14+
using Rubberduck.Parsing.VBA;
15+
using Rubberduck.Resources;
1116
using Rubberduck.Settings;
1217
using Rubberduck.SettingsProvider;
1318
using Rubberduck.UI.Command;
@@ -49,7 +54,9 @@ public TestExplorerViewModel(ISelectionService selectionService,
4954
IClipboardWriter clipboard,
5055
// ReSharper disable once UnusedParameter.Local - left in place because it will likely be needed for app wide font settings, etc.
5156
IConfigurationService<Configuration> configService,
52-
ISettingsFormFactory settingsFormFactory)
57+
ISettingsFormFactory settingsFormFactory,
58+
IRewritingManager rewritingManager,
59+
IAnnotationUpdater annotationUpdater)
5360
{
5461
_clipboard = clipboard;
5562
_settingsFormFactory = settingsFormFactory;
@@ -64,6 +71,11 @@ public TestExplorerViewModel(ISelectionService selectionService,
6471
OpenTestSettingsCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), OpenSettings);
6572
CollapseAllCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteCollapseAll);
6673
ExpandAllCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteExpandAll);
74+
IgnoreTestCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteIgnoreTestCommand);
75+
UnignoreTestCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteUnignoreTestCommand);
76+
77+
RewritingManager = rewritingManager;
78+
AnnotationUpdater = annotationUpdater;
6779

6880
Model = model;
6981
Model.TestCompleted += HandleTestCompletion;
@@ -99,6 +111,7 @@ public TestMethodViewModel MouseOverTest
99111
}
100112
_mouseOverTest = value;
101113
OnPropertyChanged();
114+
RefreshContextMenu();
102115
}
103116
}
104117

@@ -114,9 +127,16 @@ public CollectionViewGroup MouseOverGroup
114127
}
115128
_mouseOverGroup = value;
116129
OnPropertyChanged();
130+
RefreshContextMenu();
117131
}
118132
}
119133

134+
private void RefreshContextMenu()
135+
{
136+
OnPropertyChanged(nameof(DisplayUnignoreTestLabel));
137+
OnPropertyChanged(nameof(DisplayIgnoreTestLabel));
138+
}
139+
120140
private static readonly Dictionary<TestExplorerGrouping, PropertyGroupDescription> GroupDescriptions = new Dictionary<TestExplorerGrouping, PropertyGroupDescription>
121141
{
122142
{ TestExplorerGrouping.Outcome, new PropertyGroupDescription("Result.Outcome", new TestResultToOutcomeTextConverter()) },
@@ -214,6 +234,13 @@ private void HandleTestCompletion(object sender, TestCompletedEventArgs e)
214234
Tests.Refresh();
215235
}
216236

237+
public IRewritingManager RewritingManager { get; }
238+
public IAnnotationUpdater AnnotationUpdater { get; }
239+
240+
private TestMethod _mousedOverTestMethod => ((TestMethodViewModel)SelectedItem).Method;
241+
public bool DisplayUnignoreTestLabel => SelectedItem != null && _mousedOverTestMethod.IsIgnored;
242+
public bool DisplayIgnoreTestLabel => SelectedItem != null && !_mousedOverTestMethod.IsIgnored;
243+
217244
#region Commands
218245

219246
public ReparseCommand RefreshCommand { get; set; }
@@ -245,6 +272,9 @@ private void HandleTestCompletion(object sender, TestCompletedEventArgs e)
245272
public CommandBase CollapseAllCommand { get; }
246273
public CommandBase ExpandAllCommand { get; }
247274

275+
public CommandBase IgnoreTestCommand { get; }
276+
public CommandBase UnignoreTestCommand { get; }
277+
248278
#endregion
249279

250280
#region Delegates
@@ -340,6 +370,29 @@ private void ExecuteResetResultsCommand(object parameter)
340370
Tests.Refresh();
341371
}
342372

373+
private void ExecuteIgnoreTestCommand(object parameter)
374+
{
375+
var rewriteSession = RewritingManager.CheckOutCodePaneSession();
376+
377+
AnnotationUpdater.AddAnnotation(rewriteSession, _mousedOverTestMethod.Declaration, Parsing.Annotations.AnnotationType.IgnoreTest);
378+
379+
rewriteSession.TryRewrite();
380+
}
381+
382+
private void ExecuteUnignoreTestCommand(object parameter)
383+
{
384+
var rewriteSession = RewritingManager.CheckOutCodePaneSession();
385+
var ignoreTestAnnotations = _mousedOverTestMethod.Declaration.Annotations
386+
.Where(iannotations => iannotations.AnnotationType == Parsing.Annotations.AnnotationType.IgnoreTest);
387+
388+
foreach (var ignoreTestAnnotation in ignoreTestAnnotations)
389+
{
390+
AnnotationUpdater.RemoveAnnotation(rewriteSession, ignoreTestAnnotation);
391+
}
392+
393+
rewriteSession.TryRewrite();
394+
}
395+
343396
private void ExecuteCopyResultsCommand(object parameter)
344397
{
345398
const string XML_SPREADSHEET_DATA_FORMAT = "XML Spreadsheet";

Rubberduck.Main/Extension.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Rubberduck.Settings;
2020
using Rubberduck.SettingsProvider;
2121
using Rubberduck.VBEditor.ComManagement;
22+
using Rubberduck.VBEditor.ComManagement.TypeLibs;
2223
using Rubberduck.VBEditor.Events;
2324
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
2425
using Rubberduck.VBEditor.VbeRuntime;
@@ -68,7 +69,7 @@ public void OnConnection(object Application, ext_ConnectMode ConnectMode, object
6869
_vbeNativeApi = VbeProvider.VbeRuntime;
6970
#if DEBUG
7071
// FOR DEBUGGING/DEVELOPMENT PURPOSES, ALLOW ACCESS TO SOME VBETypeLibsAPI FEATURES FROM VBA
71-
_addin.Object = new VBEditor.ComManagement.TypeLibsAPI.VBETypeLibsAPI_Object(_vbe);
72+
_addin.Object = new VBETypeLibsAPI_Object(_vbe);
7273
#endif
7374

7475
switch (ConnectMode)

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,12 @@
4949
using Rubberduck.VBEditor;
5050
using Rubberduck.VBEditor.ComManagement;
5151
using Rubberduck.VBEditor.ComManagement.TypeLibs;
52-
using Rubberduck.VBEditor.ComManagement.TypeLibsAPI;
52+
using Rubberduck.VBEditor.ComManagement.TypeLibs.Abstract;
5353
using Rubberduck.VBEditor.Events;
5454
using Rubberduck.VBEditor.Utility;
5555
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
5656
using Rubberduck.VBEditor.SourceCodeHandling;
5757
using Rubberduck.VBEditor.VbeRuntime;
58-
using Rubberduck.UnitTesting.Settings;
5958

6059
namespace Rubberduck.Root
6160
{

Rubberduck.Parsing/ComReflection/ComProject.cs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
using System.Runtime.InteropServices.ComTypes;
88
using System.Runtime.Serialization;
99
using Rubberduck.VBEditor.ComManagement.TypeLibs;
10-
using Rubberduck.VBEditor.ComManagement.TypeLibsSupport;
1110
using Rubberduck.VBEditor.Utility;
1211
using TYPEATTR = System.Runtime.InteropServices.ComTypes.TYPEATTR;
1312
using TYPELIBATTR = System.Runtime.InteropServices.ComTypes.TYPELIBATTR;
13+
using TYPEKIND = System.Runtime.InteropServices.ComTypes.TYPEKIND;
1414

1515
namespace Rubberduck.Parsing.ComReflection
1616
{
@@ -102,9 +102,9 @@ private void LoadModules(ITypeLib typeLibrary)
102102
var typeAttributes = Marshal.PtrToStructure<TYPEATTR>(typeAttributesPointer);
103103
KnownTypes.TryGetValue(typeAttributes.guid, out var type);
104104

105-
switch (typeAttributes.typekind.ToTypeKindVbe())
105+
switch (typeAttributes.typekind)
106106
{
107-
case TYPEKIND_VBE.TKIND_ENUM:
107+
case TYPEKIND.TKIND_ENUM:
108108
var enumeration = type ?? new ComEnumeration(this, typeLibrary, info, typeAttributes, index);
109109
Debug.Assert(enumeration is ComEnumeration);
110110
_enumerations.Add(enumeration as ComEnumeration);
@@ -113,7 +113,7 @@ private void LoadModules(ITypeLib typeLibrary)
113113
KnownTypes.TryAdd(typeAttributes.guid, enumeration);
114114
}
115115
break;
116-
case TYPEKIND_VBE.TKIND_COCLASS:
116+
case TYPEKIND.TKIND_COCLASS:
117117
var coclass = type ?? new ComCoClass(this, typeLibrary, info, typeAttributes, index);
118118
Debug.Assert(coclass is ComCoClass && !coclass.Guid.Equals(Guid.Empty));
119119
_classes.Add(coclass as ComCoClass);
@@ -122,8 +122,8 @@ private void LoadModules(ITypeLib typeLibrary)
122122
KnownTypes.TryAdd(typeAttributes.guid, coclass);
123123
}
124124
break;
125-
case TYPEKIND_VBE.TKIND_DISPATCH:
126-
case TYPEKIND_VBE.TKIND_INTERFACE:
125+
case TYPEKIND.TKIND_DISPATCH:
126+
case TYPEKIND.TKIND_INTERFACE:
127127
var intface = type ?? new ComInterface(this, typeLibrary, info, typeAttributes, index);
128128
Debug.Assert(intface is ComInterface && !intface.Guid.Equals(Guid.Empty));
129129
_interfaces.Add(intface as ComInterface);
@@ -132,11 +132,11 @@ private void LoadModules(ITypeLib typeLibrary)
132132
KnownTypes.TryAdd(typeAttributes.guid, intface);
133133
}
134134
break;
135-
case TYPEKIND_VBE.TKIND_RECORD:
135+
case TYPEKIND.TKIND_RECORD:
136136
var structure = new ComStruct(this, typeLibrary, info, typeAttributes, index);
137137
_structs.Add(structure);
138138
break;
139-
case TYPEKIND_VBE.TKIND_MODULE:
139+
case TYPEKIND.TKIND_MODULE:
140140
var module = type ?? new ComModule(this, typeLibrary, info, typeAttributes, index);
141141
Debug.Assert(module is ComModule);
142142
_modules.Add(module as ComModule);
@@ -145,20 +145,17 @@ private void LoadModules(ITypeLib typeLibrary)
145145
KnownTypes.TryAdd(typeAttributes.guid, module);
146146
}
147147
break;
148-
case TYPEKIND_VBE.TKIND_ALIAS:
148+
case TYPEKIND.TKIND_ALIAS:
149149
var alias = new ComAlias(this, typeLibrary, info, index, typeAttributes);
150150
_aliases.Add(alias);
151151
if (alias.Guid != Guid.Empty)
152152
{
153153
KnownAliases.TryAdd(alias.Guid, alias);
154154
}
155155
break;
156-
case TYPEKIND_VBE.TKIND_UNION:
156+
case TYPEKIND.TKIND_UNION:
157157
//TKIND_UNION is not a supported member type in VBA.
158158
break;
159-
case TYPEKIND_VBE.TKIND_VBACLASS:
160-
//TODO: Implement this.
161-
break;
162159
default:
163160
throw new NotImplementedException($"Didn't expect a TYPEATTR with multiple typekind flags set in {Path}.");
164161
}

Rubberduck.Parsing/ComReflection/UserProjectRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using Rubberduck.Parsing.UIContext;
66
using Rubberduck.Parsing.VBA.Extensions;
77
using Rubberduck.VBEditor.ComManagement;
8-
using Rubberduck.VBEditor.ComManagement.TypeLibs;
8+
using Rubberduck.VBEditor.ComManagement.TypeLibs.Abstract;
99
using Rubberduck.VBEditor.Extensions;
1010
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1111

Rubberduck.Parsing/Preprocessing/CompilationArgumentsProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Collections.Generic;
22
using Rubberduck.Parsing.UIContext;
3-
using Rubberduck.VBEditor.ComManagement.TypeLibs;
3+
using Rubberduck.VBEditor.ComManagement.TypeLibs.Abstract;
44

55
namespace Rubberduck.Parsing.PreProcessing
66
{
@@ -29,7 +29,7 @@ private Dictionary<string, short> GetUserDefinedCompilationArguments(string proj
2929
var task = _uiDispatcher.StartTask(() => {
3030
using (var typeLib = _typeLibWrapperProvider.TypeLibWrapperFromProject(projectId))
3131
{
32-
return typeLib?.ConditionalCompilationArguments ?? new Dictionary<string, short>();
32+
return typeLib?.VBEExtensions.ConditionalCompilationArguments ?? new Dictionary<string, short>();
3333
}
3434
});
3535
return task.Result;

Rubberduck.Parsing/QualifiedContext.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,19 @@ public override bool Equals(object obj)
3939

4040
public static bool operator ==(QualifiedContext context1, QualifiedContext context2)
4141
{
42-
if ((object)context1 == null)
42+
if (context1 is null)
4343
{
44-
return (object)context2 == null;
44+
return context2 is null;
4545
}
4646

4747
return context1.Equals(context2);
4848
}
4949

5050
public static bool operator !=(QualifiedContext context1, QualifiedContext context2)
5151
{
52-
if ((object)context1 == null)
52+
if (context1 is null)
5353
{
54-
return (object)context2 != null;
54+
return !(context2 is null);
5555
}
5656

5757
return !context1.Equals(context2);

Rubberduck.Parsing/Rewriter/RewriterInfo/RewriterInfo.cs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,21 @@ namespace Rubberduck.Parsing.Rewriter.RewriterInfo
55
{
66
public struct RewriterInfo : IEquatable<RewriterInfo>
77
{
8-
private readonly string _replacement;
9-
private readonly int _startTokenIndex;
10-
private readonly int _stopTokenIndex;
11-
128
public RewriterInfo(int startTokenIndex, int stopTokenIndex)
139
: this(string.Empty, startTokenIndex, stopTokenIndex) { }
1410

1511
public RewriterInfo(string replacement, int startTokenIndex, int stopTokenIndex)
1612
{
17-
_replacement = replacement;
18-
_startTokenIndex = startTokenIndex;
19-
_stopTokenIndex = stopTokenIndex;
13+
Replacement = replacement;
14+
StartTokenIndex = startTokenIndex;
15+
StopTokenIndex = stopTokenIndex;
2016
}
2117

22-
public string Replacement { get { return _replacement; } }
23-
public int StartTokenIndex { get { return _startTokenIndex; } }
24-
public int StopTokenIndex { get { return _stopTokenIndex; } }
18+
public string Replacement { get; }
19+
public int StartTokenIndex { get; }
20+
public int StopTokenIndex { get; }
2521

26-
public static RewriterInfo None { get { return default(RewriterInfo); } }
22+
public static RewriterInfo None => default;
2723

2824
public bool Equals(RewriterInfo other)
2925
{

0 commit comments

Comments
 (0)