Skip to content

Commit e2c1d6c

Browse files
authored
Merge pull request #4257 from comintern/next
Parser NRE hotfix.
2 parents 70f513d + 8c253d6 commit e2c1d6c

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

Rubberduck.Parsing/VBA/Parsing/ModuleParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ private ModuleParseResults ParseInternal(QualifiedModuleName module, Cancellatio
9494
// otherwise none of the annotations get associated to their respective Declaration
9595
Logger.Trace($"ParseTaskID {taskId} begins extracting comments and annotations.");
9696
var (comments, annotations) = CommentsAndAnnotations(module, codePaneParseTree);
97-
Logger.Trace($"ParseTaskID {taskId} fniished extracting comments and annotations.");
97+
Logger.Trace($"ParseTaskID {taskId} finished extracting comments and annotations.");
9898
cancellationToken.ThrowIfCancellationRequested();
9999

100100
Logger.Trace($"ParseTaskID {taskId} begins attributes pass.");
@@ -153,7 +153,7 @@ private IEnumerable<CommentNode> QualifyAndUnionComments(QualifiedModuleName qua
153153
private (IParseTree tree, ITokenStream tokenStream) AttributesPassResults(QualifiedModuleName module, CancellationToken token)
154154
{
155155
token.ThrowIfCancellationRequested();
156-
var code = _attributesSourceCodeProvider.SourceCode(module);
156+
var code = _attributesSourceCodeProvider.SourceCode(module) ?? string.Empty;
157157
token.ThrowIfCancellationRequested();
158158
var attributesParseResults = _parser.Parse(module.ComponentName, module.ProjectId, code, token, CodeKind.AttributesCode);
159159
return attributesParseResults;

Rubberduck.Parsing/VBA/Parsing/VBACodeStringParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public enum ParserMode
4040
public VBACodeStringParser(string moduleName, string moduleCodeString, ParserMode mode = ParserMode.Default)
4141
{
4242
var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider();
43-
_tokenStream = tokenStreamProvider.Tokens(moduleCodeString);
43+
_tokenStream = tokenStreamProvider.Tokens(moduleCodeString ?? string.Empty);
4444
_parser = new VBAParser(_tokenStream);
4545
_parser.AddErrorListener(new MainParseExceptionErrorListener(moduleName, CodeKind.SnippetCode));
4646
_moduleName = moduleName;

RubberduckTests/Parsing/VBACodeStringParserTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,5 +102,25 @@ Public Sub Foo
102102

103103
Assert.IsInstanceOf<IParseTree>(parser.Parse().parseTree);
104104
}
105+
106+
[Test]
107+
[Category("VBACodeStringParser_Tests")]
108+
public void CanParseEmptyModule()
109+
{
110+
const string inputCode = @"";
111+
112+
var parser = new VBACodeStringParser("test", inputCode);
113+
Assert.IsInstanceOf<IParseTree>(parser.Parse().parseTree);
114+
}
115+
116+
[Test]
117+
[Category("VBACodeStringParser_Tests")]
118+
public void CanParseNullInput()
119+
{
120+
const string inputCode = null;
121+
122+
var parser = new VBACodeStringParser("test", inputCode);
123+
Assert.IsInstanceOf<IParseTree>(parser.Parse().parseTree);
124+
}
105125
}
106126
}

0 commit comments

Comments
 (0)