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
} }
} }
if (AlwaysUseShortTypeNames|| if (AlwaysUseShortTypeNames) {
(typeDef.DeclaringTypeDefinition != null && typeDef.DeclaringTypeDefinition.Equals (resolver.CurrentTypeDefinition))) {
var shortResult = new SimpleType(typeDef.Name); var shortResult = new SimpleType(typeDef.Name);
AddTypeArguments(shortResult, typeArguments, outerTypeParameterCount, typeDef.TypeParameterCount); AddTypeArguments(shortResult, typeArguments, outerTypeParameterCount, typeDef.TypeParameterCount);
return shortResult; return shortResult;

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

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

Loading…
Cancel
Save