Browse Source

Fixed some issues in resolver; enable resolver unit tests.

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
878dbbff0b
  1. 2
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/AttributeTests.cs
  2. 2
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/ExtensionMethodTests.cs
  3. 12
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/InvocationTests.cs
  4. 2
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs
  5. 28
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs
  6. 2
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/ObjectCreationTests.cs
  7. 2
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/UnsafeCodeTests.cs
  8. 8
      ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs
  9. 270
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs
  10. 12
      ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractFreezable.cs

2
ICSharpCode.NRefactory.Tests/CSharp/Resolver/AttributeTests.cs

@ -7,7 +7,7 @@ using NUnit.Framework; @@ -7,7 +7,7 @@ using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.Resolver
{
[TestFixture, Ignore("DOM for attributes is incomplete")]
[TestFixture, Ignore("Attributes not implemented in resolver")]
public class AttributeTests : ResolverTestBase
{
[Test]

2
ICSharpCode.NRefactory.Tests/CSharp/Resolver/ExtensionMethodTests.cs

@ -57,7 +57,7 @@ namespace XN { @@ -57,7 +57,7 @@ namespace XN {
Assert.AreEqual("C.F", mrr.Member.FullName);
}
[Test, Ignore("Test fails due to parser returning incorrect position")]
[Test, Ignore("Anonymous methods not yet implemented")]
public void ExtensionMethodsTest2()
{
string program = @"using System; using System.Collections.Generic;

12
ICSharpCode.NRefactory.Tests/CSharp/Resolver/InvocationTests.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -49,7 +49,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Assert.AreSame(SharedTypes.UnknownType, result.Type);
}
[Test, Ignore("Inheritance not supported in parser")]
[Test, Ignore("Resolver returns the member from the base class, which is correct according to C# spec, but not what we want to show in tooltips")]
public void OverriddenMethodCall()
{
string program = @"class A {
@ -70,7 +70,7 @@ class B : A { @@ -70,7 +70,7 @@ class B : A {
Assert.AreEqual("B.GetRandomNumber", result.Member.FullName);
}
[Test, Ignore("Inheritance not supported in parser")]
[Test, Ignore("Resolver returns the member from the base class, which is correct according to C# spec, but not what we want to show in tooltips")]
public void OverriddenMethodCall2()
{
string program = @"class A {
@ -122,7 +122,7 @@ class A { @@ -122,7 +122,7 @@ class A {
Assert.AreEqual("System.Void", Resolve(program).Type.ReflectionName);
}
[Test, Ignore("parser is broken for events")]
[Test]
public void EventCallTest()
{
string program = @"using System;
@ -209,7 +209,7 @@ class Program { @@ -209,7 +209,7 @@ class Program {
Assert.IsTrue(((IMethod)mrr.Member).Parameters[0].IsRef);
}
[Test, Ignore("Inheritance not supported in parser")]
[Test, Ignore("Grouping by declaring type not yet implemented")]
public void AddedOverload()
{
string program = @"class BaseClass {
@ -225,7 +225,7 @@ class DerivedClass : BaseClass { @@ -225,7 +225,7 @@ class DerivedClass : BaseClass {
Assert.AreEqual("DerivedClass.Test", mrr.Member.FullName);
}
[Test, Ignore("Inheritance not supported in parser")]
[Test]
public void AddedNonApplicableOverload()
{
string program = @"class BaseClass {
@ -244,7 +244,7 @@ class DerivedClass : BaseClass { @@ -244,7 +244,7 @@ class DerivedClass : BaseClass {
Assert.AreEqual("DerivedClass.Test", mrr.Member.FullName);
}
[Test, Ignore("Inheritance not supported in parser")]
[Test, Ignore("Grouping by declaring type not yet implemented")]
public void OverrideShadowed()
{
string program = @"using System;

2
ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs

@ -6,7 +6,7 @@ using NUnit.Framework; @@ -6,7 +6,7 @@ using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.Resolver
{
[TestFixture, Ignore("Expression Lambdas not supported by parser")]
[TestFixture, Ignore("Lambdas not supported by resolver")]
public class LambdaTests : ResolverTestBase
{
[Test]

28
ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs

@ -191,7 +191,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -191,7 +191,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Assert.AreSame(SharedTypes.UnknownType, result.Type);
}
[Test, Ignore("not yet implemented (depends on distuishing types and expressions in the DOM)")]
[Test, Ignore("not yet implemented")]
public void PropertyNameAmbiguousWithTypeName()
{
string program = @"class A {
@ -230,7 +230,7 @@ class Color { public static readonly Color Empty = null; } @@ -230,7 +230,7 @@ class Color { public static readonly Color Empty = null; }
Assert.AreEqual("value", result.Variable.Name);
}
[Test, Ignore("type references not supported")]
[Test]
public void ValueInsideEventTest()
{
string program = @"using System; class A {
@ -263,7 +263,7 @@ class Color { public static readonly Color Empty = null; } @@ -263,7 +263,7 @@ class Color { public static readonly Color Empty = null; }
Assert.AreEqual("value", result.Variable.Name);
}
[Test, Ignore("Anonymous method parameters not supported by parser")]
[Test, Ignore("Anonymous methods not supported in resolver")]
public void AnonymousMethodParameters()
{
string program = @"using System;
@ -366,7 +366,7 @@ class TestClass { @@ -366,7 +366,7 @@ class TestClass {
Assert.AreEqual("System.Collections.ArrayList", member.Type.FullName, "the full type should be resolved");
}
[Test, Ignore("Parser position bug")]
[Test]
public void ImportAliasNamespaceResolveTest()
{
NamespaceResolveResult ns;
@ -423,7 +423,7 @@ class TestClass { @@ -423,7 +423,7 @@ class TestClass {
Assert.AreEqual("PC.MyCompany.Project.MyClass", mrr.Type.FullName);
}
[Test, Ignore("Parser position bug")]
[Test]
public void ResolveNamespaceSD_863()
{
string program = @"using System;
@ -443,7 +443,7 @@ namespace A.B { @@ -443,7 +443,7 @@ namespace A.B {
Assert.AreEqual("A.B.C.D", trr.Type.FullName);
}
[Test, Ignore("Broken due to parser returning incorrect positions")]
[Test]
public void ResolveTypeSD_863()
{
string program = @"using System;
@ -475,7 +475,7 @@ class TestClass { @@ -475,7 +475,7 @@ class TestClass {
Assert.AreEqual(short.MaxValue, rr.ConstantValue);
}
[Test, Ignore("Parser produces incorrect positions for :: operator")]
[Test]
public void ClassWithSameNameAsNamespace()
{
string program = @"using System; namespace XX {
@ -500,7 +500,7 @@ class TestClass { @@ -500,7 +500,7 @@ class TestClass {
Assert.AreEqual("XX.XX.Test", mrr.Member.FullName);
}
[Test, Ignore("Parser position bug")]
[Test]
public void ClassNameLookup1()
{
string program = @"namespace MainNamespace {
@ -519,7 +519,7 @@ namespace Test.Subnamespace { @@ -519,7 +519,7 @@ namespace Test.Subnamespace {
Assert.AreEqual("Test.Subnamespace.Test.TheClass", trr.Type.FullName);
}
[Test, Ignore("Parser position bug")]
[Test]
public void ClassNameLookup2()
{
string program = @"using Test.Subnamespace;
@ -595,7 +595,7 @@ namespace A { @@ -595,7 +595,7 @@ namespace A {
Assert.AreEqual("MainNamespace.Test", nrr.NamespaceName);
}
[Test, Ignore("Fails because parser does not support base type references")]
[Test]
public void InvocableRule()
{
string program = @"using System;
@ -622,7 +622,7 @@ namespace A { @@ -622,7 +622,7 @@ namespace A {
Assert.AreEqual("BaseClass.Test", mrr.Member.FullName);
}
[Test, Ignore("Fails because parser does not support base type references")]
[Test]
public void InvocableRule2()
{
string program = @"using System;
@ -650,7 +650,7 @@ namespace A { @@ -650,7 +650,7 @@ namespace A {
Assert.AreEqual("BaseClass.Test", mrr.Member.FullName);
}
[Test, Ignore("Fails because parser does not support base type references")]
[Test]
public void AccessibleRule()
{
string program = @"using System;
@ -705,7 +705,7 @@ namespace A { @@ -705,7 +705,7 @@ namespace A {
Assert.AreEqual("DerivedClass.Test", mrr.Member.FullName);
}
[Test, Ignore("Parser doesn't support inheritance")]
[Test, Ignore("Resolver Bug")]
public void SD_1487()
{
string program = @"using System;
@ -742,7 +742,7 @@ class Test { @@ -742,7 +742,7 @@ class Test {
Assert.AreEqual("System.Int32", rr.Member.ReturnType.Resolve(context).FullName);
}
[Test, Ignore("Parser doesn't support inheritance")]
[Test, Ignore("Resolver bug")]
public void MethodHidesEvent()
{
// see SD-1542

2
ICSharpCode.NRefactory.Tests/CSharp/Resolver/ObjectCreationTests.cs

@ -100,7 +100,7 @@ class A { @@ -100,7 +100,7 @@ class A {
Assert.AreEqual(0, m.Parameters.Count);
}
[Test, Ignore("parser doesn't produce any nodes for base constructor calls")]
[Test, Ignore("Not implemented")]
public void ChainedConstructorCall()
{
string program = @"using System;

2
ICSharpCode.NRefactory.Tests/CSharp/Resolver/UnsafeCodeTests.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -9,7 +9,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
[TestFixture]
public class UnsafeCodeTests : ResolverTestBase
{
[Test, Ignore("fixed statement not implemented in parser")]
[Test, Ignore("Parser returns incorrect positions")]
public void FixedStatement()
{
string program = @"using System;

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

@ -1559,9 +1559,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1559,9 +1559,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
for (ITypeDefinition t = this.CurrentTypeDefinition; t != null; t = t.DeclaringTypeDefinition) {
if (k == 0) {
// look for type parameter with that name
foreach (ITypeParameter tp in t.TypeParameters) {
if (tp.Name == identifier)
return new TypeResolveResult(tp);
var typeParameters = t.TypeParameters;
// only look at type parameters defined directly on this type, not at those copied from outer classes
for (int i = (t.DeclaringTypeDefinition != null ? t.DeclaringTypeDefinition.TypeParameterCount : 0); i < typeParameters.Count; i++) {
if (typeParameters[i].Name == identifier)
return new TypeResolveResult(typeParameters[i]);
}
}

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

@ -140,6 +140,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -140,6 +140,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return result;
}
protected override ResolveResult VisitChildren(AstNode node, object data)
{
ScanChildren(node);
return null;
}
void ScanChildren(AstNode node)
{
for (AstNode child = node.FirstChild; child != null; child = child.NextSibling) {
@ -403,6 +409,32 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -403,6 +409,32 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
public override ResolveResult VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration, object data)
{
ScanChildren(typeParameterDeclaration);
if (resolverEnabled) {
string name = typeParameterDeclaration.Name;
IMethod m = resolver.CurrentMember as IMethod;
if (m != null) {
foreach (var tp in m.TypeParameters) {
if (tp.Name == name)
return new TypeResolveResult(tp);
}
}
if (resolver.CurrentTypeDefinition != null) {
var typeParameters = resolver.CurrentTypeDefinition.TypeParameters;
// look backwards so that TPs in the current type take precedence over those copied from outer types
for (int i = typeParameters.Count - 1; i >= 0; i--) {
if (typeParameters[i].Name == name)
return new TypeResolveResult(typeParameters[i]);
}
}
return errorResult;
} else {
return null;
}
}
public override ResolveResult VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, object data)
{
try {
@ -420,6 +452,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -420,6 +452,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
resolver.CurrentMember = null;
}
}
public override ResolveResult VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration, object data)
{
throw new NotImplementedException();
}
#endregion
#region Track CheckForOverflow
@ -497,11 +534,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -497,11 +534,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
throw new NotImplementedException();
}
public override ResolveResult VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, object data)
public override ResolveResult VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, object data)
{
// TODO: ?
ScanChildren(undocumentedExpression);
return new ResolveResult(resolver.Context.GetClass(typeof(RuntimeArgumentHandle)) ?? SharedTypes.UnknownType);
throw new NotImplementedException();
}
public override ResolveResult VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data)
@ -598,6 +633,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -598,6 +633,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
public override ResolveResult VisitEmptyExpression(EmptyExpression emptyExpression, object data)
{
return errorResult;
}
public override ResolveResult VisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
{
if (resolverEnabled) {
@ -756,6 +796,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -756,6 +796,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return null;
}
public override ResolveResult VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, object data)
{
if (resolverEnabled) {
return Resolve(typeReferenceExpression.Type);
} else {
Scan(typeReferenceExpression.Type);
return null;
}
}
public override ResolveResult VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, object data)
{
if (resolverEnabled) {
@ -766,6 +816,38 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -766,6 +816,38 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return null;
}
}
public override ResolveResult VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, object data)
{
ScanChildren(undocumentedExpression);
if (resolverEnabled) {
ITypeReference resultType;
switch (undocumentedExpression.UndocumentedExpressionType) {
case UndocumentedExpressionType.ArgListAccess:
case UndocumentedExpressionType.ArgList:
resultType = typeof(RuntimeArgumentHandle).ToTypeReference();
break;
case UndocumentedExpressionType.RefValue:
var tre = undocumentedExpression.Arguments.ElementAtOrDefault(1) as TypeReferenceExpression;
if (tre != null)
resultType = MakeTypeReference(tre.Type);
else
resultType = SharedTypes.UnknownType;
break;
case UndocumentedExpressionType.RefType:
resultType = systemType;
break;
case UndocumentedExpressionType.MakeRef:
resultType = typeof(TypedReference).ToTypeReference();
break;
default:
throw new InvalidOperationException("Invalid value for UndocumentedExpressionType");
}
return new ResolveResult(resultType.Resolve(resolver.Context));
} else {
return null;
}
}
#endregion
#region Local Variable Scopes (Block Statements)
@ -788,7 +870,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -788,7 +870,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public override ResolveResult VisitFixedStatement(FixedStatement fixedStatement, object data)
{
resolver.PushBlock();
ScanChildren(fixedStatement);
VariableInitializer firstInitializer = fixedStatement.Variables.FirstOrDefault();
ITypeReference type = MakeTypeReference(fixedStatement.Type,
firstInitializer != null ? firstInitializer.Initializer : null,
false);
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);
}
Scan(node);
}
resolver.PopBlock();
return null;
}
@ -811,112 +905,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -811,112 +905,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
resolver.PopBlock();
return null;
}
#endregion
#region Simple Statements (only ScanChildren)
public override ResolveResult VisitExpressionStatement(ExpressionStatement expressionStatement, object data)
{
ScanChildren(expressionStatement);
return null;
}
public override ResolveResult VisitBreakStatement(BreakStatement breakStatement, object data)
{
ScanChildren(breakStatement);
return null;
}
public override ResolveResult VisitContinueStatement(ContinueStatement continueStatement, object data)
{
ScanChildren(continueStatement);
return null;
}
public override ResolveResult VisitEmptyStatement(EmptyStatement emptyStatement, object data)
{
ScanChildren(emptyStatement);
return null;
}
public override ResolveResult VisitGotoStatement(GotoStatement gotoStatement, object data)
{
ScanChildren(gotoStatement);
return null;
}
public override ResolveResult VisitIfElseStatement(IfElseStatement ifElseStatement, object data)
{
ScanChildren(ifElseStatement);
return null;
}
public override ResolveResult VisitLabelStatement(LabelStatement labelStatement, object data)
{
ScanChildren(labelStatement);
return null;
}
public override ResolveResult VisitLockStatement(LockStatement lockStatement, object data)
{
ScanChildren(lockStatement);
return null;
}
public override ResolveResult VisitReturnStatement(ReturnStatement returnStatement, object data)
{
ScanChildren(returnStatement);
return null;
}
public override ResolveResult VisitSwitchStatement(SwitchStatement switchStatement, object data)
{
ScanChildren(switchStatement);
return null;
}
public override ResolveResult VisitSwitchSection(SwitchSection switchSection, object data)
{
ScanChildren(switchSection);
return null;
}
public override ResolveResult VisitCaseLabel(CaseLabel caseLabel, object data)
{
ScanChildren(caseLabel);
return null;
}
public override ResolveResult VisitThrowStatement(ThrowStatement throwStatement, object data)
{
ScanChildren(throwStatement);
return null;
}
public override ResolveResult VisitUnsafeStatement(UnsafeStatement unsafeStatement, object data)
{
ScanChildren(unsafeStatement);
return null;
}
public override ResolveResult VisitWhileStatement(WhileStatement whileStatement, object data)
{
ScanChildren(whileStatement);
return null;
}
public override ResolveResult VisitYieldStatement(YieldStatement yieldStatement, object data)
{
ScanChildren(yieldStatement);
return null;
}
#endregion
#region Try / Catch
public override ResolveResult VisitTryCatchStatement(TryCatchStatement tryCatchStatement, object data)
{
ScanChildren(tryCatchStatement);
return null;
}
public override ResolveResult VisitCatchClause(CatchClause catchClause, object data)
{
@ -942,7 +930,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -942,7 +930,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
int initializerCount = variableDeclarationStatement.Variables.Count;
ResolveResult result = null;
for (AstNode node = variableDeclarationStatement.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == FieldDeclaration.Roles.Variable) {
if (node.Role == VariableDeclarationStatement.Roles.Variable) {
VariableInitializer vi = (VariableInitializer)node;
IConstantValue cv = null;
@ -1067,23 +1055,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1067,23 +1055,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
throw new NotImplementedException();
}
public override ResolveResult VisitAttributeSection(AttributeSection attributeSection, object data)
{
ScanChildren(attributeSection);
return null;
}
#endregion
#region Using Declaration
public override ResolveResult VisitUsingDeclaration(UsingDeclaration usingDeclaration, object data)
{
// TODO: set isInUsingDeclaration
ScanChildren(usingDeclaration);
return null;
}
public override ResolveResult VisitUsingAliasDeclaration(UsingAliasDeclaration usingDeclaration, object data)
{
// TODO: set isInUsingDeclaration
ScanChildren(usingDeclaration);
return null;
}
@ -1127,70 +1111,50 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1127,70 +1111,50 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
#endregion
#region Query Expressions
/*
public override ResolveResult VisitQueryExpressionFromClause(QueryExpressionFromClause queryExpressionFromClause, object data)
{
throw new NotImplementedException();
}
public override ResolveResult VisitQueryExpressionWhereClause(QueryExpressionWhereClause queryExpressionWhereClause, object data)
{
throw new NotImplementedException();
}
public override ResolveResult VisitQueryExpressionJoinClause(QueryExpressionJoinClause queryExpressionJoinClause, object data)
public override ResolveResult VisitQueryExpression(QueryExpression queryExpression, object data)
{
throw new NotImplementedException();
}
#endregion
public override ResolveResult VisitQueryExpressionGroupClause(QueryExpressionGroupClause queryExpressionGroupClause, object data)
public override ResolveResult VisitConstructorInitializer(ConstructorInitializer constructorInitializer, object data)
{
throw new NotImplementedException();
ScanChildren(constructorInitializer);
return null;
}
public override ResolveResult VisitQueryExpressionLetClause(QueryExpressionLetClause queryExpressionLetClause, object data)
public override ResolveResult VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, object data)
{
throw new NotImplementedException();
// TODO: array initializers are valid expressions if the parent node is a variable/field declaration
// that explicitly defines an array type
return errorResult;
}
public override ResolveResult VisitQueryExpressionOrderClause(QueryExpressionOrderClause queryExpressionOrderClause, object data)
public override ResolveResult VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data)
{
throw new NotImplementedException();
}
public override ResolveResult VisitQueryExpressionOrdering(QueryExpressionOrdering queryExpressionOrdering, object data)
public override ResolveResult VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer, object data)
{
throw new NotImplementedException();
}
public override ResolveResult VisitQueryExpressionSelectClause(QueryExpressionSelectClause queryExpressionSelectClause, object data)
{
throw new NotImplementedException();
}
*/
#endregion
#region Token Nodes
public override ResolveResult VisitIdentifier(Identifier identifier, object data)
{
return null;
}
public override ResolveResult VisitConstraint(Constraint constraint, object data)
public override ResolveResult VisitComment(Comment comment, object data)
{
ScanChildren(constraint);
return null;
}
public override ResolveResult VisitConstructorInitializer(ConstructorInitializer constructorInitializer, object data)
public override ResolveResult VisitCSharpTokenNode(CSharpTokenNode cSharpTokenNode, object data)
{
ScanChildren(constructorInitializer);
return null;
}
public override ResolveResult VisitAccessor(Accessor accessor, object data)
{
ScanChildren(accessor);
return null;
}
#endregion
}
}

12
ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractFreezable.cs

@ -63,18 +63,18 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -63,18 +63,18 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return new List<T>(inputList);
}
protected static IList<T> FreezeList<T>(IList<T> list) where T : IFreezable
protected static ReadOnlyCollection<T> FreezeList<T>(IList<T> list) where T : IFreezable
{
if (list == null || list.Count == 0)
return EmptyList<T>.Instance;
list = new ReadOnlyCollection<T>(list.ToArray());
foreach (T item in list) {
var result = new ReadOnlyCollection<T>(list.ToArray());
foreach (T item in result) {
item.Freeze();
}
return list;
return result;
}
protected static IList<string> FreezeList(IList<string> list)
protected static ReadOnlyCollection<string> FreezeList(IList<string> list)
{
if (list == null || list.Count == 0)
return EmptyList<string>.Instance;
@ -82,7 +82,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -82,7 +82,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
return new ReadOnlyCollection<string>(list.ToArray());
}
protected static IList<ITypeReference> FreezeList(IList<ITypeReference> list)
protected static ReadOnlyCollection<ITypeReference> FreezeList(IList<ITypeReference> list)
{
if (list == null || list.Count == 0)
return EmptyList<ITypeReference>.Instance;

Loading…
Cancel
Save