Skip to content

Commit b55f56f

Browse files
maca88hazzik
authored andcommitted
work in progress
1 parent 919e7f1 commit b55f56f

File tree

3,247 files changed

+3671
-82949
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

3,247 files changed

+3671
-82949
lines changed

src/NHibernate.AsyncGenerator/DocumentInfo.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace NHibernate.AsyncGenerator
1212
{
13-
public class DocumentInfo
13+
public class DocumentInfo : Dictionary<string, NamespaceInfo>
1414
{
1515
public DocumentInfo(ProjectInfo projectInfo, Document document)
1616
{
@@ -32,14 +32,13 @@ public DocumentInfo(ProjectInfo projectInfo, Document document)
3232

3333
public SemanticModel SemanticModel { get; set; }
3434

35-
public Dictionary<INamespaceSymbol, NamespaceInfo> NamespaceInfos { get; } = new Dictionary<INamespaceSymbol, NamespaceInfo>();
36-
3735
public NamespaceInfo GetNamespaceInfo(ISymbol symbol, bool create = false)
3836
{
3937
var namespaceSymbol = symbol.ContainingNamespace;
40-
if (NamespaceInfos.ContainsKey(namespaceSymbol))
38+
var namespaceName = namespaceSymbol.Name;
39+
if (ContainsKey(namespaceName))
4140
{
42-
return NamespaceInfos[namespaceSymbol];
41+
return this[namespaceName];
4342
}
4443
if (!create)
4544
{
@@ -64,7 +63,7 @@ public NamespaceInfo GetNamespaceInfo(ISymbol symbol, bool create = false)
6463
node = RootNode.DescendantNodes().OfType<NamespaceDeclarationSyntax>().Single(o => o.FullSpan.End == location.SourceSpan.End);
6564
}
6665
var docNamespace = new NamespaceInfo(this, namespaceSymbol, node);
67-
NamespaceInfos.Add(namespaceSymbol, docNamespace);
66+
Add(namespaceName, docNamespace);
6867
return docNamespace;
6968
}
7069

@@ -73,6 +72,11 @@ public MethodInfo GetOrCreateMethodInfo(IMethodSymbol symbol)
7372
return GetNamespaceInfo(symbol, true).GetTypeInfo(symbol, true).GetMethodInfo(symbol, true);
7473
}
7574

75+
public MethodInfo GetMethodInfo(IMethodSymbol symbol)
76+
{
77+
return GetNamespaceInfo(symbol).GetTypeInfo(symbol).GetMethodInfo(symbol);
78+
}
79+
7680
public TypeInfo GetTypeInfo(INamedTypeSymbol symbol)
7781
{
7882
return GetNamespaceInfo(symbol).GetTypeInfo(symbol);

src/NHibernate.AsyncGenerator/DocumentWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,11 @@ public void Write()
265265
var namespaceNodes = new List<MemberDeclarationSyntax>();
266266
var customTask = Configuration.Async.CustomTaskType;
267267
var tasksUsed = false;
268-
foreach (var namespaceInfo in DocumentInfo.NamespaceInfos.Values.OrderBy(o => o.Node.SpanStart))
268+
foreach (var namespaceInfo in DocumentInfo.Values.OrderBy(o => o.Node.SpanStart))
269269
{
270270
var namespaceNode = namespaceInfo.Node;
271271
var typeNodes = new List<MemberDeclarationSyntax>();
272-
foreach (var typeInfo in namespaceInfo.TypeInfos.Values.OrderBy(o => o.Node.SpanStart))
272+
foreach (var typeInfo in namespaceInfo.Values.OrderBy(o => o.Node.SpanStart))
273273
{
274274
var typeNode = typeInfo.Node;
275275
var asyncLock = false;

src/NHibernate.AsyncGenerator/Extensions/SymbolExtensions.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,23 @@ public static bool IsNullable(this ITypeSymbol symbol)
355355
return symbol?.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T;
356356
}
357357

358+
public static bool HaveSameParameters(this IMethodSymbol m1, IMethodSymbol m2)
359+
{
360+
if (m1.Parameters.Length != m2.Parameters.Length)
361+
{
362+
return false;
363+
}
364+
365+
for (var i = 0; i < m1.Parameters.Length; i++)
366+
{
367+
if (!m1.Parameters[i].Type.Equals(m2.Parameters[i].Type))
368+
{
369+
return false;
370+
}
371+
}
372+
return true;
373+
}
374+
358375
public static ExpressionSyntax GenerateExpressionSyntax(
359376
this ITypeSymbol typeSymbol)
360377
{

src/NHibernate.AsyncGenerator/MethodInfo.cs

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -142,25 +142,6 @@ public MethodReferenceResult AnalyzeReference(ReferenceLocation reference)
142142
return result;
143143
}
144144

145-
private static bool HaveSameParameters(IMethodSymbol m1, IMethodSymbol m2)
146-
{
147-
if (m1.Parameters.Length != m2.Parameters.Length)
148-
{
149-
return false;
150-
}
151-
152-
for (var i = 0; i < m1.Parameters.Length; i++)
153-
{
154-
if (!m1.Parameters[i].Type.Equals(m2.Parameters[i].Type))
155-
{
156-
return false;
157-
}
158-
}
159-
return true;
160-
}
161-
162-
163-
164145
public List<AsyncCounterpartMethod> FindAsyncCounterpartMethodsWhitinBody()
165146
{
166147
var result = new List<AsyncCounterpartMethod>();
@@ -181,7 +162,7 @@ public List<AsyncCounterpartMethod> FindAsyncCounterpartMethodsWhitinBody()
181162
var type = methodInfo.ContainingType;
182163
var asyncMethodInfo = type.GetMembers(methodInfo.Name + "Async")
183164
.OfType<IMethodSymbol>()
184-
.FirstOrDefault(o => HaveSameParameters(o, methodInfo));
165+
.FirstOrDefault(o => o.HaveSameParameters(methodInfo));
185166
if (asyncMethodInfo == null)
186167
{
187168
continue;
@@ -234,13 +215,15 @@ public MethodAnalyzeResult Analyze()
234215
result.CanBeAsnyc = true;
235216
}
236217

218+
var solutionConfig = TypeInfo.NamespaceInfo.DocumentInfo.ProjectInfo.SolutionInfo.Configuration;
237219
if (Node.AttributeLists
238220
.SelectMany(o => o.Attributes.Where(a => a.Name.ToString() == "MethodImpl"))
239221
.Any(o => o.ArgumentList.Arguments.Any(a => a.Expression.ToString() == "MethodImplOptions.Synchronized")))
240222
{
241223
result.MustRunSynchronized = true;
242224
}
243-
else if (counter.InvocationExpressions.Count == 1 && Symbol.GetAttributes().All(o => o.AttributeClass.Name != "TestAttribute"))
225+
else if (counter.InvocationExpressions.Count == 1 && Symbol.GetAttributes()
226+
.All(o => !solutionConfig.TestAttributeNames.Contains(o.AttributeClass.Name)))
244227
{
245228
var invocation = counter.InvocationExpressions[0];
246229
if (Symbol.ReturnsVoid)

src/NHibernate.AsyncGenerator/NamespaceInfo.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace NHibernate.AsyncGenerator
1111
{
12-
public class NamespaceInfo
12+
public class NamespaceInfo : Dictionary<TypeDeclarationSyntax, TypeInfo>
1313
{
1414
public NamespaceInfo(DocumentInfo documentInfo, INamespaceSymbol symbol, NamespaceDeclarationSyntax node)
1515
{
@@ -24,7 +24,7 @@ public NamespaceInfo(DocumentInfo documentInfo, INamespaceSymbol symbol, Namespa
2424

2525
public NamespaceDeclarationSyntax Node { get; }
2626

27-
public Dictionary<INamedTypeSymbol, TypeInfo> TypeInfos { get; } = new Dictionary<INamedTypeSymbol, TypeInfo>();
27+
//public Dictionary<TypeDeclarationSyntax, TypeInfo> TypeInfos { get; } = new Dictionary<TypeDeclarationSyntax, TypeInfo>();
2828

2929
public TypeInfo GetTypeInfo(IMethodSymbol symbol, bool create = false)
3030
{
@@ -44,23 +44,27 @@ public TypeInfo GetTypeInfo(INamedTypeSymbol type, bool create = false)
4444
while (nestedTypes.Count > 0)
4545
{
4646
var typeSymbol = nestedTypes.Pop().OriginalDefinition;
47+
var location = typeSymbol.Locations.Single(o => o.SourceTree.FilePath == path);
48+
var node = Node.DescendantNodes()
49+
.OfType<TypeDeclarationSyntax>()
50+
.First(o => o.ChildTokens().First(t => t.IsKind(SyntaxKind.IdentifierToken)).Span == location.SourceSpan);
4751

48-
if ((currentDocType?.TypeInfos ?? TypeInfos).ContainsKey(typeSymbol))
52+
if ((currentDocType?.TypeInfos ?? this).ContainsKey(node))
4953
{
50-
currentDocType = (currentDocType?.TypeInfos ?? TypeInfos)[typeSymbol];
54+
currentDocType = (currentDocType?.TypeInfos ?? this)[node];
5155
continue;
5256
}
5357
if (!create)
5458
{
5559
return null;
5660
}
5761

58-
var location = typeSymbol.Locations.Single(o => o.SourceTree.FilePath == path);
59-
var node = Node.DescendantNodes()
60-
.OfType<TypeDeclarationSyntax>()
61-
.Single(o => o.ChildTokens().Single(t => t.IsKind(SyntaxKind.IdentifierToken)).Span == location.SourceSpan);
6262
var docType = new TypeInfo(this, typeSymbol, node);
63-
(currentDocType?.TypeInfos ?? TypeInfos).Add(typeSymbol, docType);
63+
(currentDocType?.TypeInfos ?? this).Add(node, docType);
64+
if ((currentDocType?.TypeInfos ?? this).Keys.GroupBy(o => o.Identifier.ValueText).Any(o => o.Count() > 1))
65+
{
66+
67+
}
6468
currentDocType = docType;
6569
}
6670
return currentDocType;

0 commit comments

Comments
 (0)