Skip to content

Commit 357c70c

Browse files
committed
merge next
2 parents d5e85b9 + 1cf6e0f commit 357c70c

File tree

256 files changed

+5056
-1942
lines changed

Some content is hidden

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

256 files changed

+5056
-1942
lines changed

Rubberduck.API/VBA/Parser.cs

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44
using System.Globalization;
55
using System.Linq;
66
using System.Runtime.InteropServices;
7+
using System.Threading;
78
using Rubberduck.Common;
89
using Rubberduck.Parsing.PreProcessing;
10+
using Rubberduck.Parsing.Rewriter;
911
using Rubberduck.Parsing.Symbols.DeclarationLoaders;
1012
using Rubberduck.Parsing.VBA;
1113
using Rubberduck.Parsing.Symbols;
14+
using Rubberduck.Parsing.Symbols.ParsingExceptions;
1215
using Rubberduck.Parsing.UIContext;
16+
using Rubberduck.Parsing.VBA.ComReferenceLoading;
17+
using Rubberduck.Parsing.VBA.DeclarationResolving;
18+
using Rubberduck.Parsing.VBA.Parsing;
19+
using Rubberduck.Parsing.VBA.ReferenceManagement;
1320
using Rubberduck.Resources.Registration;
1421
using Rubberduck.VBEditor.ComManagement;
1522
using Rubberduck.VBEditor.Events;
1623
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1724
using Rubberduck.VBEditor.Utility;
1825
using Rubberduck.Root;
26+
using Rubberduck.VBEditor.ComManagement.TypeLibs;
27+
using Rubberduck.VBEditor.SourceCodeHandling;
1928

2029
namespace Rubberduck.API.VBA
2130
{
@@ -59,16 +68,17 @@ public interface IParserEvents
5968
public sealed class Parser : IParser, IDisposable
6069
{
6170
private RubberduckParserState _state;
62-
private AttributeParser _attributeParser;
63-
private ParseCoordinator _parser;
71+
private SynchronousParseCoordinator _parser;
6472
private IVBE _vbe;
6573
private IVBEEvents _vbeEvents;
6674
private readonly IUiDispatcher _dispatcher;
75+
private readonly CancellationTokenSource _tokenSource;
6776

6877
internal Parser()
6978
{
7079
UiContextProvider.Initialize();
7180
_dispatcher = new UiDispatcher(UiContextProvider.Instance());
81+
_tokenSource = new CancellationTokenSource();
7282
}
7383

7484
// vbe is the com coclass interface from the interop assembly.
@@ -87,10 +97,20 @@ internal Parser(object vbe) : this()
8797
_state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents);
8898
_state.StateChanged += _state_StateChanged;
8999

90-
var sourceCodeHandler = _vbe.SourceCodeHandler;
91-
92-
IVBAPreprocessor preprocessorFactory() => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture));
93-
_attributeParser = new AttributeParser(sourceCodeHandler, preprocessorFactory, _state.ProjectsProvider);
100+
var sourceFileHandler = _vbe.SourceFileHandler;
101+
var vbeVersion = double.Parse(_vbe.Version, CultureInfo.InvariantCulture);
102+
var predefinedCompilationConstants = new VBAPredefinedCompilationConstants(vbeVersion);
103+
var typeLibProvider = new TypeLibWrapperProvider(projectRepository);
104+
var compilationArgumentsProvider = new CompilationArgumentsProvider(typeLibProvider, _dispatcher, predefinedCompilationConstants);
105+
var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider);
106+
var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory();
107+
var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory);
108+
var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache);
109+
var mainParseErrorListenerFactory = new MainParseErrorListenerFactory();
110+
var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory);
111+
var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider();
112+
var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor);
113+
var attributesSourceCodeHandler = new SourceFileHandlerSourceCodeHandlerAdapter(sourceFileHandler, projectRepository);
94114
var projectManager = new RepositoryProjectManager(projectRepository);
95115
var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager();
96116
var parserStateManager = new ParserStateManager(_state);
@@ -108,12 +128,19 @@ internal Parser(object vbe) : this()
108128
//new RubberduckApiDeclarations(_state)
109129
}
110130
);
131+
var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository);
132+
var moduleRewriterFactory = new ModuleRewriterFactory(
133+
codePaneSourceCodeHandler,
134+
attributesSourceCodeHandler);
135+
var moduleParser = new ModuleParser(
136+
codePaneSourceCodeHandler,
137+
attributesSourceCodeHandler,
138+
stringParser,
139+
moduleRewriterFactory);
111140
var parseRunner = new ParseRunner(
112141
_state,
113142
parserStateManager,
114-
preprocessorFactory,
115-
_attributeParser,
116-
sourceCodeHandler);
143+
moduleParser);
117144
var declarationResolveRunner = new DeclarationResolveRunner(
118145
_state,
119146
parserStateManager,
@@ -134,25 +161,25 @@ internal Parser(object vbe) : this()
134161
_state,
135162
moduleToModuleReferenceManager,
136163
referenceRemover,
137-
supertypeClearer
164+
supertypeClearer,
165+
compilationsArgumentsCache
138166
);
139167

140-
_parser = new ParseCoordinator(
168+
_parser = new SynchronousParseCoordinator(
141169
_state,
142170
parsingStageService,
143171
parsingCacheService,
144172
projectManager,
145173
parserStateManager
146174
);
147175
}
148-
176+
149177
/// <summary>
150178
/// Blocking call, for easier unit-test code
151179
/// </summary>
152180
public void Parse()
153181
{
154-
// blocking call
155-
_parser.Parse(new System.Threading.CancellationTokenSource());
182+
_parser.Parse(_tokenSource);
156183
}
157184

158185
/// <summary>
@@ -163,7 +190,7 @@ public void BeginParse()
163190
// non-blocking call
164191
_dispatcher.Invoke(() => _state.OnParseRequested(this));
165192
}
166-
193+
167194
public delegate void OnStateChangedDelegate(ParserState ParserState);
168195
public event OnStateChangedDelegate OnStateChanged;
169196

Rubberduck.CodeAnalysis/Inspections/Abstract/ParseTreeInspectionBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Rubberduck.Parsing.Inspections.Abstract;
22
using Rubberduck.Parsing.VBA;
3+
using Rubberduck.Parsing.VBA.Parsing;
34

45
namespace Rubberduck.Inspections.Abstract
56
{
@@ -9,6 +10,6 @@ protected ParseTreeInspectionBase(RubberduckParserState state)
910
: base(state) { }
1011

1112
public abstract IInspectionListener Listener { get; }
12-
public virtual ParsePass Pass => ParsePass.CodePanePass;
13+
public virtual CodeKind TargetKindOfCode => CodeKind.CodePaneCode;
1314
}
1415
}

Rubberduck.CodeAnalysis/Inspections/Abstract/QuickFixBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using NLog;
55
using Rubberduck.Parsing.Inspections.Abstract;
66
using Rubberduck.Parsing.VBA;
7+
using Rubberduck.Parsing.VBA.Extensions;
78

89
namespace Rubberduck.Inspections.Abstract
910
{

Rubberduck.CodeAnalysis/Inspections/Concrete/EmptyModuleInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Rubberduck.Resources.Inspections;
88
using Rubberduck.Parsing.Symbols;
99
using Rubberduck.Parsing.VBA;
10+
using Rubberduck.Parsing.VBA.Extensions;
1011
using Rubberduck.VBEditor.SafeComWrappers;
1112

1213
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/ImplicitByRefModifierInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Rubberduck.Parsing.Inspections.Abstract;
1010
using Rubberduck.Resources.Inspections;
1111
using Rubberduck.Parsing.VBA;
12+
using Rubberduck.Parsing.VBA.Extensions;
1213
using Rubberduck.VBEditor;
1314

1415
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/IntegerDataTypeInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Parsing.Inspections.Abstract;
99
using Rubberduck.Parsing.Symbols;
1010
using Rubberduck.Parsing.VBA;
11+
using Rubberduck.Parsing.VBA.Extensions;
1112
using Rubberduck.Resources;
1213

1314
namespace Rubberduck.Inspections.Concrete

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingAnnotationArgumentInspection.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Rubberduck.Parsing.Inspections.Abstract;
1010
using Rubberduck.Resources.Inspections;
1111
using Rubberduck.Parsing.VBA;
12+
using Rubberduck.Parsing.VBA.Parsing;
1213
using Rubberduck.VBEditor;
1314

1415
namespace Rubberduck.Inspections.Concrete
@@ -18,7 +19,7 @@ public sealed class MissingAnnotationArgumentInspection : ParseTreeInspectionBas
1819
public MissingAnnotationArgumentInspection(RubberduckParserState state)
1920
: base(state) { }
2021

21-
public override ParsePass Pass => ParsePass.AttributesPass;
22+
public override CodeKind TargetKindOfCode => CodeKind.AttributesCode;
2223

2324
public override IInspectionListener Listener { get; } =
2425
new InvalidAnnotationStatementListener();

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingAttributeInspection.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Rubberduck.Resources.Inspections;
1212
using Rubberduck.Parsing.Symbols;
1313
using Rubberduck.Parsing.VBA;
14+
using Rubberduck.Parsing.VBA.Parsing;
1415

1516
namespace Rubberduck.Inspections.Concrete
1617
{
@@ -23,7 +24,7 @@ public MissingAttributeInspection(RubberduckParserState state)
2324
Listener = new MissingMemberAttributeListener(state);
2425
}
2526

26-
public override ParsePass Pass => ParsePass.AttributesPass;
27+
public override CodeKind TargetKindOfCode => CodeKind.AttributesCode;
2728

2829
public override IInspectionListener Listener { get; }
2930

Rubberduck.CodeAnalysis/Inspections/Concrete/ObsoleteCallStatementInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Parsing.Inspections.Abstract;
99
using Rubberduck.Resources.Inspections;
1010
using Rubberduck.Parsing.VBA;
11+
using Rubberduck.Parsing.VBA.Extensions;
1112
using Rubberduck.VBEditor;
1213

1314
namespace Rubberduck.Inspections.Concrete
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using Rubberduck.Inspections.Abstract;
4+
using Rubberduck.Inspections.Results;
5+
using Rubberduck.Parsing.Annotations;
6+
using Rubberduck.Parsing.Inspections.Abstract;
7+
using Rubberduck.Parsing.Symbols;
8+
using Rubberduck.Parsing.VBA;
9+
using Rubberduck.Resources.Inspections;
10+
11+
namespace Rubberduck.Inspections.Inspections.Concrete
12+
{
13+
public sealed class ObsoleteMemberUsageInspection : InspectionBase
14+
{
15+
public ObsoleteMemberUsageInspection(RubberduckParserState state) : base(state)
16+
{
17+
}
18+
19+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
20+
{
21+
var declarations = State.AllUserDeclarations
22+
.Where(declaration => declaration.DeclarationType.HasFlag(DeclarationType.Member) &&
23+
declaration.Annotations.Any(annotation =>annotation.AnnotationType == AnnotationType.Obsolete));
24+
25+
var issues = new List<IdentifierReferenceInspectionResult>();
26+
27+
foreach (var declaration in declarations)
28+
{
29+
var replacementDocumentation =
30+
((ObsoleteAnnotation) declaration.Annotations.First(annotation =>
31+
annotation.AnnotationType == AnnotationType.Obsolete)).ReplacementDocumentation;
32+
33+
issues.AddRange(declaration.References.Select(reference =>
34+
new IdentifierReferenceInspectionResult(this,
35+
string.Format(InspectionResults.ObsoleteMemberUsageInspection, reference.IdentifierName, replacementDocumentation),
36+
State, reference)));
37+
}
38+
39+
return issues;
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)