Skip to content

Commit 62d191a

Browse files
authored
Merge pull request #82 from Lorilatschki/second-fix
fix: analyze string const by comparing with full name
2 parents 2c4d776 + 053e6dd commit 62d191a

6 files changed

Lines changed: 50 additions & 3 deletions

File tree

src/NetArchTest.Rules/Dependencies/DataStructures/CachedNamespaceTree.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,10 @@ public IEnumerable<string> GetAllMatchingNames(TypeReference type)
3232
}
3333
return node.value;
3434
}
35+
36+
public IEnumerable<string> GetAllMatchingNames(string fullName)
37+
{
38+
return _searchTree.GetAllMatchingNames(fullName).ToArray();
39+
}
3540
}
3641
}

src/NetArchTest.Rules/Dependencies/DataStructures/ISearchTree.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
internal interface ISearchTree
77
{
88
IEnumerable<string> GetAllMatchingNames(TypeReference type);
9+
IEnumerable<string> GetAllMatchingNames(string fullName);
910
int TerminatedNodesCount { get; }
1011
}
1112
}

src/NetArchTest.Rules/Dependencies/TypeDefinitionCheckingContext.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ private void CheckFields(TypeDefinition typeToCheck)
9696
{
9797
CheckCustomAttributes(field);
9898
CheckTypeReference(field.FieldType);
99+
if (field.HasConstant && field.FieldType.FullName == typeof(string).FullName)
100+
{
101+
_result.CheckDependency(field.Constant.ToString());
102+
}
99103
}
100104
}
101105
}
@@ -140,19 +144,19 @@ private void CheckMethods(TypeDefinition typeToCheck)
140144
foreach (var method in typeToCheck.Methods)
141145
{
142146
if (_result.CanWeSkipFurtherSearch()) return;
143-
this.CheckMethodHeader(method);
147+
CheckMethodHeader(method);
144148
}
145149

146150
foreach (var method in typeToCheck.Methods)
147151
{
148152
if (_result.CanWeSkipFurtherSearch()) return;
149-
this.CheckMethodBodyVariables(method);
153+
CheckMethodBodyVariables(method);
150154
}
151155

152156
foreach (var method in typeToCheck.Methods)
153157
{
154158
if (_result.CanWeSkipFurtherSearch()) return;
155-
this.CheckMethodBodyInstructions(method);
159+
CheckMethodBodyInstructions(method);
156160
}
157161
}
158162
}

src/NetArchTest.Rules/Dependencies/TypeDefinitionCheckingResult.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,22 @@ public bool CanWeSkipFurtherSearch()
7474
}
7575
}
7676

77+
public void CheckDependency(string dependencyTypeFullName)
78+
{
79+
var matchedDependencies = _searchTree.GetAllMatchingNames(dependencyTypeFullName);
80+
if (matchedDependencies.Any())
81+
{
82+
foreach (var match in matchedDependencies)
83+
{
84+
_foundDependencies.Add(match);
85+
}
86+
}
87+
else
88+
{
89+
_hasDependencyFromOutsideOfSearchTree = true;
90+
}
91+
}
92+
7793
public void CheckDependency(TypeReference dependency)
7894
{
7995
var matchedDependencies = _searchTree.GetAllMatchingNames(dependency);

test/NetArchTest.Rules.UnitTests/DependencySearch/DependencyTypeTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,18 @@ public void DependencySearch_VariableTuple_NotFound()
398398
Utils.RunDependencyTest(typeof(VariableTuple), typeof(Tuple<int, double>), false, true);
399399
}
400400

401+
[Fact(DisplayName = "Finds a dependency Array in ConstStringFieldValue.")]
402+
public void DependencySearch_ConstFieldString_Found()
403+
{
404+
Utils.RunDependencyTest(typeof(ConstStringFieldValue), typeof(Array), true, true);
405+
}
406+
407+
[Fact(DisplayName = "Does not find a dependency ArrayJagged in ConstStringFieldValue.")]
408+
public void DependencySearch_ConstFieldString_NotFound()
409+
{
410+
Utils.RunDependencyTest(typeof(ConstStringFieldValue), typeof(ArrayJagged), false, true);
411+
}
412+
401413
[Fact(DisplayName = "Finds a dependency StaticType in BaseCtorCall.")]
402414
public void DependencySearch_BaseCtorCall_Found()
403415
{
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace NetArchTest.TestStructure.Dependencies.Search.DependencyType
2+
{
3+
public class ConstStringFieldValue
4+
{
5+
#pragma warning disable 219
6+
private const string FullTypeName = "NetArchTest.TestStructure.Dependencies.Search.DependencyType.Array";
7+
#pragma warning restore 219
8+
}
9+
}

0 commit comments

Comments
 (0)