Skip to content
This repository was archived by the owner on Sep 24, 2020. It is now read-only.

Commit 7df1359

Browse files
committed
Consistently use 'null' DeclaringType for top-level entities.
1 parent f1c548a commit 7df1359

22 files changed

Lines changed: 39 additions & 32 deletions

ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ protected override CodeAction GetAction (RefactoringContext context, MethodDecla
4444
return null;
4545

4646
var method = (IMethod)((MemberResolveResult)context.Resolve (node)).Member;
47-
var type = method.DeclaringType;
47+
var type = method.DeclaringType ?? SpecialType.UnknownType;
4848

4949
// find existing method with the same signature
5050
if (type.GetMethods (m => m.Name == node.Name && m.TypeParameters.Count == method.TypeParameters.Count

ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,8 @@ bool TryGetMemberColor(IMember member, out TColor color)
535535
return true;
536536
case SymbolKind.Constructor:
537537
case SymbolKind.Destructor:
538-
return TryGetTypeHighlighting (member.DeclaringType.Kind, out color);
538+
var declaringType = member.DeclaringType;
539+
return TryGetTypeHighlighting (declaringType != null ? declaringType.Kind : TypeKind.Unknown, out color);
539540
default:
540541
color = default (TColor);
541542
return false;

ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ IEnumerable<ICompletionData> HandleToStringFormatItems()
613613
if (invokeResult == null)
614614
return Enumerable.Empty<ICompletionData>();
615615
if (invokeResult.Member.Name == "ToString")
616-
return GetFormatCompletionData(invokeResult.Member.DeclaringType) ?? Enumerable.Empty<ICompletionData>();
616+
return GetFormatCompletionData(invokeResult.Member.DeclaringType ?? SpecialType.UnknownType) ?? Enumerable.Empty<ICompletionData>();
617617
return Enumerable.Empty<ICompletionData>();
618618
}
619619

ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ void WriteMemberDeclarationName(IMember member, TokenWriter writer, CSharpFormat
203203
{
204204
TypeSystemAstBuilder astBuilder = CreateAstBuilder();
205205
EntityDeclaration node = astBuilder.ConvertEntity(member);
206-
if ((ConversionFlags & ConversionFlags.ShowDeclaringType) == ConversionFlags.ShowDeclaringType) {
206+
if ((ConversionFlags & ConversionFlags.ShowDeclaringType) == ConversionFlags.ShowDeclaringType && member.DeclaringType != null) {
207207
ConvertType(member.DeclaringType, writer, formattingPolicy);
208208
writer.WriteToken(Roles.Dot, ".");
209209
}

ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ CodeObject IAstVisitor<CodeObject>.VisitInvocationExpression(InvocationExpressio
448448
if (id != null) {
449449
CodeExpression target;
450450
if (rr != null && rr.Member.IsStatic)
451-
target = new CodeTypeReferenceExpression(Convert(rr.Member.DeclaringType));
451+
target = new CodeTypeReferenceExpression(Convert(rr.Member.DeclaringType ?? SpecialType.UnknownType));
452452
else
453453
target = new CodeThisReferenceExpression();
454454

@@ -493,7 +493,7 @@ CodeExpression HandleMemberReference(CodeExpression target, string identifier, A
493493
{
494494
if (target == null) {
495495
if (mrr.Member.IsStatic)
496-
target = new CodeTypeReferenceExpression(Convert(mrr.Member.DeclaringType));
496+
target = new CodeTypeReferenceExpression(Convert(mrr.Member.DeclaringType ?? SpecialType.UnknownType));
497497
else
498498
target = new CodeThisReferenceExpression();
499499
}

ICSharpCode.NRefactory.CSharp/Refactoring/CodeGenerationService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public override EntityDeclaration GenerateMemberImplementation(RefactoringContex
4848
var decl = builder.ConvertEntity(member);
4949
if (explicitImplementation) {
5050
decl.Modifiers = Modifiers.None;
51-
decl.AddChild(builder.ConvertType(member.DeclaringType), EntityDeclaration.PrivateImplementationTypeRole);
52-
} else if (member.DeclaringType.Kind == TypeKind.Interface) {
51+
decl.AddChild(builder.ConvertType(member.DeclaringType ?? SpecialType.UnknownType), EntityDeclaration.PrivateImplementationTypeRole);
52+
} else if (member.DeclaringType != null && member.DeclaringType.Kind == TypeKind.Interface) {
5353
decl.Modifiers |= Modifiers.Public;
5454
} else {
5555
// Remove 'internal' modifier from 'protected internal' members if the override is in a different assembly than the member

ICSharpCode.NRefactory.CSharp/Refactoring/FormatStringHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public static bool TryGetFormattingParameters(CSharpInvocationResolveResult invo
4646
arguments = new List<Expression>();
4747

4848
// Serach for method of type: void Name(string format, params object[] args);
49-
if (invocationResolveResult.Member.SymbolKind == SymbolKind.Method) {
49+
if (invocationResolveResult.Member.SymbolKind == SymbolKind.Method && invocationResolveResult.Member.DeclaringType != null) {
5050
var methods = invocationResolveResult.Member.DeclaringType.GetMethods(m => m.Name == invocationResolveResult.Member.Name).ToList();
5151
if (!methods.Any(m => m.Parameters.Count == 2 &&
5252
m.Parameters[0].Type.IsKnownType(KnownTypeCode.String) && parameterNames.Contains(m.Parameters[0].Name) &&

ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,7 @@ PropertyDeclaration ConvertProperty(IProperty property)
829829
decl.Name = property.Name;
830830
decl.Getter = ConvertAccessor(property.Getter, property.Accessibility, false);
831831
decl.Setter = ConvertAccessor(property.Setter, property.Accessibility, true);
832-
decl.PrivateImplementationType = GetExcplicitInterfaceType (property);
832+
decl.PrivateImplementationType = GetExplicitInterfaceType (property);
833833
return decl;
834834
}
835835

@@ -846,7 +846,7 @@ IndexerDeclaration ConvertIndexer(IProperty indexer)
846846
}
847847
decl.Getter = ConvertAccessor(indexer.Getter, indexer.Accessibility, false);
848848
decl.Setter = ConvertAccessor(indexer.Setter, indexer.Accessibility, true);
849-
decl.PrivateImplementationType = GetExcplicitInterfaceType (indexer);
849+
decl.PrivateImplementationType = GetExplicitInterfaceType (indexer);
850850
return decl;
851851
}
852852

@@ -910,7 +910,7 @@ MethodDeclaration ConvertMethod(IMethod method)
910910
}
911911
}
912912
decl.Body = GenerateBodyBlock();
913-
decl.PrivateImplementationType = GetExcplicitInterfaceType (method);
913+
decl.PrivateImplementationType = GetExplicitInterfaceType (method);
914914
return decl;
915915
}
916916

@@ -978,7 +978,8 @@ public static Modifiers ModifierFromAccessibility(Accessibility accessibility)
978978

979979
bool NeedsAccessibility(IMember member)
980980
{
981-
if (member.DeclaringType.Kind == TypeKind.Interface || member.IsExplicitInterfaceImplementation)
981+
var declaringType = member.DeclaringType;
982+
if ((declaringType != null && declaringType.Kind == TypeKind.Interface) || member.IsExplicitInterfaceImplementation)
982983
return false;
983984
switch (member.SymbolKind) {
984985
case SymbolKind.Constructor:
@@ -1000,7 +1001,8 @@ Modifiers GetMemberModifiers(IMember member)
10001001
if (member.IsStatic) {
10011002
m |= Modifiers.Static;
10021003
} else {
1003-
if (member.IsAbstract && member.DeclaringType.Kind != TypeKind.Interface)
1004+
var declaringType = member.DeclaringType;
1005+
if (member.IsAbstract && declaringType != null && declaringType.Kind != TypeKind.Interface)
10041006
m |= Modifiers.Abstract;
10051007
if (member.IsOverride)
10061008
m |= Modifiers.Override;
@@ -1075,7 +1077,7 @@ NamespaceDeclaration ConvertNamespaceDeclaration(INamespace ns)
10751077
return new NamespaceDeclaration(ns.FullName);
10761078
}
10771079

1078-
AstType GetExcplicitInterfaceType (IMember member)
1080+
AstType GetExplicitInterfaceType (IMember member)
10791081
{
10801082
if (member.IsExplicitInterfaceImplementation) {
10811083
var baseMember = member.ImplementedInterfaceMembers.FirstOrDefault ();

ICSharpCode.NRefactory.CSharp/Resolver/CSharpOperators.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ ITypeDefinition IEntity.DeclaringTypeDefinition {
120120
}
121121

122122
IType IEntity.DeclaringType {
123-
get { return SpecialType.UnknownType; }
123+
get { return null; }
124124
}
125125

126126
IMember IMember.MemberDefinition {

ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2252,7 +2252,7 @@ public ResolveResult ResolveObjectCreation(IType type, ResolveResult[] arguments
22522252
if (invoke != null) {
22532253
input = new MethodGroupResolveResult(
22542254
input, invoke.Name,
2255-
methods: new[] { new MethodListWithDeclaringType(invoke.DeclaringType) { invoke } },
2255+
methods: new[] { new MethodListWithDeclaringType(input.Type) { invoke } },
22562256
typeArguments: EmptyList<IType>.Instance
22572257
);
22582258
}

0 commit comments

Comments
 (0)