Browse Source

ResolveVisitor: Handle type arguments on IdentifierExpression and MemberReferenceExpression.

Add support for PointerReferenceExpression.
newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
7615720130
  1. 37
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

37
ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

@ -657,8 +657,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -657,8 +657,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public override ResolveResult VisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
{
if (resolverEnabled) {
// TODO: type arguments?
return resolver.ResolveSimpleName(identifierExpression.Identifier, EmptyList<IType>.Instance,
List<IType> typeArguments = new List<IType>();
foreach (AstType typeArgument in identifierExpression.TypeArguments) {
typeArguments.Add(ResolveType(typeArgument));
}
return resolver.ResolveSimpleName(identifierExpression.Identifier, typeArguments,
IsTargetOfInvocation(identifierExpression));
} else {
ScanChildren(identifierExpression);
@ -706,7 +709,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -706,7 +709,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public override ResolveResult VisitIsExpression(IsExpression isExpression, object data)
{
ScanChildren(isExpression);
return new ResolveResult(KnownTypeReference.Boolean.Resolve(resolver.Context));
if (resolverEnabled)
return new ResolveResult(KnownTypeReference.Boolean.Resolve(resolver.Context));
else
return null;
}
public override ResolveResult VisitLambdaExpression(LambdaExpression lambdaExpression, object data)
@ -718,10 +724,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -718,10 +724,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
if (resolverEnabled) {
ResolveResult target = Resolve(memberReferenceExpression.Target);
List<AstType> typeArgumentNodes = memberReferenceExpression.TypeArguments.ToList();
// TODO: type arguments?
List<IType> typeArguments = new List<IType>();
foreach (AstType typeArgument in memberReferenceExpression.TypeArguments) {
typeArguments.Add(ResolveType(typeArgument));
}
return resolver.ResolveMemberAccess(target, memberReferenceExpression.MemberName,
EmptyList<IType>.Instance,
typeArguments,
IsTargetOfInvocation(memberReferenceExpression));
} else {
ScanChildren(memberReferenceExpression);
@ -763,7 +771,20 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -763,7 +771,20 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public override ResolveResult VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, object data)
{
throw new NotImplementedException();
if (resolverEnabled) {
ResolveResult target = Resolve(pointerReferenceExpression.Target);
ResolveResult deferencedTarget = resolver.ResolveUnaryOperator(UnaryOperatorType.Dereference, target);
List<IType> typeArguments = new List<IType>();
foreach (AstType typeArgument in pointerReferenceExpression.TypeArguments) {
typeArguments.Add(ResolveType(typeArgument));
}
return resolver.ResolveMemberAccess(deferencedTarget, pointerReferenceExpression.MemberName,
typeArguments,
IsTargetOfInvocation(pointerReferenceExpression));
} else {
ScanChildren(pointerReferenceExpression);
return null;
}
}
public override ResolveResult VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, object data)
@ -846,7 +867,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -846,7 +867,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
case UndocumentedExpressionType.RefValue:
var tre = undocumentedExpression.Arguments.ElementAtOrDefault(1) as TypeReferenceExpression;
if (tre != null)
resultType = MakeTypeReference(tre.Type);
resultType = ResolveType(tre.Type);
else
resultType = SharedTypes.UnknownType;
break;

Loading…
Cancel
Save