Skip to content

Commit 7eed583

Browse files
authored
Merge branch 'next' into Issue1616
2 parents b9e14ea + 6b7f1d7 commit 7eed583

29 files changed

+382
-120
lines changed

RetailCoder.VBE/API/ParserState.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.ComponentModel;
34
using System.Linq;
45
using System.Runtime.InteropServices;
@@ -8,6 +9,7 @@
89
using Rubberduck.UI.Command.MenuItems;
910
using Rubberduck.Parsing.Preprocessing;
1011
using System.Globalization;
12+
using Rubberduck.Parsing.Symbols;
1113

1214
namespace Rubberduck.API
1315
{
@@ -65,7 +67,8 @@ public void Initialize(VBE vbe)
6567
}
6668
Func<IVBAPreprocessor> preprocessorFactory = () => new VBAPreprocessor(double.Parse(vbe.Version, CultureInfo.InvariantCulture));
6769
_attributeParser = new AttributeParser(new ModuleExporter(), preprocessorFactory);
68-
_parser = new RubberduckParser(vbe, _state, _attributeParser, preprocessorFactory);
70+
_parser = new RubberduckParser(vbe, _state, _attributeParser, preprocessorFactory,
71+
new List<ICustomDeclarationLoader> { new DebugDeclarations(_state), new FormEventDeclarations(_state) });
6972
}
7073

7174
/// <summary>

RetailCoder.VBE/App.cs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ public App(VBE vbe, IMessageBox messageBox,
7979

8080
_hooks.MessageReceived += _hooks_MessageReceived;
8181
_configService.SettingsChanged += _configService_SettingsChanged;
82-
_configService.LanguageChanged += ConfigServiceLanguageChanged;
8382
_parser.State.StateChanged += Parser_StateChanged;
8483
_parser.State.StatusMessageUpdate += State_StatusMessageUpdate;
8584
_stateBar.Refresh += _stateBar_Refresh;
@@ -156,13 +155,18 @@ private bool ShouldEvaluateCanExecute(Declaration selectedDeclaration, ParserSta
156155
(selectedDeclaration == null && _lastSelectedDeclaration != null);
157156
}
158157

159-
private void _configService_SettingsChanged(object sender, EventArgs e)
158+
private void _configService_SettingsChanged(object sender, ConfigurationChangedEventArgs e)
160159
{
161160
_config = _configService.LoadConfiguration();
162161
_hooks.HookHotkeys();
163162
// also updates the ShortcutKey text
164163
_appMenus.Localize();
165164
UpdateLoggingLevel();
165+
166+
if (e.LanguageChanged)
167+
{
168+
LoadConfig();
169+
}
166170
}
167171

168172
private void UpdateLoggingLevel()
@@ -172,7 +176,7 @@ private void UpdateLoggingLevel()
172176

173177
public void Startup()
174178
{
175-
CleanReloadConfig();
179+
LoadConfig();
176180
_appMenus.Initialize();
177181
_hooks.HookHotkeys(); // need to hook hotkeys before we localize menus, to correctly display ShortcutTexts
178182
_appMenus.Localize();
@@ -417,16 +421,6 @@ private void Parser_StateChanged(object sender, EventArgs e)
417421
_appMenus.EvaluateCanExecute(_parser.State);
418422
}
419423

420-
private void CleanReloadConfig()
421-
{
422-
LoadConfig();
423-
}
424-
425-
private void ConfigServiceLanguageChanged(object sender, EventArgs e)
426-
{
427-
CleanReloadConfig();
428-
}
429-
430424
private void LoadConfig()
431425
{
432426
_logger.Debug("Loading configuration");
@@ -488,7 +482,6 @@ public void Dispose()
488482
if (_configService != null)
489483
{
490484
_configService.SettingsChanged -= _configService_SettingsChanged;
491-
_configService.LanguageChanged -= ConfigServiceLanguageChanged;
492485
_configService = null;
493486
}
494487

RetailCoder.VBE/AutoSave/AutoSave.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private void Dispose(bool disposing)
6969

7070
if (_configService != null)
7171
{
72-
_configService.LanguageChanged -= ConfigServiceSettingsChanged;
72+
_configService.SettingsChanged -= ConfigServiceSettingsChanged;
7373
}
7474

7575
if (_timer != null)

RetailCoder.VBE/Common/DeclarationExtensions.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Parsing;
99
using Rubberduck.Parsing.Grammar;
1010
using Rubberduck.Parsing.Symbols;
11+
using Rubberduck.Parsing.VBA;
1112
using Rubberduck.Properties;
1213
using Rubberduck.UI;
1314
using Rubberduck.VBEditor;
@@ -330,9 +331,9 @@ public static Declaration FindSelectedDeclaration(this IEnumerable<Declaration>
330331
return declaration;
331332
}
332333

333-
public static IEnumerable<Declaration> FindFormEventHandlers(this IEnumerable<Declaration> declarations)
334+
public static IEnumerable<Declaration> FindFormEventHandlers(this RubberduckParserState state)
334335
{
335-
var items = declarations.ToList();
336+
var items = state.AllDeclarations.ToList();
336337

337338
var forms = items.Where(item => item.DeclarationType == DeclarationType.ClassModule
338339
&& item.QualifiedName.QualifiedModuleName.Component != null
@@ -342,18 +343,24 @@ public static IEnumerable<Declaration> FindFormEventHandlers(this IEnumerable<De
342343
var result = new List<Declaration>();
343344
foreach (var declaration in forms)
344345
{
345-
result.AddRange(FindFormEventHandlers(items, declaration));
346+
result.AddRange(FindFormEventHandlers(state, declaration));
346347
}
347348

348349
return result;
349350
}
350351

351-
public static IEnumerable<Declaration> FindFormEventHandlers(this IEnumerable<Declaration> declarations, Declaration userForm)
352+
public static IEnumerable<Declaration> FindFormEventHandlers(this RubberduckParserState state, Declaration userForm)
352353
{
353-
var items = declarations as IList<Declaration> ?? declarations.ToList();
354+
var items = state.AllDeclarations.ToList();
354355
var events = items.Where(item => item.IsBuiltIn
355-
&& item.ParentScope == "MSForms.UserForm"
356+
&& item.ParentScope == "FM20.DLL;MSForms.FormEvents"
356357
&& item.DeclarationType == DeclarationType.Event).ToList();
358+
359+
var e = items.Where(item => item.DeclarationType == DeclarationType.Event).ToList();
360+
var e1 = items.Where(item => item.DeclarationType == DeclarationType.Event && item.IdentifierName == "QueryClose").ToList();
361+
362+
var s = items.Where(item => item.IdentifierName.Contains("QueryClose") || item.IdentifierName.Contains("Initialize") || item.IdentifierName.Contains("Activate")).ToList();
363+
357364
var handlerNames = events.Select(item => "UserForm_" + item.IdentifierName);
358365
var handlers = items.Where(item => item.ParentScope == userForm.Scope
359366
&& item.DeclarationType == DeclarationType.Procedure

RetailCoder.VBE/Inspections/ImplicitActiveSheetReferenceInspection.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
3636
}
3737

3838
var matches = BuiltInDeclarations.Where(item =>
39-
Targets.Contains(item.IdentifierName)).ToList();
39+
Targets.Contains(item.IdentifierName) &&
40+
item.ParentScope == "EXCEL.EXE;Excel._Global" &&
41+
item.AsTypeName == "Range").ToList();
4042

4143
var issues = matches.Where(item => item.References.Any())
4244
.SelectMany(declaration => declaration.References);

RetailCoder.VBE/Inspections/Inspector.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public Inspector(IGeneralConfigService configService, IEnumerable<IInspection> i
2424
_inspections = inspections;
2525

2626
_configService = configService;
27-
configService.LanguageChanged += ConfigServiceLanguageChanged;
27+
configService.SettingsChanged += ConfigServiceLanguageChanged;
2828
}
2929

3030
private void ConfigServiceLanguageChanged(object sender, EventArgs e)
@@ -121,7 +121,7 @@ public void Dispose()
121121
{
122122
if (_configService != null)
123123
{
124-
_configService.LanguageChanged -= ConfigServiceLanguageChanged;
124+
_configService.SettingsChanged -= ConfigServiceLanguageChanged;
125125
}
126126
}
127127
}

RetailCoder.VBE/Inspections/ParameterCanBeByValInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
4444
.Concat(declarations.FindInterfaceImplementationMembers())
4545
.ToList();
4646

47-
var formEventHandlerScopes = declarations.FindFormEventHandlers()
47+
var formEventHandlerScopes = State.FindFormEventHandlers()
4848
.Select(handler => handler.Scope);
4949

5050
var eventScopes = declarations.Where(item =>

RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
2424
{
2525
var declarations = UserDeclarations.ToList();
2626

27-
var classes = declarations.Where(item => item.DeclarationType == DeclarationType.ClassModule).ToList();
28-
var modules = declarations.Where(item => item.DeclarationType == DeclarationType.ProceduralModule).ToList();
27+
var classes = UserDeclarations.Where(item => item.DeclarationType == DeclarationType.ClassModule).ToList();
28+
var modules = UserDeclarations.Where(item => item.DeclarationType == DeclarationType.ProceduralModule).ToList();
2929

3030
var handlers = declarations.Where(item => item.DeclarationType == DeclarationType.Control)
3131
.SelectMany(control => declarations.FindEventHandlers(control)).ToList();
3232

33-
var withEventFields = declarations.Where(item => item.DeclarationType == DeclarationType.Variable && item.IsWithEvents);
33+
var withEventFields = UserDeclarations.Where(item => item.DeclarationType == DeclarationType.Variable && item.IsWithEvents);
3434
handlers.AddRange(withEventFields.SelectMany(field => declarations.FindEventProcedures(field)));
3535

3636
var forms = declarations.Where(item => item.DeclarationType == DeclarationType.ClassModule
@@ -39,7 +39,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
3939

4040
if (forms.Any())
4141
{
42-
handlers.AddRange(forms.SelectMany(form => declarations.FindFormEventHandlers(form)));
42+
handlers.AddRange(forms.SelectMany(form => State.FindFormEventHandlers(form)));
4343
}
4444

4545
handlers.AddRange(State.AllDeclarations.FindBuiltInEventHandlers());

RetailCoder.VBE/Root/RubberduckModule.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
using NLog;
3535
using Rubberduck.Parsing.Preprocessing;
3636
using System.Globalization;
37+
using Rubberduck.Parsing.Symbols;
3738

3839
namespace Rubberduck.Root
3940
{
@@ -94,7 +95,7 @@ public override void Load()
9495
Rebind<IIndenterSettings>().To<IndenterSettings>();
9596
Bind<Func<IIndenterSettings>>().ToMethod(t => () => _kernel.Get<IGeneralConfigService>().LoadConfiguration().UserSettings.IndenterSettings);
9697

97-
//Bind<TestExplorerModel>().To<StandardModuleTestExplorerModel>().InSingletonScope();
98+
BindCustomDeclarationLoadersToParser();
9899
Rebind<IRubberduckParser>().To<RubberduckParser>().InSingletonScope();
99100
Bind<Func<IVBAPreprocessor>>().ToMethod(p => () => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture)));
100101

@@ -356,6 +357,18 @@ private void BindCommandsToCodeExplorer()
356357
}
357358
}
358359

360+
private void BindCustomDeclarationLoadersToParser()
361+
{
362+
var loaders = Assembly.GetAssembly(typeof(ICustomDeclarationLoader))
363+
.GetTypes()
364+
.Where(type => type.GetInterfaces().Contains(typeof(ICustomDeclarationLoader)));
365+
366+
foreach (var loader in loaders)
367+
{
368+
_kernel.Bind<ICustomDeclarationLoader>().To(loader).InSingletonScope();
369+
}
370+
}
371+
359372
private IEnumerable<IMenuItem> GetRubberduckMenuItems()
360373
{
361374
return new[]

RetailCoder.VBE/Settings/ConfigurationLoader.cs

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66

77
namespace Rubberduck.Settings
88
{
9+
public class ConfigurationChangedEventArgs : EventArgs
10+
{
11+
public bool LanguageChanged { get; private set; }
12+
public bool InspectionSettingsChanged { get; private set; }
13+
14+
public ConfigurationChangedEventArgs(bool languageChanged, bool inspectionSettingsChanged)
15+
{
16+
LanguageChanged = languageChanged;
17+
InspectionSettingsChanged = inspectionSettingsChanged;
18+
}
19+
}
20+
921
public interface IGeneralConfigService : IConfigurationService<Configuration>
1022
{
1123
Configuration GetDefaultConfiguration();
@@ -88,42 +100,25 @@ public Configuration GetDefaultConfiguration()
88100
)
89101
};
90102
}
91-
92-
103+
93104
public void SaveConfiguration(Configuration toSerialize)
94105
{
106+
var langChanged = _generalProvider.Create().Language.Code != toSerialize.UserSettings.GeneralSettings.Language.Code;
107+
var oldInspectionSettings = _inspectionProvider.Create(_inspections).CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity));
108+
var newInspectionSettings = toSerialize.UserSettings.CodeInspectionSettings.CodeInspections.Select(s => Tuple.Create(s.Name, s.Severity));
109+
95110
_generalProvider.Save(toSerialize.UserSettings.GeneralSettings);
96111
_hotkeyProvider.Save(toSerialize.UserSettings.HotkeySettings);
97112
_todoProvider.Save(toSerialize.UserSettings.ToDoListSettings);
98113
_inspectionProvider.Save(toSerialize.UserSettings.CodeInspectionSettings);
99114
_unitTestProvider.Save(toSerialize.UserSettings.UnitTestSettings);
100115
_indenterProvider.Save(toSerialize.UserSettings.IndenterSettings);
101-
}
102-
103-
public void SaveConfiguration(Configuration toSerialize, bool languageChanged)
104-
{
105-
SaveConfiguration(toSerialize);
106-
107-
if (languageChanged)
108-
{
109-
OnLanguageChanged(EventArgs.Empty);
110-
}
111-
112-
OnSettingsChanged(EventArgs.Empty);
113-
}
114116

115-
public event EventHandler LanguageChanged;
116-
protected virtual void OnLanguageChanged(EventArgs e)
117-
{
118-
var handler = LanguageChanged;
119-
if (handler != null)
120-
{
121-
handler(this, e);
122-
}
117+
OnSettingsChanged(new ConfigurationChangedEventArgs(langChanged, !oldInspectionSettings.SequenceEqual(newInspectionSettings)));
123118
}
124119

125-
public event EventHandler SettingsChanged;
126-
protected virtual void OnSettingsChanged(EventArgs e)
120+
public event EventHandler<ConfigurationChangedEventArgs> SettingsChanged;
121+
protected virtual void OnSettingsChanged(ConfigurationChangedEventArgs e)
127122
{
128123
var handler = SettingsChanged;
129124
if (handler != null)

RetailCoder.VBE/Settings/GeneralConfigProvider.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ public interface IGeneralConfigProvider
99
GeneralSettings CreateDefaults();
1010

1111
void Save(GeneralSettings settings);
12-
13-
event EventHandler LanguageChanged;
14-
event EventHandler AutoSaveSettingsChanged;
1512
}
1613

1714
public class GeneralConfigProvider : IGeneralConfigProvider

RetailCoder.VBE/Settings/IConfigurationService.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ public interface IConfigurationService<T>
66
{
77
T LoadConfiguration();
88
void SaveConfiguration(T toSerialize);
9-
void SaveConfiguration(T toSerialize, bool languageChanged);
10-
event EventHandler LanguageChanged;
11-
event EventHandler SettingsChanged;
9+
event EventHandler<ConfigurationChangedEventArgs> SettingsChanged;
1210
}
1311
}

0 commit comments

Comments
 (0)