diff --git a/RetailCoder.VBE/API/Declaration.cs b/RetailCoder.VBE/API/Declaration.cs index e6b4058669..69e650cf87 100644 --- a/RetailCoder.VBE/API/Declaration.cs +++ b/RetailCoder.VBE/API/Declaration.cs @@ -10,14 +10,18 @@ namespace Rubberduck.API [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IDeclaration { + [ComVisible(true)] string Name { get; } + [ComVisible(true)] Accessibility Accessibility { get; } + [ComVisible(true)] DeclarationType DeclarationType { get; } string TypeName { get; } + [ComVisible(true)] bool IsArray { get; } - + [ComVisible(true)] Declaration ParentDeclaration { get; } - + [ComVisible(true)] IdentifierReference[] References { get; } } diff --git a/RetailCoder.VBE/API/ParserState.cs b/RetailCoder.VBE/API/ParserState.cs index 72007d90f3..b7851acd42 100644 --- a/RetailCoder.VBE/API/ParserState.cs +++ b/RetailCoder.VBE/API/ParserState.cs @@ -4,12 +4,11 @@ using System.Linq; using System.Runtime.InteropServices; using Rubberduck.Common; +using Rubberduck.Parsing.Symbols.DeclarationLoaders; using Rubberduck.Parsing.VBA; using Rubberduck.UI.Command.MenuItems; using Rubberduck.Parsing.Preprocessing; using System.Globalization; -using Rubberduck.Parsing.Symbols; -using Rubberduck.VBEditor.SafeComWrappers; using Rubberduck.VBEditor.SafeComWrappers.VBA; namespace Rubberduck.API @@ -72,7 +71,14 @@ public void Initialize(Microsoft.Vbe.Interop.VBE vbe) Func preprocessorFactory = () => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture)); _attributeParser = new AttributeParser(new ModuleExporter(), preprocessorFactory); _parser = new ParseCoordinator(_vbe, _state, _attributeParser, preprocessorFactory, - new List { new DebugDeclarations(_state), new SpecialFormDeclarations(_state), new FormEventDeclarations(_state), new AliasDeclarations(_state) }); + new List + { + new DebugDeclarations(_state), + new SpecialFormDeclarations(_state), + new FormEventDeclarations(_state), + new AliasDeclarations(_state), + //new RubberduckApiDeclarations(_state) + }); } /// @@ -97,7 +103,7 @@ public void BeginParse() public event Action OnReady; public event Action OnError; - private void _state_StateChanged(object sender, System.EventArgs e) + private void _state_StateChanged(object sender, EventArgs e) { _allDeclarations = _state.AllDeclarations .Select(item => new Declaration(item)) diff --git a/RetailCoder.VBE/Root/RubberduckModule.cs b/RetailCoder.VBE/Root/RubberduckModule.cs index 613bf70e6b..6cb62b23da 100644 --- a/RetailCoder.VBE/Root/RubberduckModule.cs +++ b/RetailCoder.VBE/Root/RubberduckModule.cs @@ -7,6 +7,7 @@ using Ninject.Modules; using Rubberduck.Common; using Rubberduck.Parsing; +using Rubberduck.Parsing.Symbols.DeclarationLoaders; using Rubberduck.Parsing.VBA; using Rubberduck.Settings; using Rubberduck.SettingsProvider; diff --git a/RetailCoder.VBE/UnitTesting/TestMethod.cs b/RetailCoder.VBE/UnitTesting/TestMethod.cs index 6c70b020f7..ff0e07cedc 100644 --- a/RetailCoder.VBE/UnitTesting/TestMethod.cs +++ b/RetailCoder.VBE/UnitTesting/TestMethod.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using Rubberduck.Parsing; using Rubberduck.Parsing.Symbols; using Rubberduck.UI; using Rubberduck.UI.Controls; @@ -88,16 +89,7 @@ private AssertCompletedEventArgs EvaluateResults() public NavigateCodeEventArgs GetNavigationArgs() { - var moduleName = Declaration.QualifiedName.QualifiedModuleName; - var methodName = Declaration.IdentifierName; - var module = moduleName.Component.CodeModule; - - var startLine = module.GetProcBodyStartLine(methodName, ProcKind.Procedure); - var endLine = startLine + module.GetProcCountLines(methodName, ProcKind.Procedure); - var endLineColumns = module.GetLines(endLine, 1).Length; - - var selection = new Selection(startLine, 1, endLine, endLineColumns == 0 ? 1 : endLineColumns); - return new NavigateCodeEventArgs(new QualifiedSelection(moduleName, selection)); + return new NavigateCodeEventArgs(new QualifiedSelection(Declaration.QualifiedName.QualifiedModuleName, Declaration.Context.GetSelection())); } public object[] ToArray() diff --git a/Rubberduck.Parsing/Rubberduck.Parsing.csproj b/Rubberduck.Parsing/Rubberduck.Parsing.csproj index 208197c693..1888dca353 100644 --- a/Rubberduck.Parsing/Rubberduck.Parsing.csproj +++ b/Rubberduck.Parsing/Rubberduck.Parsing.csproj @@ -143,13 +143,13 @@ - + - - - - + + + + @@ -257,6 +257,7 @@ + diff --git a/Rubberduck.Parsing/Symbols/AliasDeclarations.cs b/Rubberduck.Parsing/Symbols/DeclarationLoaders/AliasDeclarations.cs similarity index 99% rename from Rubberduck.Parsing/Symbols/AliasDeclarations.cs rename to Rubberduck.Parsing/Symbols/DeclarationLoaders/AliasDeclarations.cs index ffcbe05495..8938b3bd81 100644 --- a/Rubberduck.Parsing/Symbols/AliasDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationLoaders/AliasDeclarations.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; -using Rubberduck.Parsing.VBA; -using Rubberduck.VBEditor; using System.Linq; using Rubberduck.Parsing.Annotations; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor; -namespace Rubberduck.Parsing.Symbols +namespace Rubberduck.Parsing.Symbols.DeclarationLoaders { public class AliasDeclarations : ICustomDeclarationLoader { diff --git a/Rubberduck.Parsing/Symbols/DebugDeclarations.cs b/Rubberduck.Parsing/Symbols/DeclarationLoaders/DebugDeclarations.cs similarity index 97% rename from Rubberduck.Parsing/Symbols/DebugDeclarations.cs rename to Rubberduck.Parsing/Symbols/DeclarationLoaders/DebugDeclarations.cs index 934456a412..2e706d118c 100644 --- a/Rubberduck.Parsing/Symbols/DebugDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationLoaders/DebugDeclarations.cs @@ -1,11 +1,10 @@ -using Rubberduck.Parsing.Annotations; +using System.Collections.Generic; +using System.Linq; +using Rubberduck.Parsing.Annotations; using Rubberduck.Parsing.VBA; using Rubberduck.VBEditor; -using System.Collections.Generic; -using System.Linq; -using Rubberduck.Parsing.Grammar; -namespace Rubberduck.Parsing.Symbols +namespace Rubberduck.Parsing.Symbols.DeclarationLoaders { public class DebugDeclarations : ICustomDeclarationLoader { diff --git a/Rubberduck.Parsing/Symbols/FormEventDeclarations.cs b/Rubberduck.Parsing/Symbols/DeclarationLoaders/FormEventDeclarations.cs similarity index 99% rename from Rubberduck.Parsing/Symbols/FormEventDeclarations.cs rename to Rubberduck.Parsing/Symbols/DeclarationLoaders/FormEventDeclarations.cs index b12ba229d3..4f81c52dcc 100644 --- a/Rubberduck.Parsing/Symbols/FormEventDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationLoaders/FormEventDeclarations.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; +using Rubberduck.Parsing.Annotations; using Rubberduck.Parsing.VBA; using Rubberduck.VBEditor; -using Rubberduck.Parsing.Annotations; -namespace Rubberduck.Parsing.Symbols +namespace Rubberduck.Parsing.Symbols.DeclarationLoaders { public class FormEventDeclarations : ICustomDeclarationLoader { diff --git a/Rubberduck.Parsing/Symbols/ICustomDeclarationLoader.cs b/Rubberduck.Parsing/Symbols/DeclarationLoaders/ICustomDeclarationLoader.cs similarity index 71% rename from Rubberduck.Parsing/Symbols/ICustomDeclarationLoader.cs rename to Rubberduck.Parsing/Symbols/DeclarationLoaders/ICustomDeclarationLoader.cs index 45df9be267..6027861c2b 100644 --- a/Rubberduck.Parsing/Symbols/ICustomDeclarationLoader.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationLoaders/ICustomDeclarationLoader.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Rubberduck.Parsing.Symbols +namespace Rubberduck.Parsing.Symbols.DeclarationLoaders { public interface ICustomDeclarationLoader { diff --git a/Rubberduck.Parsing/Symbols/DeclarationLoaders/RubberduckApiDeclarations.cs b/Rubberduck.Parsing/Symbols/DeclarationLoaders/RubberduckApiDeclarations.cs new file mode 100644 index 0000000000..df73174b5d --- /dev/null +++ b/Rubberduck.Parsing/Symbols/DeclarationLoaders/RubberduckApiDeclarations.cs @@ -0,0 +1,164 @@ +//using System; +//using System.Collections.Generic; +//using System.Diagnostics; +//using System.IO; +//using System.Linq; +//using System.Reflection; +//using System.Runtime.InteropServices; +//using Rubberduck.Parsing.Annotations; +//using Rubberduck.Parsing.ComReflection; +//using Rubberduck.Parsing.VBA; +//using Rubberduck.VBEditor; + +//namespace Rubberduck.Parsing.Symbols.DeclarationLoaders +//{ +// public class RubberduckApiDeclarations : ICustomDeclarationLoader +// { +// private readonly RubberduckParserState _state; +// private readonly List _declarations = new List(); + +// public RubberduckApiDeclarations(RubberduckParserState state) +// { +// _state = state; +// } + +// public IReadOnlyList Load() +// { +// var assembly = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(a => a.GetName().Name.Equals("Rubberduck")); +// if (assembly == null) +// { +// return _declarations; +// } + +// var name = assembly.GetName(); +// var path = Path.ChangeExtension(assembly.Location, "tlb"); + +// var projectName = new QualifiedModuleName("Rubberduck", path, "Rubberduck"); +// var project = new ProjectDeclaration(projectName.QualifyMemberName("Rubberduck"), "Rubberduck", true, null) +// { +// MajorVersion = name.Version.Major, +// MinorVersion = name.Version.Minor +// }; +// _declarations.Add(project); + +// var types = assembly.DefinedTypes.WhereIsComVisible(); + +// foreach (var type in types) +// { +// var module = type.ToModuleDeclaration(project, projectName, type.IsEnum); +// _declarations.Add(module); + +// var properties = type.GetProperties().WhereIsComVisible().ToList(); + +// foreach (var property in properties) +// { +// if (property.CanWrite && property.GetSetMethod().IsPublic) +// { +// var declaration = property.ToMemberDeclaration(module, false); +// _declarations.Add(declaration); +// } +// if (property.CanRead && property.GetGetMethod().IsPublic) +// { +// var declaration = property.ToMemberDeclaration(module, true); +// _declarations.Add(declaration); +// } +// } + +// var members = type.GetMembers().WhereIsComVisible(); + +// foreach (var member in members) +// { +// if (member.MemberType == MemberTypes.Property) +// { + +// } +// //var declaration = member.ToMemberDeclaration(project); +// } +// }; +// return _declarations; +// } +// } + +// internal static class RubberduckApiDeclarationStatics +// { +// public static IEnumerable WhereIsComVisible(this IEnumerable source) where T : MemberInfo +// { +// return source.Where(member => +// { +// var attr = member.GetCustomAttributes(typeof(ComVisibleAttribute), true).FirstOrDefault(); +// return attr != null && ((ComVisibleAttribute)attr).Value; +// }); +// } + +// public static Declaration ToModuleDeclaration(this TypeInfo type, Declaration project, QualifiedModuleName projectName, bool isEnum = false) +// { +// return isEnum ? new ProceduralModuleDeclaration(projectName.QualifyMemberName(type.Name), project, type.Name, true, null, null) as Declaration : +// new ClassModuleDeclaration(projectName.QualifyMemberName(type.Name), project, type.Name, true, null, null); +// } + +// public static Declaration ToMemberDeclaration(this PropertyInfo member, Declaration parent, bool getter) +// { +// if (getter) +// { +// return new PropertyGetDeclaration(parent.QualifiedName.QualifiedModuleName.QualifyMemberName(member.Name), +// parent, +// parent, +// member.PropertyType.ToVbaTypeName(), +// null, +// string.Empty, +// parent.Accessibility, +// null, +// Selection.Home, +// member.PropertyType.IsArray, +// true, +// null, +// new Attributes()); +// } +// if (member.PropertyType.IsClass) +// { +// return new PropertySetDeclaration(parent.QualifiedName.QualifiedModuleName.QualifyMemberName(member.Name), +// parent, +// parent, +// member.PropertyType.ToVbaTypeName(), +// parent.Accessibility, +// null, +// Selection.Home, +// true, +// null, +// new Attributes()); +// } +// return new PropertyLetDeclaration(parent.QualifiedName.QualifiedModuleName.QualifyMemberName(member.Name), +// parent, +// parent, +// member.PropertyType.ToVbaTypeName(), +// parent.Accessibility, +// null, +// Selection.Home, +// true, +// null, +// new Attributes()); +// } + +// public static string ToVbaTypeName(this Type type) +// { +// var name = string.Empty; +// if (type.IsClass || type.IsEnum) +// { +// name = type.Name; +// } +// switch (type.Name) +// { +// case "bool": +// name = "Boolean"; +// break; +// case "short": +// name = "Integer"; +// break; +// case "int": +// name = "Long"; +// break; +// } +// return name + (type.IsArray ? "()" : string.Empty); +// } +// } +//} diff --git a/Rubberduck.Parsing/Symbols/SpecialFormDeclarations.cs b/Rubberduck.Parsing/Symbols/DeclarationLoaders/SpecialFormDeclarations.cs similarity index 98% rename from Rubberduck.Parsing/Symbols/SpecialFormDeclarations.cs rename to Rubberduck.Parsing/Symbols/DeclarationLoaders/SpecialFormDeclarations.cs index 07bfc05add..0f7bb8d9a3 100644 --- a/Rubberduck.Parsing/Symbols/SpecialFormDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationLoaders/SpecialFormDeclarations.cs @@ -1,12 +1,11 @@ -using Rubberduck.Parsing.Annotations; -using Rubberduck.Parsing.VBA; -using Rubberduck.VBEditor; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using Rubberduck.Parsing.Grammar; +using Rubberduck.Parsing.Annotations; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor; -namespace Rubberduck.Parsing.Symbols +namespace Rubberduck.Parsing.Symbols.DeclarationLoaders { public class SpecialFormDeclarations : ICustomDeclarationLoader { diff --git a/Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs b/Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs index 7b2a6320db..1817740425 100644 --- a/Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs +++ b/Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs @@ -3,6 +3,7 @@ using Rubberduck.Parsing.Annotations; using Rubberduck.Parsing.Binding; using Rubberduck.Parsing.Grammar; +using Rubberduck.Parsing.Symbols.DeclarationLoaders; using Rubberduck.VBEditor; using System.Collections.Generic; using System.Linq; diff --git a/Rubberduck.Parsing/VBA/ParseCoordinator.cs b/Rubberduck.Parsing/VBA/ParseCoordinator.cs index b9015c33aa..b37d6098b7 100644 --- a/Rubberduck.Parsing/VBA/ParseCoordinator.cs +++ b/Rubberduck.Parsing/VBA/ParseCoordinator.cs @@ -6,6 +6,7 @@ using Antlr4.Runtime; using Antlr4.Runtime.Tree; using Rubberduck.Parsing.Symbols; +using Rubberduck.Parsing.Symbols.DeclarationLoaders; using Rubberduck.VBEditor; using Rubberduck.Parsing.Preprocessing; using System.Diagnostics; diff --git a/Rubberduck.Parsing/VBA/RubberduckParserState.cs b/Rubberduck.Parsing/VBA/RubberduckParserState.cs index cdb93a30b1..662f83b0d3 100644 --- a/Rubberduck.Parsing/VBA/RubberduckParserState.cs +++ b/Rubberduck.Parsing/VBA/RubberduckParserState.cs @@ -532,17 +532,6 @@ public List AllComments } } - public IEnumerable GetModuleComments(IVBComponent component) - { - ModuleState state; - if (_moduleStates.TryGetValue(new QualifiedModuleName(component), out state)) - { - return state.Comments; - } - - return new List(); - } - public void SetModuleComments(IVBComponent component, IEnumerable comments) { _moduleStates[new QualifiedModuleName(component)].SetComments(new List(comments)); diff --git a/Rubberduck.sln b/Rubberduck.sln index a3fe2a57e1..2d2259e3b8 100644 --- a/Rubberduck.sln +++ b/Rubberduck.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.40629.0 +VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rubberduck", "RetailCoder.VBE\Rubberduck.csproj", "{20589DE8-432E-4359-9232-69EB070B7185}" ProjectSection(ProjectDependencies) = postProject diff --git a/RubberduckTests/Mocks/MockParser.cs b/RubberduckTests/Mocks/MockParser.cs index c14fb05397..f06da5913e 100644 --- a/RubberduckTests/Mocks/MockParser.cs +++ b/RubberduckTests/Mocks/MockParser.cs @@ -5,6 +5,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Rubberduck.Parsing.Symbols; +using Rubberduck.Parsing.Symbols.DeclarationLoaders; using Rubberduck.Parsing.VBA; using Rubberduck.VBEditor; using Rubberduck.Parsing.Preprocessing;