Skip to content

Commit 5284e60

Browse files
committed
Merge remote-tracking branch 'upstream/next' into rkapka-master
2 parents 00794ea + 2e5f26c commit 5284e60

File tree

262 files changed

+3979
-1841
lines changed

Some content is hidden

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

262 files changed

+3979
-1841
lines changed

Rubberduck.API/VBA/Parser.cs

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,24 @@
77
using System.Threading;
88
using Rubberduck.Common;
99
using Rubberduck.Parsing.PreProcessing;
10+
using Rubberduck.Parsing.Rewriter;
1011
using Rubberduck.Parsing.Symbols.DeclarationLoaders;
1112
using Rubberduck.Parsing.VBA;
1213
using Rubberduck.Parsing.Symbols;
14+
using Rubberduck.Parsing.Symbols.ParsingExceptions;
1315
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;
1420
using Rubberduck.Resources.Registration;
1521
using Rubberduck.VBEditor.ComManagement;
1622
using Rubberduck.VBEditor.Events;
1723
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1824
using Rubberduck.VBEditor.Utility;
1925
using Rubberduck.Root;
26+
using Rubberduck.VBEditor.ComManagement.TypeLibs;
27+
using Rubberduck.VBEditor.SourceCodeHandling;
2028

2129
namespace Rubberduck.API.VBA
2230
{
@@ -60,7 +68,6 @@ public interface IParserEvents
6068
public sealed class Parser : IParser, IDisposable
6169
{
6270
private RubberduckParserState _state;
63-
private AttributeParser _attributeParser;
6471
private SynchronousParseCoordinator _parser;
6572
private IVBE _vbe;
6673
private IVBEEvents _vbeEvents;
@@ -90,10 +97,20 @@ internal Parser(object vbe) : this()
9097
_state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents);
9198
_state.StateChanged += _state_StateChanged;
9299

93-
var sourceCodeHandler = _vbe.SourceCodeHandler;
94-
95-
IVBAPreprocessor preprocessorFactory() => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture));
96-
_attributeParser = new AttributeParser(sourceCodeHandler, preprocessorFactory, _state.ProjectsProvider);
100+
var sourceFileHandler = _vbe.TempSourceFileHandler;
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);
97114
var projectManager = new RepositoryProjectManager(projectRepository);
98115
var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager();
99116
var parserStateManager = new ParserStateManager(_state);
@@ -111,12 +128,19 @@ internal Parser(object vbe) : this()
111128
//new RubberduckApiDeclarations(_state)
112129
}
113130
);
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);
114140
var parseRunner = new ParseRunner(
115141
_state,
116142
parserStateManager,
117-
preprocessorFactory,
118-
_attributeParser,
119-
sourceCodeHandler);
143+
moduleParser);
120144
var declarationResolveRunner = new DeclarationResolveRunner(
121145
_state,
122146
parserStateManager,
@@ -137,7 +161,8 @@ internal Parser(object vbe) : this()
137161
_state,
138162
moduleToModuleReferenceManager,
139163
referenceRemover,
140-
supertypeClearer
164+
supertypeClearer,
165+
compilationsArgumentsCache
141166
);
142167

143168
_parser = new SynchronousParseCoordinator(

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: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using Antlr4.Runtime;
4+
using Rubberduck.Inspections.Abstract;
5+
using Rubberduck.Inspections.Results;
6+
using Rubberduck.Parsing;
7+
using Rubberduck.Parsing.Grammar;
8+
using Rubberduck.Parsing.Inspections.Abstract;
9+
using Rubberduck.Parsing.VBA;
10+
using Rubberduck.Resources.Inspections;
11+
using Rubberduck.VBEditor;
12+
13+
namespace Rubberduck.Inspections.Inspections.Concrete
14+
{
15+
public sealed class ObsoleteCallingConventionInspection : ParseTreeInspectionBase
16+
{
17+
public ObsoleteCallingConventionInspection(RubberduckParserState state)
18+
: base(state)
19+
{
20+
Listener = new ObsoleteCallingConventionListener();
21+
}
22+
23+
public override IInspectionListener Listener { get; }
24+
25+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
26+
{
27+
return Listener.Contexts
28+
.Where(context => ((VBAParser.DeclareStmtContext) context.Context).CDECL() != null &&
29+
!IsIgnoringInspectionResultFor(context.ModuleName, context.Context.Start.Line))
30+
.Select(context => new QualifiedContextInspectionResult(this,
31+
string.Format(InspectionResults.ObsoleteCallingConventionInspection,
32+
((VBAParser.DeclareStmtContext) context.Context).identifier().GetText()), context));
33+
}
34+
35+
public class ObsoleteCallingConventionListener : VBAParserBaseListener, IInspectionListener
36+
{
37+
private readonly List<QualifiedContext<ParserRuleContext>> _contexts = new List<QualifiedContext<ParserRuleContext>>();
38+
public IReadOnlyList<QualifiedContext<ParserRuleContext>> Contexts => _contexts;
39+
40+
public QualifiedModuleName CurrentModuleName { get; set; }
41+
42+
public void ClearContexts()
43+
{
44+
_contexts.Clear();
45+
}
46+
47+
public override void ExitDeclareStmt(VBAParser.DeclareStmtContext context)
48+
{
49+
_contexts.Add(new QualifiedContext<ParserRuleContext>(CurrentModuleName, context));
50+
base.ExitDeclareStmt(context);
51+
}
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)