Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
c4c0132
Added skeleton for ProjectsRepository
MDoerner Jan 9, 2018
aee6daa
Implemented ProjectsRepository (still throws to validate tests)
MDoerner Jan 10, 2018
2c77627
Added caching code modules to the IProjectsProvider and IProjectsRepo…
MDoerner Jan 10, 2018
d3d012b
Made QualifiedModuleName a property of IVBComponent, ICodeModule and …
MDoerner Jan 10, 2018
453d655
Tests for ProjectsRepository
MDoerner Jan 10, 2018
a2c4b5d
Adjusted the wrapper mocks to have proper equality checks and to expo…
MDoerner Jan 12, 2018
a951318
Finished tests for ProjectsProvider; Includes further improvements to…
MDoerner Jan 12, 2018
600e845
Wired up ProjectsRepository in IoC installer.
MDoerner Jan 14, 2018
c037def
Introduced RepositoryProjectManager and made RubberduckPArserState us…
MDoerner Jan 14, 2018
3ddfe84
Amended the shadowed declaration tests to not test some combinations …
MDoerner Jan 14, 2018
55b518e
Introduced a constant flag in SafeComWrapper to toggle logging of suc…
MDoerner Jan 14, 2018
df16b58
Tweak to QualifiedModuleName
MDoerner Jan 14, 2018
82e514d
Added ProjectsProvider property to the parser state.
MDoerner Jan 14, 2018
9c238b0
Removed most uses of QualifiedModuleName.Component.
MDoerner Jan 14, 2018
b869278
Removed remaining uses of QualifiedModuleName.Component.
MDoerner Jan 14, 2018
4e66cf3
Removed QualifiedModuleName.Component.
MDoerner Jan 14, 2018
e5e2f5d
Merge branch 'next' into ExtractComponentsFromQMNs
MDoerner Jan 19, 2018
18c02b5
Removed useless finalizer in release builds and minor clean up
MDoerner Jan 19, 2018
0a4c479
Some COM release tweaks for document modules
MDoerner Jan 19, 2018
940c3cf
Removed GetContenHash from QualifiedModuleName, since it is basically…
MDoerner Jan 20, 2018
ed15abf
Made the QualifiedModuleName, the QualifiedMemberName and the Qualifi…
MDoerner Jan 28, 2018
952cf5e
Small tweak to RubberduckParserState design mode validation on events
MDoerner Jan 28, 2018
c33ffa3
Made the ProjectsRepository ignore protected projects.
MDoerner Jan 28, 2018
fb3e398
Postponed loading od the ProjectsRepository to the first refresh to a…
MDoerner Jan 21, 2018
d097243
Removed all references to ProjectRepository.CodeModeul because this i…
MDoerner Jan 28, 2018
9446fbe
Removed caching of code modules from ProjectsRepository because it ca…
MDoerner Jan 28, 2018
eb14de8
Merge branch 'next' into ExtractComponentsFromQMNsSecondTry
MDoerner Jan 28, 2018
c485e93
Merge branch 'next' into ExtractComponentsFromQMNsSecondTry
MDoerner Jan 28, 2018
2a67236
Some extension methods and a QualifiedModuleName property on Declarat…
MDoerner Jan 29, 2018
0eb5b8d
Addressed comments to PR #3735.
MDoerner Jan 29, 2018
9ecf58b
Merge branch 'next' into ExtractComponentsFromQMNsSecondTry
MDoerner Jan 29, 2018
52fbfcc
Small tweak to getting the module hash in RubberduchParserState
MDoerner Jan 29, 2018
29e0e31
Merge branch 'next' into ExtractComponentsFromQMNsSecondTry
MDoerner Jan 29, 2018
2e518b4
Cosmetic changes to the ComWrapperEnumerator.
MDoerner Jan 30, 2018
e3a82e0
Merge branch 'next' into ExtractComponentsFromQMNsSecondTry
MDoerner Feb 1, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions RetailCoder.VBE/API/VBA/ParserState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Rubberduck.Parsing.VBA;
using Rubberduck.UI.Command.MenuItems;
using Rubberduck.Parsing.Symbols;
using Rubberduck.VBEditor.ComManagement;
using Rubberduck.VBEditor.SafeComWrappers.VBA;

namespace Rubberduck.API.VBA
Expand Down Expand Up @@ -64,14 +65,15 @@ public void Initialize(Microsoft.Vbe.Interop.VBE vbe)

_vbe = new VBE(vbe);
var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory();
_state = new RubberduckParserState(null, declarationFinderFactory);
var projectRepository = new ProjectsRepository(_vbe);
_state = new RubberduckParserState(null, projectRepository, declarationFinderFactory);
_state.StateChanged += _state_StateChanged;

var exporter = new ModuleExporter();

Func<IVBAPreprocessor> preprocessorFactory = () => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture));
_attributeParser = new AttributeParser(exporter, preprocessorFactory);
var projectManager = new ProjectManager(_state, _vbe);
_attributeParser = new AttributeParser(exporter, preprocessorFactory, _state.ProjectsProvider);
var projectManager = new RepositoryProjectManager(projectRepository);
var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager();
var parserStateManager = new ParserStateManager(_state);
var referenceRemover = new ReferenceRemover(_state, moduleToModuleReferenceManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Rubberduck.VBEditor;
using resx = Rubberduck.UI.CodeExplorer.CodeExplorer;
using Rubberduck.Parsing.Annotations;
using Rubberduck.VBEditor.ComManagement;
using Rubberduck.VBEditor.SafeComWrappers;

namespace Rubberduck.Navigation.CodeExplorer
Expand All @@ -33,10 +34,13 @@ public class CodeExplorerComponentViewModel : CodeExplorerItemViewModel, ICodeEx
DeclarationType.Variable,
};

public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations)
private readonly IProjectsProvider _projectsProvider;

public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declaration declaration, IEnumerable<Declaration> declarations, IProjectsProvider projectsProvider)
{
Parent = parent;
Declaration = declaration;
_projectsProvider = projectsProvider;
_icon = Icons[DeclarationType];
Items = declarations.GroupBy(item => item.Scope).SelectMany(grouping =>
grouping.Where(item => item.ParentDeclaration != null
Expand All @@ -48,12 +52,17 @@ public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declarat

_name = Declaration.IdentifierName;

var component = declaration.QualifiedName.QualifiedModuleName.Component;
var qualifiedModuleName = declaration.QualifiedName.QualifiedModuleName;
try
{
if (component.Type == ComponentType.Document)
if (qualifiedModuleName.ComponentType == ComponentType.Document)
{
var parenthesizedName = component.Properties["Name"].Value.ToString();
var component = _projectsProvider.Component(qualifiedModuleName);
string parenthesizedName;
using (var properties = component.Properties)
{
parenthesizedName = properties["Name"].Value.ToString() ?? String.Empty;
}

if (ContainsBuiltinDocumentPropertiesProperty())
{
Expand All @@ -79,7 +88,7 @@ public CodeExplorerComponentViewModel(CodeExplorerItemViewModel parent, Declarat

private bool ContainsBuiltinDocumentPropertiesProperty()
{
var properties = Declaration.QualifiedName.QualifiedModuleName.Component.Properties;
using (var properties = _projectsProvider.Component(Declaration.QualifiedName.QualifiedModuleName).Properties)
{
return properties.Any(item => item.Name == "BuiltinDocumentProperties");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Windows.Media.Imaging;
using Rubberduck.Parsing.Symbols;
using Rubberduck.VBEditor;
using Rubberduck.VBEditor.ComManagement;
using resx = Rubberduck.Properties.Resources;

namespace Rubberduck.Navigation.CodeExplorer
Expand All @@ -18,9 +19,12 @@ public class CodeExplorerCustomFolderViewModel : CodeExplorerItemViewModel
DeclarationType.UserForm,
};

public CodeExplorerCustomFolderViewModel(CodeExplorerItemViewModel parent, string name, string fullPath)
private readonly IProjectsProvider _projectsProvider;

public CodeExplorerCustomFolderViewModel(CodeExplorerItemViewModel parent, string name, string fullPath, IProjectsProvider projectsProvider)
{
_parent = parent;
_projectsProvider = projectsProvider;
FullPath = fullPath;
Name = name.Replace("\"", string.Empty);
FolderAttribute = string.Format("@Folder(\"{0}\")", fullPath.Replace("\"", string.Empty));
Expand All @@ -42,7 +46,7 @@ public void AddNodes(List<Declaration> declarations)
var members = declarations.Where(item =>
!ComponentTypes.Contains(item.DeclarationType) && item.ComponentName == moduleName);

AddChild(new CodeExplorerComponentViewModel(this, parent, members));
AddChild(new CodeExplorerComponentViewModel(this, parent, members, _projectsProvider));
}
catch (InvalidOperationException exception)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,13 @@ public override int Compare(CodeExplorerItemViewModel x, CodeExplorerItemViewMod

if (x.ExpandedIcon != y.ExpandedIcon)
{
// ReSharper disable PossibleInvalidOperationException - this will have a component
var xComponent = x.QualifiedSelection.Value.QualifiedName.Component;
var yComponent = y.QualifiedSelection.Value.QualifiedName.Component;
// ReSharper disable PossibleInvalidOperationException - this will have a QualifiedSelection
var xQmn = x.QualifiedSelection.Value.QualifiedName;
var yQmn = y.QualifiedSelection.Value.QualifiedName;

if (xComponent.Type == ComponentType.Document ^ yComponent.Type == ComponentType.Document)
if (xQmn.ComponentType == ComponentType.Document ^ yQmn.ComponentType == ComponentType.Document)
{
return xComponent.Type == ComponentType.Document ? -1 : 1;
return xQmn.ComponentType == ComponentType.Document ? -1 : 1;
}
}

Expand Down
11 changes: 4 additions & 7 deletions RetailCoder.VBE/Navigation/CodeExplorer/CodeExplorerViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ public sealed class CodeExplorerViewModel : ViewModelBase, IDisposable
{
private readonly FolderHelper _folderHelper;
private readonly RubberduckParserState _state;
private IConfigProvider<GeneralSettings> _generalSettingsProvider;
private readonly IConfigProvider<WindowSettings> _windowSettingsProvider;
private readonly GeneralSettings _generalSettings;
private readonly WindowSettings _windowSettings;
Expand All @@ -42,7 +41,6 @@ public CodeExplorerViewModel(FolderHelper folderHelper, RubberduckParserState st
_state = state;
_state.StateChanged += HandleStateChanged;
_state.ModuleStateChanged += ParserState_ModuleStateChanged;
_generalSettingsProvider = generalSettingsProvider;
_windowSettingsProvider = windowSettingsProvider;

if (generalSettingsProvider != null)
Expand Down Expand Up @@ -374,8 +372,7 @@ private void ParserState_ModuleStateChanged(object sender, Parsing.ParseProgress
return;
}

var components = e.Module.Component.Collection;
var componentProject = components.Parent;
var componentProject = _state.ProjectsProvider.Project(e.Module.ProjectId);
{
var projectNode = Projects.OfType<CodeExplorerProjectViewModel>()
.FirstOrDefault(p => p.Declaration.Project.Equals(componentProject));
Expand All @@ -399,13 +396,13 @@ private void ParserState_ModuleStateChanged(object sender, Parsing.ParseProgress
{
if (folderNode == null)
{
folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName);
folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName, _state.ProjectsProvider);
projectNode.AddChild(folderNode);
}

var declaration = CreateDeclaration(e.Module);
var newNode =
new CodeExplorerComponentViewModel(folderNode, declaration, new List<Declaration>())
new CodeExplorerComponentViewModel(folderNode, declaration, new List<Declaration>(), _state.ProjectsProvider)
{
IsErrorState = true
};
Expand All @@ -427,7 +424,7 @@ private Declaration CreateDeclaration(QualifiedModuleName module)
{
var projectDeclaration =
_state.DeclarationFinder.UserDeclarations(DeclarationType.Project)
.FirstOrDefault(item => item.Project.VBComponents.Contains(module.Component));
.FirstOrDefault(item => item.Project.ProjectId == module.ProjectId);

if (module.ComponentType == ComponentType.StandardModule)
{
Expand Down
4 changes: 2 additions & 2 deletions RetailCoder.VBE/Navigation/Folders/FolderHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration =
{
var delimiter = GetDelimiter();

var root = new CodeExplorerCustomFolderViewModel(null, string.Empty, string.Empty);
var root = new CodeExplorerCustomFolderViewModel(null, string.Empty, string.Empty, _state.ProjectsProvider);

var items = declaration == null
? _state.AllUserDeclarations.ToList()
Expand All @@ -46,7 +46,7 @@ public CodeExplorerCustomFolderViewModel GetFolderTree(Declaration declaration =
var node = currentNode.Items.FirstOrDefault(i => i.Name == section);
if (node == null)
{
node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath);
node = new CodeExplorerCustomFolderViewModel(currentNode, section, fullPath, _state.ProjectsProvider);
currentNode.AddChild(node);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public void Refactor(QualifiedSelection selection)

if (oldSelection.HasValue)
{
using (var module = oldSelection.Value.QualifiedName.Component.CodeModule)
using (var module = _state.ProjectsProvider.Component(oldSelection.Value.QualifiedName).CodeModule)
{
using (var pane = module.CodePane)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,12 @@ private void PromoteVariable(IModuleRewriter rewriter, Declaration target)

if (oldSelection.HasValue)
{
var module = oldSelection.Value.QualifiedName.Component.CodeModule;
var pane = module.CodePane;
using (var module = _state.ProjectsProvider.Component(oldSelection.Value.QualifiedName).CodeModule)
{
pane.Selection = oldSelection.Value.Selection;
using (var pane = module.CodePane)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

personal preference: stacked using blocks or explicit multi-using:

using (var module = [...])
using (var pane = module.CodePane) 
{
...
}

or the second alternative

using (var module = [...],
           var pane = module.CodePane)
{
...
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I asked @retailcoder in chat some PRs back and he decided to use explicit scopes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now you say it, I recall...

{
pane.Selection = oldSelection.Value.Selection;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Rubberduck.Parsing.VBA;
using Rubberduck.UI;
using Rubberduck.VBEditor;
using Rubberduck.VBEditor.ComManagement;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
using Antlr4.Runtime;

Expand All @@ -21,11 +22,13 @@ public class RemoveParametersRefactoring : IRefactoring
private readonly IRefactoringPresenterFactory<IRemoveParametersPresenter> _factory;
private RemoveParametersModel _model;
private readonly HashSet<IModuleRewriter> _rewriters = new HashSet<IModuleRewriter>();
private readonly IProjectsProvider _projectsProvider;

public RemoveParametersRefactoring(IVBE vbe, IRefactoringPresenterFactory<IRemoveParametersPresenter> factory)
public RemoveParametersRefactoring(IVBE vbe, IRefactoringPresenterFactory<IRemoveParametersPresenter> factory, IProjectsProvider projectsProvider)
{
_vbe = vbe;
_factory = factory;
_projectsProvider = projectsProvider;
}

public void Refactor()
Expand All @@ -42,16 +45,9 @@ public void Refactor()
return;
}

QualifiedSelection? oldSelection = null;
using (var pane = _vbe.ActiveCodePane)
{
using (var module = pane.CodeModule)
{
if (!module.IsWrappingNullReference)
{
oldSelection = module.GetQualifiedSelection();
}
}
var oldSelection = pane.GetQualifiedSelection();

RemoveParameters();

Expand All @@ -66,7 +62,7 @@ public void Refactor()

public void Refactor(QualifiedSelection target)
{
var pane = _vbe.ActiveCodePane;
using (var pane = _vbe.ActiveCodePane)
{
if (pane.IsWrappingNullReference)
{
Expand All @@ -84,7 +80,7 @@ public void Refactor(Declaration target)
throw new ArgumentException("Invalid declaration type");
}

var pane = _vbe.ActiveCodePane;
using (var pane = _vbe.ActiveCodePane)
{
if (pane.IsWrappingNullReference)
{
Expand Down Expand Up @@ -144,7 +140,7 @@ private void AdjustReferences(IEnumerable<IdentifierReference> references, Decla
continue;
}

using (var module = reference.QualifiedModuleName.Component.CodeModule)
using (var module = _projectsProvider.Component(reference.QualifiedModuleName).CodeModule)
{
RemoveCallArguments(argumentList, module);
}
Expand Down
20 changes: 14 additions & 6 deletions RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,8 @@ private bool IsValidTarget(Declaration target)

if (target.DeclarationType.HasFlag(DeclarationType.Control))
{
using (var controls = target.QualifiedName.QualifiedModuleName.Component.Controls)
var component = _state.ProjectsProvider.Component(target.QualifiedName.QualifiedModuleName);
using (var controls = component.Controls)
{
using (var control = controls.FirstOrDefault(item => item.Name == target.IdentifierName))
{
Expand All @@ -225,7 +226,7 @@ private bool IsValidTarget(Declaration target)
}
else if (target.DeclarationType.HasFlag(DeclarationType.Module))
{
using (var module = target.QualifiedName.QualifiedModuleName.Component.CodeModule)
using (var module = _state.ProjectsProvider.Component(target.QualifiedName.QualifiedModuleName).CodeModule)
{
if (module.IsWrappingNullReference)
{
Expand Down Expand Up @@ -388,7 +389,8 @@ private void RenameVariable()
{
if (_model.Target.DeclarationType.HasFlag(DeclarationType.Control))
{
using (var controls = _model.Target.QualifiedName.QualifiedModuleName.Component.Controls)
var component = _state.ProjectsProvider.Component(_model.Target.QualifiedName.QualifiedModuleName);
using (var controls = component.Controls)
{
using (var control = controls.SingleOrDefault(item => item.Name == _model.Target.IdentifierName))
{
Expand Down Expand Up @@ -431,7 +433,7 @@ private void RenameModule()
}
}

var component = _model.Target.QualifiedName.QualifiedModuleName.Component;
var component = _state.ProjectsProvider.Component(_model.Target.QualifiedName.QualifiedModuleName);
if (component.Type == ComponentType.Document)
{
var properties = component.Properties;
Expand Down Expand Up @@ -564,9 +566,15 @@ private IEnumerable<Declaration> FindEventHandlersForControl(Declaration control

private void CacheInitialSelection(QualifiedSelection qSelection)
{
if (!qSelection.QualifiedName.Component.CodeModule.CodePane.IsWrappingNullReference)
using (var codeModule = _state.ProjectsProvider.Component(qSelection.QualifiedName).CodeModule)
{
_initialSelection = new Tuple<ICodePane, Selection>(qSelection.QualifiedName.Component.CodeModule.CodePane, qSelection.QualifiedName.Component.CodeModule.CodePane.Selection);
using (var codePane = codeModule.CodePane)
{
if (!codePane.IsWrappingNullReference)
{
_initialSelection = new Tuple<ICodePane, Selection>(codePane, codePane.Selection);
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System.Linq;
using System.Windows.Forms;
using Rubberduck.Parsing.Rewriter;
using Rubberduck.VBEditor.ComManagement;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;

namespace Rubberduck.Refactorings.ReorderParameters
Expand All @@ -20,12 +21,14 @@ public class ReorderParametersRefactoring : IRefactoring
private ReorderParametersModel _model;
private readonly IMessageBox _messageBox;
private readonly HashSet<IModuleRewriter> _rewriters = new HashSet<IModuleRewriter>();
private readonly IProjectsProvider _projectsProvider;

public ReorderParametersRefactoring(IVBE vbe, IRefactoringPresenterFactory<IReorderParametersPresenter> factory, IMessageBox messageBox)
public ReorderParametersRefactoring(IVBE vbe, IRefactoringPresenterFactory<IReorderParametersPresenter> factory, IMessageBox messageBox, IProjectsProvider projectsProvider)
{
_vbe = vbe;
_factory = factory;
_messageBox = messageBox;
_projectsProvider = projectsProvider;
}

public void Refactor()
Expand Down Expand Up @@ -122,7 +125,6 @@ private void AdjustReferences(IEnumerable<IdentifierReference> references)
{
foreach (var reference in references.Where(item => item.Context != _model.TargetDeclaration.Context))
{
var module = reference.QualifiedModuleName.Component.CodeModule;
VBAParser.ArgumentListContext argumentList = null;
var callStmt = reference.Context.GetAncestor<VBAParser.CallStmtContext>();
if (callStmt != null)
Expand All @@ -139,8 +141,15 @@ private void AdjustReferences(IEnumerable<IdentifierReference> references)
}
}

if (argumentList == null) { continue; }
RewriteCall(argumentList, module);
if (argumentList == null)
{
continue;
}

using (var module = _projectsProvider.Component(reference.QualifiedModuleName).CodeModule)
{
RewriteCall(argumentList, module);
}
}
}

Expand Down
Loading