From 617b27f07c3bc45890f3fff8194436b0b98888f7 Mon Sep 17 00:00:00 2001 From: Max Doerner Date: Sat, 24 Aug 2019 18:38:48 +0200 Subject: [PATCH] Strip parentheses from AsTypeName of array returning functions and properties --- .../DeclarationSymbolsListener.cs | 11 ++++- RubberduckTests/Grammar/ResolverTests.cs | 46 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/Rubberduck.Parsing/VBA/DeclarationResolving/DeclarationSymbolsListener.cs b/Rubberduck.Parsing/VBA/DeclarationResolving/DeclarationSymbolsListener.cs index f13ccbe09f..d7ff1e4652 100644 --- a/Rubberduck.Parsing/VBA/DeclarationResolving/DeclarationSymbolsListener.cs +++ b/Rubberduck.Parsing/VBA/DeclarationResolving/DeclarationSymbolsListener.cs @@ -93,6 +93,7 @@ private IEnumerable FindGeneralAnnotations(int firstLine) var isByRef = argContext.BYREF() != null || argContext.BYVAL() == null; var isParamArray = argContext.PARAMARRAY() != null; + result = new ParameterDeclaration( new QualifiedMemberName(_qualifiedModuleName, identifierName), _parentDeclaration, @@ -385,9 +386,12 @@ public override void EnterFunctionStmt(VBAParser.FunctionStmtContext context) : asTypeClause.type().GetText() : SymbolList.TypeHintToTypeName[typeHint]; var isArray = asTypeName.EndsWith("()"); + var actualAsTypeName = isArray && asTypeName.EndsWith("()") + ? asTypeName.Substring(0, asTypeName.Length - 2) + : asTypeName; var declaration = CreateDeclaration( name, - asTypeName, + actualAsTypeName, accessibility, DeclarationType.Function, context, @@ -417,9 +421,12 @@ public override void EnterPropertyGetStmt(VBAParser.PropertyGetStmtContext conte : asTypeClause.type().GetText() : SymbolList.TypeHintToTypeName[typeHint]; var isArray = asTypeClause != null && asTypeClause.type().LPAREN() != null; + var actualAsTypeName = isArray && asTypeName.EndsWith("()") + ? asTypeName.Substring(0, asTypeName.Length - 2) + : asTypeName; var declaration = CreateDeclaration( name, - asTypeName, + actualAsTypeName, accessibility, DeclarationType.PropertyGet, context, diff --git a/RubberduckTests/Grammar/ResolverTests.cs b/RubberduckTests/Grammar/ResolverTests.cs index b1b64c3294..40fecb2169 100644 --- a/RubberduckTests/Grammar/ResolverTests.cs +++ b/RubberduckTests/Grammar/ResolverTests.cs @@ -2730,6 +2730,52 @@ End Sub } } + [Category("Grammar")] + [Category("Resolver")] + [Test] + public void FunctionTypeNameIsElementTypeName() + { + var code = @" +Public Function bar() As Long() +End Function +"; + using (var state = Resolve(code)) + { + + var declaration = state.DeclarationFinder + .UserDeclarations(DeclarationType.Function) + .Single(); + + var expectedTypeName = "Long"; + var actualAsTypeName = declaration.AsTypeName; + + Assert.AreEqual(expectedTypeName, actualAsTypeName); + } + } + + [Category("Grammar")] + [Category("Resolver")] + [Test] + public void PropertyGetTypeNameIsElementTypeName() + { + var code = @" +Public Property Get bar() As Long() +End Property +"; + using (var state = Resolve(code)) + { + + var declaration = state.DeclarationFinder + .UserDeclarations(DeclarationType.PropertyGet) + .Single(); + + var expectedTypeName = "Long"; + var actualAsTypeName = declaration.AsTypeName; + + Assert.AreEqual(expectedTypeName, actualAsTypeName); + } + } + [Category("Grammar")] [Category("Resolver")] [Test]