|
|
|
@ -41,8 +41,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
public class CSharpResolver |
|
|
|
public class CSharpResolver |
|
|
|
{ |
|
|
|
{ |
|
|
|
static readonly ResolveResult ErrorResult = ErrorResolveResult.UnknownError; |
|
|
|
static readonly ResolveResult ErrorResult = ErrorResolveResult.UnknownError; |
|
|
|
static readonly ResolveResult DynamicResult = new ResolveResult(SpecialType.Dynamic); |
|
|
|
|
|
|
|
static readonly ResolveResult NullResult = new ResolveResult(SpecialType.NullType); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readonly ICompilation compilation; |
|
|
|
readonly ICompilation compilation; |
|
|
|
internal readonly CSharpConversions conversions; |
|
|
|
internal readonly CSharpConversions conversions; |
|
|
|
@ -1381,7 +1379,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
foundInCache = cache.TryGetValue(identifier, out r); |
|
|
|
foundInCache = cache.TryGetValue(identifier, out r); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (!foundInCache) { |
|
|
|
if (foundInCache) { |
|
|
|
|
|
|
|
r = (r != null ? r.ShallowClone() : null); |
|
|
|
|
|
|
|
} else { |
|
|
|
r = LookInCurrentType(identifier, typeArguments, lookupMode, parameterizeResultType); |
|
|
|
r = LookInCurrentType(identifier, typeArguments, lookupMode, parameterizeResultType); |
|
|
|
if (cache != null) { |
|
|
|
if (cache != null) { |
|
|
|
// also cache missing members (r==null)
|
|
|
|
// also cache missing members (r==null)
|
|
|
|
@ -1398,9 +1398,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
r = LookInUsingScopeNamespace(null, compilation.RootNamespace, identifier, typeArguments, parameterizeResultType); |
|
|
|
r = LookInUsingScopeNamespace(null, compilation.RootNamespace, identifier, typeArguments, parameterizeResultType); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
if (k == 0 && lookupMode != NameLookupMode.TypeInUsingDeclaration) { |
|
|
|
if (k == 0 && lookupMode != NameLookupMode.TypeInUsingDeclaration) { |
|
|
|
if (!context.CurrentUsingScope.ResolveCache.TryGetValue(identifier, out r)) { |
|
|
|
if (context.CurrentUsingScope.ResolveCache.TryGetValue(identifier, out r)) { |
|
|
|
|
|
|
|
r = (r != null ? r.ShallowClone() : null); |
|
|
|
|
|
|
|
} else { |
|
|
|
r = LookInCurrentUsingScope(identifier, typeArguments, false, false); |
|
|
|
r = LookInCurrentUsingScope(identifier, typeArguments, false, false); |
|
|
|
r = context.CurrentUsingScope.ResolveCache.GetOrAdd(identifier, r); |
|
|
|
context.CurrentUsingScope.ResolveCache.TryAdd(identifier, r); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
r = LookInCurrentUsingScope(identifier, typeArguments, lookupMode == NameLookupMode.TypeInUsingDeclaration, parameterizeResultType); |
|
|
|
r = LookInCurrentUsingScope(identifier, typeArguments, lookupMode == NameLookupMode.TypeInUsingDeclaration, parameterizeResultType); |
|
|
|
@ -1477,7 +1479,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
if (!(isInUsingDeclaration && u == currentUsingScope)) { |
|
|
|
if (!(isInUsingDeclaration && u == currentUsingScope)) { |
|
|
|
foreach (var pair in u.UsingAliases) { |
|
|
|
foreach (var pair in u.UsingAliases) { |
|
|
|
if (pair.Key == identifier) { |
|
|
|
if (pair.Key == identifier) { |
|
|
|
return pair.Value; |
|
|
|
return pair.Value.ShallowClone(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1589,7 +1591,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (target.Type.Kind == TypeKind.Dynamic) |
|
|
|
if (target.Type.Kind == TypeKind.Dynamic) |
|
|
|
return DynamicResult; |
|
|
|
return new ResolveResult(SpecialType.Dynamic); |
|
|
|
|
|
|
|
|
|
|
|
MemberLookup lookup = CreateMemberLookup(lookupMode); |
|
|
|
MemberLookup lookup = CreateMemberLookup(lookupMode); |
|
|
|
ResolveResult result; |
|
|
|
ResolveResult result; |
|
|
|
@ -1887,7 +1889,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
// C# 4.0 spec: §7.6.5
|
|
|
|
// C# 4.0 spec: §7.6.5
|
|
|
|
|
|
|
|
|
|
|
|
if (target.Type.Kind == TypeKind.Dynamic) |
|
|
|
if (target.Type.Kind == TypeKind.Dynamic) |
|
|
|
return DynamicResult; |
|
|
|
return new ResolveResult(SpecialType.Dynamic); |
|
|
|
|
|
|
|
|
|
|
|
MethodGroupResolveResult mgrr = target as MethodGroupResolveResult; |
|
|
|
MethodGroupResolveResult mgrr = target as MethodGroupResolveResult; |
|
|
|
if (mgrr != null) { |
|
|
|
if (mgrr != null) { |
|
|
|
@ -2297,7 +2299,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
public ResolveResult ResolvePrimitive(object value) |
|
|
|
public ResolveResult ResolvePrimitive(object value) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (value == null) { |
|
|
|
if (value == null) { |
|
|
|
return NullResult; |
|
|
|
return new ResolveResult(SpecialType.NullType); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
TypeCode typeCode = Type.GetTypeCode(value.GetType()); |
|
|
|
TypeCode typeCode = Type.GetTypeCode(value.GetType()); |
|
|
|
IType type = compilation.FindType(typeCode); |
|
|
|
IType type = compilation.FindType(typeCode); |
|
|
|
|