Skip to content

Commit 0f33332

Browse files
committed
Add AliasDeclaration and DeclarationType.ComAlias, adjust binding.
1 parent d446b83 commit 0f33332

File tree

8 files changed

+50
-2
lines changed

8 files changed

+50
-2
lines changed

Rubberduck.Parsing/Binding/SimpleNameTypeBinding.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,11 @@ procedural module or class module within a referenced project.
205205
{
206206
return new SimpleNameExpression(referencedProjectEnumType, ExpressionClassification.Type, _expression);
207207
}
208+
var referencedProjectAliasType = _declarationFinder.FindMemberReferencedProject(_project, _module, _parent, name, DeclarationType.ComAlias);
209+
if (referencedProjectAliasType != null)
210+
{
211+
return new SimpleNameExpression(referencedProjectAliasType, ExpressionClassification.Type, _expression);
212+
}
208213
return null;
209214
}
210215
}

Rubberduck.Parsing/ComReflection/ComVariant.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class ComVariant
1313
{VarEnum.VT_DISPATCH, Tokens.Object},
1414
{VarEnum.VT_VOID, string.Empty},
1515
{VarEnum.VT_VARIANT, Tokens.Variant},
16+
{VarEnum.VT_UNKNOWN, Tokens.Object},
1617
{VarEnum.VT_BLOB_OBJECT, Tokens.Object},
1718
{VarEnum.VT_STORED_OBJECT, Tokens.Object},
1819
{VarEnum.VT_STREAMED_OBJECT, Tokens.Object},
@@ -35,7 +36,7 @@ public class ComVariant
3536
{VarEnum.VT_DECIMAL, Tokens.Decimal},
3637
{VarEnum.VT_EMPTY, Tokens.Empty},
3738
{VarEnum.VT_R4, Tokens.Single},
38-
{VarEnum.VT_R8, Tokens.Double},
39+
{VarEnum.VT_R8, Tokens.Double}
3940
};
4041

4142

Rubberduck.Parsing/ComReflection/ReferencedDeclarationsCollector.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ public List<Declaration> LoadDeclarationsFromLibrary()
132132
_serialized = new SerializableProject(project);
133133
_declarations.Add(project);
134134

135+
foreach (var alias in type.Aliases.Select(item => new AliasDeclaration(item, project, projectName)))
136+
{
137+
_declarations.Add(alias);
138+
_serialized.AddDeclaration(new SerializableDeclarationTree(alias));
139+
}
140+
135141
foreach (var module in type.Members)
136142
{
137143
var moduleName = new QualifiedModuleName(_referenceName, _path,

Rubberduck.Parsing/Rubberduck.Parsing.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@
147147
<Compile Include="ComReflection\ComModule.cs" />
148148
<Compile Include="ComReflection\ComProject.cs" />
149149
<Compile Include="SymbolList.cs" />
150+
<Compile Include="Symbols\AliasDeclaration.cs" />
150151
<Compile Include="Symbols\DeclarationLoaders\SpecialFormDeclarations.cs" />
151152
<Compile Include="Symbols\CommentNode.cs" />
152153
<Compile Include="ComReflection\ComParameter.cs" />

Rubberduck.Parsing/Symbols/AccessibilityCheck.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,15 @@ public static bool IsMemberAccessible(Declaration callingProject, Declaration ca
4545
{
4646
return true;
4747
}
48+
if (calleeMember.IsBuiltIn && calleeMember.Accessibility > Accessibility.Friend)
49+
{
50+
return true;
51+
}
4852
var memberModule = Declaration.GetModuleParent(calleeMember);
4953
return IsModuleAccessible(callingProject, callingModule, memberModule)
5054
&& (calleeMember.DeclarationType.HasFlag(DeclarationType.EnumerationMember)
5155
|| calleeMember.DeclarationType.HasFlag(DeclarationType.UserDefinedTypeMember)
56+
|| calleeMember.DeclarationType.HasFlag(DeclarationType.ComAlias)
5257
|| HasPublicScope(calleeMember)
5358
|| (IsEnclosingProject(callingProject, memberModule) && IsAccessibleThroughoutTheSameProject(calleeMember)));
5459
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using Rubberduck.Parsing.ComReflection;
2+
using Rubberduck.VBEditor;
3+
4+
namespace Rubberduck.Parsing.Symbols
5+
{
6+
public class AliasDeclaration : Declaration
7+
{
8+
public AliasDeclaration(ComAlias alias, Declaration parent, QualifiedModuleName module)
9+
: base(
10+
module.QualifyMemberName(alias.Name),
11+
parent,
12+
parent,
13+
alias.TypeName,
14+
null,
15+
false,
16+
false,
17+
Accessibility.Public,
18+
DeclarationType.ComAlias,
19+
null,
20+
Selection.Home,
21+
false,
22+
null,
23+
true)
24+
{ }
25+
}
26+
}

Rubberduck.Parsing/Symbols/DeclarationType.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public enum DeclarationType
6363
UnresolvedMember = 1 << 26,
6464
[DebuggerDisplay("BracketedExpression")]
6565
BracketedExpression = 1 << 27,
66+
[DebuggerDisplay("ComAlias")]
67+
ComAlias = 1 << 28
6668
}
6769

6870
public interface IIdentifier { IdentifierNode Identifier { get; } }

Rubberduck.Parsing/Symbols/TypeAnnotationPass.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ public void Execute()
4141

4242
private void AnnotateType(Declaration declaration)
4343
{
44-
if (declaration.DeclarationType == DeclarationType.ClassModule || declaration.DeclarationType == DeclarationType.UserDefinedType)
44+
if (declaration.DeclarationType == DeclarationType.ClassModule ||
45+
declaration.DeclarationType == DeclarationType.UserDefinedType ||
46+
declaration.DeclarationType == DeclarationType.ComAlias)
4547
{
4648
declaration.AsTypeDeclaration = declaration;
4749
return;

0 commit comments

Comments
 (0)