Browse Source

Added DeclarationRegion property to IVariable.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
26946f003a
  1. 11
      ICSharpCode.NRefactory/CSharp/Ast/Statements/ForeachStatement.cs
  2. 9
      ICSharpCode.NRefactory/CSharp/Ast/Statements/TryCatchStatement.cs
  3. 15
      ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs
  4. 12
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs
  5. 5
      ICSharpCode.NRefactory/TypeSystem/IVariable.cs
  6. 6
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultField.cs
  7. 6
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultParameter.cs

11
ICSharpCode.NRefactory/CSharp/Ast/Statements/ForeachStatement.cs

@ -49,7 +49,16 @@ namespace ICSharpCode.NRefactory.CSharp @@ -49,7 +49,16 @@ namespace ICSharpCode.NRefactory.CSharp
return GetChildByRole (Roles.Identifier).Name;
}
set {
SetChildByRole(Roles.Identifier, Identifier.Create (value, AstLocation.Empty));
SetChildByRole(Roles.Identifier, Identifier.Create (value, AstLocation.Empty));
}
}
public Identifier VariableNameToken {
get {
return GetChildByRole (Roles.Identifier);
}
set {
SetChildByRole(Roles.Identifier, value);
}
}

9
ICSharpCode.NRefactory/CSharp/Ast/Statements/TryCatchStatement.cs

@ -144,6 +144,15 @@ namespace ICSharpCode.NRefactory.CSharp @@ -144,6 +144,15 @@ namespace ICSharpCode.NRefactory.CSharp
}
}
public Identifier VariableNameToken {
get {
return GetChildByRole (Roles.Identifier);
}
set {
SetChildByRole(Roles.Identifier, value);
}
}
public CSharpTokenNode RParToken {
get { return GetChildByRole (Roles.RPar); }
}

15
ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs

@ -83,12 +83,14 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -83,12 +83,14 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
internal readonly LocalVariable prev;
internal readonly ITypeReference type;
internal readonly DomRegion region;
internal readonly string name;
internal readonly IConstantValue constantValue;
public LocalVariable(LocalVariable prev, ITypeReference type, string name, IConstantValue constantValue)
public LocalVariable(LocalVariable prev, ITypeReference type, DomRegion region, string name, IConstantValue constantValue)
{
this.prev = prev;
this.region = region;
this.type = type;
this.name = name;
this.constantValue = constantValue;
@ -97,6 +99,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -97,6 +99,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public string Name {
get { return name; }
}
public DomRegion DeclarationRegion {
get { return region; }
}
public ITypeReference Type {
get { return type; }
}
@ -123,7 +130,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -123,7 +130,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
/// </summary>
public void PushBlock()
{
localVariableStack = new LocalVariable(localVariableStack, null, null, null);
localVariableStack = new LocalVariable(localVariableStack, null, DomRegion.Empty, null, null);
}
/// <summary>
@ -143,13 +150,13 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -143,13 +150,13 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
/// <summary>
/// Adds a new variable to the current block.
/// </summary>
public IVariable AddVariable(ITypeReference type, string name, IConstantValue constantValue = null)
public IVariable AddVariable(ITypeReference type, DomRegion declarationRegion, string name, IConstantValue constantValue = null)
{
if (type == null)
throw new ArgumentNullException("type");
if (name == null)
throw new ArgumentNullException("name");
return localVariableStack = new LocalVariable(localVariableStack, type, name, constantValue);
return localVariableStack = new LocalVariable(localVariableStack, type, declarationRegion, name, constantValue);
}
/// <summary>

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

@ -356,7 +356,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -356,7 +356,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
for (AstNode node = propertyOrIndexerDeclaration.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == PropertyDeclaration.SetterRole && resolver.CurrentMember != null) {
resolver.PushBlock();
resolver.AddVariable(resolver.CurrentMember.ReturnType, "value");
resolver.AddVariable(resolver.CurrentMember.ReturnType, DomRegion.Empty, "value");
Scan(node);
resolver.PopBlock();
} else {
@ -391,7 +391,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -391,7 +391,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (resolver.CurrentMember != null) {
resolver.PushBlock();
resolver.AddVariable(resolver.CurrentMember.ReturnType, "value");
resolver.AddVariable(resolver.CurrentMember.ReturnType, DomRegion.Empty, "value");
ScanChildren(eventDeclaration);
resolver.PopBlock();
} else {
@ -916,7 +916,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -916,7 +916,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
for (AstNode node = fixedStatement.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == FixedStatement.Roles.Variable) {
VariableInitializer vi = (VariableInitializer)node;
resolver.AddVariable(type, ((VariableInitializer)node).Name);
resolver.AddVariable(type, new DomRegion (parsedFile.FileName, vi.StartLocation, vi.EndLocation) , vi.Name);
}
Scan(node);
}
@ -937,7 +937,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -937,7 +937,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
resolver.PushBlock();
ITypeReference type = MakeTypeReference(foreachStatement.VariableType, foreachStatement.InExpression, true);
resolver.AddVariable(type, foreachStatement.VariableName);
resolver.AddVariable(type, new DomRegion (parsedFile.FileName, foreachStatement.VariableNameToken.StartLocation, foreachStatement.VariableNameToken.EndLocation), foreachStatement.VariableName);
ScanChildren(foreachStatement);
resolver.PopBlock();
return null;
@ -947,7 +947,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -947,7 +947,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
resolver.PushBlock();
if (catchClause.VariableName != null) {
resolver.AddVariable(MakeTypeReference(catchClause.Type, null, false), catchClause.VariableName);
resolver.AddVariable(MakeTypeReference(catchClause.Type, null, false), new DomRegion (parsedFile.FileName, catchClause.VariableNameToken.StartLocation, catchClause.VariableNameToken.EndLocation), catchClause.VariableName);
}
ScanChildren(catchClause);
resolver.PopBlock();
@ -973,7 +973,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -973,7 +973,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
IConstantValue cv = null;
if (isConst)
throw new NotImplementedException();
resolver.AddVariable(type, vi.Name, cv);
resolver.AddVariable(type, new DomRegion (parsedFile.FileName, vi.StartLocation, vi.EndLocation), vi.Name, cv);
if (resolverEnabled && initializerCount == 1) {
result = Resolve(node);

5
ICSharpCode.NRefactory/TypeSystem/IVariable.cs

@ -19,6 +19,11 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -19,6 +19,11 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// </summary>
string Name { get; }
/// <summary>
/// Gets the declaration region of the variable.
/// </summary>
DomRegion DeclarationRegion { get; }
/// <summary>
/// Gets the type of the variable.
/// </summary>

6
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultField.cs

@ -41,6 +41,12 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -41,6 +41,12 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
constantValue = provider.Intern(constantValue);
}
DomRegion IVariable.DeclarationRegion {
get {
return Region;
}
}
public bool IsConst {
get { return constantValue != null; }
}

6
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultParameter.cs

@ -105,6 +105,12 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -105,6 +105,12 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
}
}
DomRegion IVariable.DeclarationRegion {
get {
return Region;
}
}
bool HasFlag(byte flag)
{
return (this.flags & flag) != 0;

Loading…
Cancel
Save