Browse Source

Fixed bugs in ResolveVisitor:

- forgot scanning into ForEachStatement.InExpression when the variable type was not 'var'
 - ProcessConversion() was called for Expression.Null
 - made Resolve() internal because it hard to use correctly

TypeSystemAstBuilder: reverted Mike's change for nested types, it is incorrect for nested types within generic types.
newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
800b951c6d
  1. 3
      ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
  2. 8
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

3
ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

@ -238,8 +238,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -238,8 +238,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}
}
if (AlwaysUseShortTypeNames||
(typeDef.DeclaringTypeDefinition != null && typeDef.DeclaringTypeDefinition.Equals (resolver.CurrentTypeDefinition))) {
if (AlwaysUseShortTypeNames) {
var shortResult = new SimpleType(typeDef.Name);
AddTypeArguments(shortResult, typeArguments, outerTypeParameterCount, typeDef.TypeParameterCount);
return shortResult;

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

@ -202,8 +202,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -202,8 +202,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
/// to the correct state.
/// Otherwise, use <c>resolver.Scan(compilationUnit); var result = resolver.GetResolveResult(node);</c>
/// instead.
/// --
/// This method now is internal, because it is difficult to use correctly.
/// Users of the public API should use Scan()+GetResolveResult() instead.
/// </summary>
public ResolveResult Resolve(AstNode node)
internal ResolveResult Resolve(AstNode node)
{
if (node == null || node.IsNull)
return errorResult;
@ -296,7 +299,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -296,7 +299,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Log.WriteLine(" Data not found.");
}
}
if (expr != null && conversion != Conversion.IdentityConversion)
if (expr != null && !expr.IsNull && conversion != Conversion.IdentityConversion)
navigator.ProcessConversion(expr, rr, conversion, targetType);
}
@ -2415,6 +2418,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -2415,6 +2418,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
type = MakeVarTypeReference(foreachStatement.InExpression, true);
}
} else {
Scan(foreachStatement.InExpression);
type = ResolveType(foreachStatement.VariableType);
}
IVariable v = resolver.AddVariable(type, MakeRegion(foreachStatement.VariableNameToken), foreachStatement.VariableName);

Loading…
Cancel
Save