Skip to content

Commit 968a26c

Browse files
committed
Updated to not expose WrappedType
1 parent 82588c3 commit 968a26c

23 files changed

Lines changed: 174 additions & 138 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using System.Linq;
7+
using System.Reflection;
8+
using StyleCop.Analyzers.Lightup;
9+
using Xunit;
10+
11+
public class WrapperHelperTests
12+
{
13+
[Fact]
14+
public void VerifyThatAllWrapperClassesArePresent()
15+
{
16+
var wrapperTypes = typeof(ISyntaxWrapper<>).Assembly.GetTypes()
17+
.Where(t => t.GetTypeInfo().ImplementedInterfaces.Any(i => i.IsGenericType && (i.GetGenericTypeDefinition() == typeof(ISyntaxWrapper<>))));
18+
19+
foreach (var wrapperType in wrapperTypes)
20+
{
21+
var wrappedType = WrapperHelper.GetWrappedType(wrapperType);
22+
Assert.NotNull(wrapperType);
23+
}
24+
}
25+
}
26+
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/CasePatternSwitchLabelSyntaxWrapper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
98
using Microsoft.CodeAnalysis.CSharp;
109
using Microsoft.CodeAnalysis.CSharp.Syntax;
1110

1211
internal struct CasePatternSwitchLabelSyntaxWrapper : ISyntaxWrapper<SwitchLabelSyntax>
1312
{
14-
private const string CasePatternSwitchLabelSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.CasePatternSwitchLabelSyntax";
13+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.CasePatternSwitchLabelSyntax";
14+
private static readonly Type WrappedType;
1515

1616
private static readonly Func<SwitchLabelSyntax, CSharpSyntaxNode> PatternAccessor;
1717
private static readonly Func<SwitchLabelSyntax, CSharpSyntaxNode> WhenClauseAccessor;
@@ -24,7 +24,7 @@ internal struct CasePatternSwitchLabelSyntaxWrapper : ISyntaxWrapper<SwitchLabel
2424

2525
static CasePatternSwitchLabelSyntaxWrapper()
2626
{
27-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(CasePatternSwitchLabelSyntaxTypeName);
27+
WrappedType = WrapperHelper.GetWrappedType(typeof(CasePatternSwitchLabelSyntaxWrapper));
2828
PatternAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<SwitchLabelSyntax, CSharpSyntaxNode>(WrappedType, nameof(Pattern));
2929
WhenClauseAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<SwitchLabelSyntax, CSharpSyntaxNode>(WrappedType, nameof(WhenClause));
3030
WithKeywordAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<SwitchLabelSyntax, SyntaxToken>(WrappedType, nameof(SwitchLabelSyntax.Keyword));
@@ -38,8 +38,6 @@ private CasePatternSwitchLabelSyntaxWrapper(SwitchLabelSyntax node)
3838
this.node = node;
3939
}
4040

41-
public static Type WrappedType { get; private set; }
42-
4341
public SwitchLabelSyntax SyntaxNode => this.node;
4442

4543
public PatternSyntaxWrapper Pattern
@@ -67,7 +65,7 @@ public static explicit operator CasePatternSwitchLabelSyntaxWrapper(SyntaxNode n
6765

6866
if (!IsInstance(node))
6967
{
70-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{CasePatternSwitchLabelSyntaxTypeName}'");
68+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
7169
}
7270

7371
return new CasePatternSwitchLabelSyntaxWrapper((SwitchLabelSyntax)node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/CommonForEachStatementSyntaxWrapper.cs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,14 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
9-
using Microsoft.CodeAnalysis.CSharp;
108
using Microsoft.CodeAnalysis.CSharp.Syntax;
119

1210
internal struct CommonForEachStatementSyntaxWrapper : ISyntaxWrapper<StatementSyntax>
1311
{
14-
private const string CommonForEachStatementSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.CommonForEachStatementSyntax";
15-
16-
/// <summary>
17-
/// Prior to C# 7, <see cref="ForEachStatementSyntax"/> was the base type for all <c>foreach</c> statements. If
18-
/// the <c>CommonForEachStatementSyntax</c> type isn't found at runtime, we fall back to using this type
19-
/// instead.
20-
/// </summary>
21-
private const string ForEachStatementSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.CommonForEachStatementSyntax";
12+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.CommonForEachStatementSyntax";
13+
internal const string FallbackWrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.ForEachStatementSyntax";
14+
private static readonly Type WrappedType;
2215

2316
private static readonly Func<StatementSyntax, SyntaxToken> ForEachKeywordAccessor;
2417
private static readonly Func<StatementSyntax, SyntaxToken> OpenParenTokenAccessor;
@@ -31,8 +24,7 @@ internal struct CommonForEachStatementSyntaxWrapper : ISyntaxWrapper<StatementSy
3124

3225
static CommonForEachStatementSyntaxWrapper()
3326
{
34-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(CommonForEachStatementSyntaxTypeName)
35-
?? typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(ForEachStatementSyntaxTypeName);
27+
WrappedType = WrapperHelper.GetWrappedType(typeof(CommonForEachStatementSyntaxWrapper));
3628
ForEachKeywordAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<StatementSyntax, SyntaxToken>(WrappedType, nameof(ForEachKeyword));
3729
OpenParenTokenAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<StatementSyntax, SyntaxToken>(WrappedType, nameof(OpenParenToken));
3830
InKeywordAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<StatementSyntax, SyntaxToken>(WrappedType, nameof(InKeyword));
@@ -46,8 +38,6 @@ private CommonForEachStatementSyntaxWrapper(StatementSyntax node)
4638
this.node = node;
4739
}
4840

49-
public static Type WrappedType { get; private set; }
50-
5141
public StatementSyntax SyntaxNode => this.node;
5242

5343
public SyntaxToken ForEachKeyword
@@ -112,7 +102,7 @@ public static explicit operator CommonForEachStatementSyntaxWrapper(SyntaxNode n
112102

113103
if (!IsInstance(node))
114104
{
115-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{CommonForEachStatementSyntaxTypeName}'");
105+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
116106
}
117107

118108
return new CommonForEachStatementSyntaxWrapper((StatementSyntax)node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/ConstantPatternSyntaxWrapper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
98
using Microsoft.CodeAnalysis.CSharp;
109
using Microsoft.CodeAnalysis.CSharp.Syntax;
1110

1211
internal struct ConstantPatternSyntaxWrapper : ISyntaxWrapper<CSharpSyntaxNode>
1312
{
14-
private const string ConstantPatternSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.ConstantPatternSyntax";
13+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.ConstantPatternSyntax";
14+
private static readonly Type WrappedType;
1515

1616
private static readonly Func<CSharpSyntaxNode, ExpressionSyntax> ExpressionAccessor;
1717
private static readonly Func<CSharpSyntaxNode, ExpressionSyntax, CSharpSyntaxNode> WithExpressionAccessor;
@@ -20,7 +20,7 @@ internal struct ConstantPatternSyntaxWrapper : ISyntaxWrapper<CSharpSyntaxNode>
2020

2121
static ConstantPatternSyntaxWrapper()
2222
{
23-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(ConstantPatternSyntaxTypeName);
23+
WrappedType = WrapperHelper.GetWrappedType(typeof(ConstantPatternSyntaxWrapper));
2424
ExpressionAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<CSharpSyntaxNode, ExpressionSyntax>(WrappedType, nameof(Expression));
2525
WithExpressionAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<CSharpSyntaxNode, ExpressionSyntax>(WrappedType, nameof(Expression));
2626
}
@@ -30,8 +30,6 @@ private ConstantPatternSyntaxWrapper(CSharpSyntaxNode node)
3030
this.node = node;
3131
}
3232

33-
public static Type WrappedType { get; private set; }
34-
3533
public CSharpSyntaxNode SyntaxNode => this.node;
3634

3735
public ExpressionSyntax Expression
@@ -56,7 +54,7 @@ public static explicit operator ConstantPatternSyntaxWrapper(SyntaxNode node)
5654

5755
if (!IsInstance(node))
5856
{
59-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{ConstantPatternSyntaxTypeName}'");
57+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
6058
}
6159

6260
return new ConstantPatternSyntaxWrapper((CSharpSyntaxNode)node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/DeclarationExpressionSyntaxWrapper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
98
using Microsoft.CodeAnalysis.CSharp;
109
using Microsoft.CodeAnalysis.CSharp.Syntax;
1110

1211
internal struct DeclarationExpressionSyntaxWrapper : ISyntaxWrapper<ExpressionSyntax>
1312
{
14-
private const string DeclarationExpressionSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.DeclarationExpressionSyntax";
13+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.DeclarationExpressionSyntax";
14+
private static readonly Type WrappedType;
1515

1616
private static readonly Func<ExpressionSyntax, TypeSyntax> TypeAccessor;
1717
private static readonly Func<ExpressionSyntax, CSharpSyntaxNode> DesignationAccessor;
@@ -22,7 +22,7 @@ internal struct DeclarationExpressionSyntaxWrapper : ISyntaxWrapper<ExpressionSy
2222

2323
static DeclarationExpressionSyntaxWrapper()
2424
{
25-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(DeclarationExpressionSyntaxTypeName);
25+
WrappedType = WrapperHelper.GetWrappedType(typeof(DeclarationExpressionSyntaxWrapper));
2626
TypeAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<ExpressionSyntax, TypeSyntax>(WrappedType, nameof(Type));
2727
DesignationAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<ExpressionSyntax, CSharpSyntaxNode>(WrappedType, nameof(Designation));
2828
WithTypeAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<ExpressionSyntax, TypeSyntax>(WrappedType, nameof(Type));
@@ -34,8 +34,6 @@ private DeclarationExpressionSyntaxWrapper(ExpressionSyntax node)
3434
this.node = node;
3535
}
3636

37-
public static Type WrappedType { get; private set; }
38-
3937
public ExpressionSyntax SyntaxNode => this.node;
4038

4139
public TypeSyntax Type
@@ -63,7 +61,7 @@ public static explicit operator DeclarationExpressionSyntaxWrapper(SyntaxNode no
6361

6462
if (!IsInstance(node))
6563
{
66-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{DeclarationExpressionSyntaxTypeName}'");
64+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
6765
}
6866

6967
return new DeclarationExpressionSyntaxWrapper((ExpressionSyntax)node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/DeclarationPatternSyntaxWrapper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
98
using Microsoft.CodeAnalysis.CSharp;
109
using Microsoft.CodeAnalysis.CSharp.Syntax;
1110

1211
internal struct DeclarationPatternSyntaxWrapper : ISyntaxWrapper<CSharpSyntaxNode>
1312
{
14-
private const string DeclarationPatternSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.DeclarationPatternSyntax";
13+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.DeclarationPatternSyntax";
14+
private static readonly Type WrappedType;
1515

1616
private static readonly Func<CSharpSyntaxNode, TypeSyntax> TypeAccessor;
1717
private static readonly Func<CSharpSyntaxNode, CSharpSyntaxNode> DesignationAccessor;
@@ -22,7 +22,7 @@ internal struct DeclarationPatternSyntaxWrapper : ISyntaxWrapper<CSharpSyntaxNod
2222

2323
static DeclarationPatternSyntaxWrapper()
2424
{
25-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(DeclarationPatternSyntaxTypeName);
25+
WrappedType = WrapperHelper.GetWrappedType(typeof(DeclarationPatternSyntaxWrapper));
2626
TypeAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<CSharpSyntaxNode, TypeSyntax>(WrappedType, nameof(Type));
2727
DesignationAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<CSharpSyntaxNode, CSharpSyntaxNode>(WrappedType, nameof(Designation));
2828
WithTypeAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<CSharpSyntaxNode, TypeSyntax>(WrappedType, nameof(Type));
@@ -34,8 +34,6 @@ private DeclarationPatternSyntaxWrapper(CSharpSyntaxNode node)
3434
this.node = node;
3535
}
3636

37-
public static Type WrappedType { get; private set; }
38-
3937
public CSharpSyntaxNode SyntaxNode => this.node;
4038

4139
public TypeSyntax Type
@@ -68,7 +66,7 @@ public static explicit operator DeclarationPatternSyntaxWrapper(SyntaxNode node)
6866

6967
if (!IsInstance(node))
7068
{
71-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{DeclarationPatternSyntaxTypeName}'");
69+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
7270
}
7371

7472
return new DeclarationPatternSyntaxWrapper((CSharpSyntaxNode)node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/DiscardDesignationSyntaxWrapper.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
98
using Microsoft.CodeAnalysis.CSharp;
109

1110
internal struct DiscardDesignationSyntaxWrapper : ISyntaxWrapper<CSharpSyntaxNode>
1211
{
13-
private const string DiscardDesignationSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.DiscardDesignationSyntax";
12+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.DiscardDesignationSyntax";
13+
private static readonly Type WrappedType;
1414

1515
private static readonly Func<CSharpSyntaxNode, SyntaxToken> UnderscoreTokenAccessor;
1616
private static readonly Func<CSharpSyntaxNode, SyntaxToken, CSharpSyntaxNode> WithUnderscoreTokenAccessor;
@@ -19,7 +19,7 @@ internal struct DiscardDesignationSyntaxWrapper : ISyntaxWrapper<CSharpSyntaxNod
1919

2020
static DiscardDesignationSyntaxWrapper()
2121
{
22-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(DiscardDesignationSyntaxTypeName);
22+
WrappedType = WrapperHelper.GetWrappedType(typeof(DiscardDesignationSyntaxWrapper));
2323
UnderscoreTokenAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<CSharpSyntaxNode, SyntaxToken>(WrappedType, nameof(UnderscoreToken));
2424
WithUnderscoreTokenAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<CSharpSyntaxNode, SyntaxToken>(WrappedType, nameof(UnderscoreToken));
2525
}
@@ -29,8 +29,6 @@ private DiscardDesignationSyntaxWrapper(CSharpSyntaxNode node)
2929
this.node = node;
3030
}
3131

32-
public static Type WrappedType { get; private set; }
33-
3432
public CSharpSyntaxNode SyntaxNode => this.node;
3533

3634
public SyntaxToken UnderscoreToken
@@ -55,7 +53,7 @@ public static explicit operator DiscardDesignationSyntaxWrapper(SyntaxNode node)
5553

5654
if (!IsInstance(node))
5755
{
58-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{DiscardDesignationSyntaxTypeName}'");
56+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
5957
}
6058

6159
return new DiscardDesignationSyntaxWrapper((CSharpSyntaxNode)node);

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/ForEachVariableStatementSyntaxWrapper.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
namespace StyleCop.Analyzers.Lightup
55
{
66
using System;
7-
using System.Reflection;
87
using Microsoft.CodeAnalysis;
9-
using Microsoft.CodeAnalysis.CSharp;
108
using Microsoft.CodeAnalysis.CSharp.Syntax;
119

1210
internal struct ForEachVariableStatementSyntaxWrapper : ISyntaxWrapper<StatementSyntax>
1311
{
14-
private const string ForEachVariableStatementSyntaxTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.ForEachVariableStatementSyntax";
12+
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.CSharp.Syntax.ForEachVariableStatementSyntax";
13+
private static readonly Type WrappedType;
1514

1615
private static readonly Func<StatementSyntax, ExpressionSyntax> VariableAccessor;
1716
private static readonly Func<StatementSyntax, SyntaxToken, StatementSyntax> WithForEachKeywordAccessor;
@@ -26,7 +25,7 @@ internal struct ForEachVariableStatementSyntaxWrapper : ISyntaxWrapper<Statement
2625

2726
static ForEachVariableStatementSyntaxWrapper()
2827
{
29-
WrappedType = typeof(CSharpSyntaxNode).GetTypeInfo().Assembly.GetType(ForEachVariableStatementSyntaxTypeName);
28+
WrappedType = WrapperHelper.GetWrappedType(typeof(ForEachVariableStatementSyntaxWrapper));
3029
VariableAccessor = LightupHelpers.CreateSyntaxPropertyAccessor<StatementSyntax, ExpressionSyntax>(WrappedType, nameof(Variable));
3130
WithForEachKeywordAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<StatementSyntax, SyntaxToken>(WrappedType, nameof(ForEachKeyword));
3231
WithOpenParenTokenAccessor = LightupHelpers.CreateSyntaxWithPropertyAccessor<StatementSyntax, SyntaxToken>(WrappedType, nameof(OpenParenToken));
@@ -42,8 +41,6 @@ private ForEachVariableStatementSyntaxWrapper(StatementSyntax node)
4241
this.node = node;
4342
}
4443

45-
public static Type WrappedType { get; private set; }
46-
4744
public StatementSyntax SyntaxNode => this.node;
4845

4946
public SyntaxToken ForEachKeyword
@@ -116,7 +113,7 @@ public static explicit operator ForEachVariableStatementSyntaxWrapper(SyntaxNode
116113

117114
if (!IsInstance(node))
118115
{
119-
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{ForEachVariableStatementSyntaxTypeName}'");
116+
throw new InvalidCastException($"Cannot cast '{node.GetType().FullName}' to '{WrappedTypeName}'");
120117
}
121118

122119
return new ForEachVariableStatementSyntaxWrapper((StatementSyntax)node);

0 commit comments

Comments
 (0)