Browse Source

Merge remote-tracking branch 'upstream/master' into mansheng

newNRvisualizers
Mansheng Yang 14 years ago
parent
commit
f9aa82cf49
  1. 15
      ICSharpCode.NRefactory.CSharp/Ast/Expressions/PointerReferenceExpression.cs
  2. 2
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  3. 50
      ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs
  4. 2
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs
  5. 2
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs
  6. 21
      ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs

15
ICSharpCode.NRefactory.CSharp/Ast/Expressions/PointerReferenceExpression.cs

@ -43,13 +43,22 @@ namespace ICSharpCode.NRefactory.CSharp
public CSharpTokenNode ArrowToken { public CSharpTokenNode ArrowToken {
get { return GetChildByRole (ArrowRole); } get { return GetChildByRole (ArrowRole); }
} }
public string MemberName { public string MemberName {
get { get {
return GetChildByRole (Roles.Identifier).Name; return GetChildByRole (Roles.Identifier).Name;
} }
set { set {
SetChildByRole(Roles.Identifier, Identifier.Create (value)); SetChildByRole(Roles.Identifier, Identifier.Create (value));
}
}
public Identifier MemberNameToken {
get {
return GetChildByRole (Roles.Identifier);
}
set {
SetChildByRole (Roles.Identifier, value);
} }
} }
@ -61,7 +70,7 @@ namespace ICSharpCode.NRefactory.CSharp
{ {
visitor.VisitPointerReferenceExpression (this); visitor.VisitPointerReferenceExpression (this);
} }
public override T AcceptVisitor<T> (IAstVisitor<T> visitor) public override T AcceptVisitor<T> (IAstVisitor<T> visitor)
{ {
return visitor.VisitPointerReferenceExpression (this); return visitor.VisitPointerReferenceExpression (this);

2
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -2324,7 +2324,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
result.AddMember(field); result.AddMember(field);
} }
foreach (var m in type.GetMethods ()) { foreach (var m in type.GetMethods ()) {
if (m.Name == "TryParse") { if (m.IsStatic && m.IsPublic) {
result.AddMember(m); result.AddMember(m);
} }
} }

50
ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs

@ -36,7 +36,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
{ {
CSharpCompletionEngine completion; CSharpCompletionEngine completion;
List<ICompletionData> result = new List<ICompletionData> (); List<ICompletionData> result = new List<ICompletionData> ();
public List<ICompletionData> Result { public List<ICompletionData> Result {
get { get {
return result; return result;
@ -48,24 +48,24 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return completion.factory; return completion.factory;
} }
} }
public CompletionDataWrapper (CSharpCompletionEngine completion) public CompletionDataWrapper (CSharpCompletionEngine completion)
{ {
this.completion = completion; this.completion = completion;
} }
public void Add (ICompletionData data) public void Add (ICompletionData data)
{ {
result.Add (data); result.Add (data);
} }
public void AddCustom (string displayText, string description = null, string completionText = null) public void AddCustom (string displayText, string description = null, string completionText = null)
{ {
result.Add (Factory.CreateLiteralCompletionData (displayText, description, completionText)); result.Add (Factory.CreateLiteralCompletionData (displayText, description, completionText));
} }
HashSet<string> usedNamespaces = new HashSet<string> (); HashSet<string> usedNamespaces = new HashSet<string> ();
public void AddNamespace (string name) public void AddNamespace (string name)
{ {
if (string.IsNullOrEmpty (name) || usedNamespaces.Contains (name)) if (string.IsNullOrEmpty (name) || usedNamespaces.Contains (name))
@ -73,13 +73,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
usedNamespaces.Add (name); usedNamespaces.Add (name);
result.Add (Factory.CreateNamespaceCompletionData (name)); result.Add (Factory.CreateNamespaceCompletionData (name));
} }
HashSet<string> usedTypes = new HashSet<string> (); HashSet<string> usedTypes = new HashSet<string> ();
public ICompletionData AddType(IType type, string shortType) public ICompletionData AddType(IType type, string shortType)
{ {
if (type == null || string.IsNullOrEmpty(shortType) || usedTypes.Contains(shortType)) if (type == null || string.IsNullOrEmpty(shortType) || usedTypes.Contains(shortType))
return null; return null;
if (type.Name == "Void" && type.Namespace == "System")
return null;
usedTypes.Add(shortType); usedTypes.Add(shortType);
var iCompletionData = Factory.CreateTypeCompletionData(type, shortType); var iCompletionData = Factory.CreateTypeCompletionData(type, shortType);
result.Add(iCompletionData); result.Add(iCompletionData);
@ -90,14 +92,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
{ {
if (type == null || string.IsNullOrEmpty(shortType) || usedTypes.Contains(shortType)) if (type == null || string.IsNullOrEmpty(shortType) || usedTypes.Contains(shortType))
return null; return null;
if (type.Name == "Void" && type.Namespace == "System")
return null;
usedTypes.Add(shortType); usedTypes.Add(shortType);
var iCompletionData = Factory.CreateTypeCompletionData(type, shortType); var iCompletionData = Factory.CreateTypeCompletionData(type, shortType);
result.Add(iCompletionData); result.Add(iCompletionData);
return iCompletionData; return iCompletionData;
} }
Dictionary<string, List<ICompletionData>> data = new Dictionary<string, List<ICompletionData>> (); Dictionary<string, List<ICompletionData>> data = new Dictionary<string, List<ICompletionData>> ();
public ICompletionData AddVariable(IVariable variable) public ICompletionData AddVariable(IVariable variable)
{ {
if (data.ContainsKey(variable.Name)) if (data.ContainsKey(variable.Name))
@ -107,14 +111,14 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
result.Add(cd); result.Add(cd);
return cd; return cd;
} }
public ICompletionData AddNamedParameterVariable(IVariable variable) public ICompletionData AddNamedParameterVariable(IVariable variable)
{ {
var name = variable.Name + ":"; var name = variable.Name + ":";
if (data.ContainsKey(name)) if (data.ContainsKey(name))
return null; return null;
data [name] = new List<ICompletionData>(); data [name] = new List<ICompletionData>();
var cd = Factory.CreateVariableCompletionData(variable); var cd = Factory.CreateVariableCompletionData(variable);
cd.CompletionText += ":"; cd.CompletionText += ":";
cd.DisplayText += ":"; cd.DisplayText += ":";
@ -129,12 +133,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
data [variable.Name] = new List<ICompletionData> (); data [variable.Name] = new List<ICompletionData> ();
result.Add (Factory.CreateVariableCompletionData (variable)); result.Add (Factory.CreateVariableCompletionData (variable));
} }
public ICompletionData AddMember (IUnresolvedMember member) public ICompletionData AddMember (IUnresolvedMember member)
{ {
var newData = Factory.CreateEntityCompletionData (member); var newData = Factory.CreateEntityCompletionData (member);
// newData.HideExtensionParameter = HideExtensionParameter; // newData.HideExtensionParameter = HideExtensionParameter;
string memberKey = newData.DisplayText; string memberKey = newData.DisplayText;
if (memberKey == null) if (memberKey == null)
return null; return null;
@ -143,7 +147,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
List<ICompletionData> existingData; List<ICompletionData> existingData;
data.TryGetValue (memberKey, out existingData); data.TryGetValue (memberKey, out existingData);
if (existingData != null) { if (existingData != null) {
var a = member as IEntity; var a = member as IEntity;
foreach (var d in existingData) { foreach (var d in existingData) {
@ -171,7 +175,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
{ {
var newData = Factory.CreateEntityCompletionData (member); var newData = Factory.CreateEntityCompletionData (member);
// newData.HideExtensionParameter = HideExtensionParameter; // newData.HideExtensionParameter = HideExtensionParameter;
string memberKey = newData.DisplayText; string memberKey = newData.DisplayText;
if (memberKey == null) if (memberKey == null)
return null; return null;
@ -180,7 +184,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
List<ICompletionData> existingData; List<ICompletionData> existingData;
data.TryGetValue (memberKey, out existingData); data.TryGetValue (memberKey, out existingData);
if (existingData != null) { if (existingData != null) {
var a = member as IEntity; var a = member as IEntity;
foreach (var d in existingData) { foreach (var d in existingData) {
@ -203,7 +207,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
return newData; return newData;
} }
internal CompletionCategory GetCompletionCategory (IType type) internal CompletionCategory GetCompletionCategory (IType type)
{ {
if (type == null) if (type == null)
@ -212,7 +216,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
completionCategories [type] = new TypeCompletionCategory (type); completionCategories [type] = new TypeCompletionCategory (type);
return completionCategories [type]; return completionCategories [type];
} }
Dictionary<IType, CompletionCategory> completionCategories = new Dictionary<IType, CompletionCategory> (); Dictionary<IType, CompletionCategory> completionCategories = new Dictionary<IType, CompletionCategory> ();
class TypeCompletionCategory : CompletionCategory class TypeCompletionCategory : CompletionCategory
{ {
@ -231,10 +235,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var compareCategory = other as TypeCompletionCategory; var compareCategory = other as TypeCompletionCategory;
if (compareCategory == null) if (compareCategory == null)
return -1; return -1;
if (Type.ReflectionName == compareCategory.Type.ReflectionName) if (Type.ReflectionName == compareCategory.Type.ReflectionName)
return 0; return 0;
if (Type.GetAllBaseTypes ().Any (t => t.ReflectionName == compareCategory.Type.ReflectionName)) if (Type.GetAllBaseTypes ().Any (t => t.ReflectionName == compareCategory.Type.ReflectionName))
return -1; return -1;
return 1; return 1;
@ -254,8 +258,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
Result.Add(Factory.CreateEntityCompletionData( Result.Add(Factory.CreateEntityCompletionData(
field, field,
typeString + "." + field.Name typeString + "." + field.Name
) )
); );
} }
} }
} }

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

@ -1618,7 +1618,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
throw new NotSupportedException("Invalid value for NameLookupMode"); throw new NotSupportedException("Invalid value for NameLookupMode");
} }
if (result is UnknownMemberResolveResult) { if (result is UnknownMemberResolveResult) {
var extensionMethods = GetExtensionMethods(identifier, typeArguments); var extensionMethods = GetExtensionMethods(target.Type, identifier, typeArguments, true);
if (extensionMethods.Count > 0) { if (extensionMethods.Count > 0) {
return new MethodGroupResolveResult(target, identifier, EmptyList<MethodListWithDeclaringType>.Instance, typeArguments) { return new MethodGroupResolveResult(target, identifier, EmptyList<MethodListWithDeclaringType>.Instance, typeArguments) {
extensionMethods = extensionMethods extensionMethods = extensionMethods

2
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

@ -592,7 +592,7 @@ class TestClass
} }
}"); }");
Assert.IsNotNull (provider, "provider was not created."); Assert.IsNotNull (provider, "provider was not created.");
Assert.AreEqual (6, provider.Count); Assert.IsTrue (provider.Count > 0);
} }
[Test()] [Test()]

21
ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs

@ -1175,15 +1175,16 @@ namespace ICSharpCode.NRefactory.TypeSystem
public KeyValuePair<IMember, ResolveResult> ReadNamedArg(IType attributeType) public KeyValuePair<IMember, ResolveResult> ReadNamedArg(IType attributeType)
{ {
EntityType memberType; EntityType memberType;
switch (ReadByte()) { var b = ReadByte();
case 0x53: switch (b) {
memberType = EntityType.Field; case 0x53:
break; memberType = EntityType.Field;
case 0x54: break;
memberType = EntityType.Property; case 0x54:
break; memberType = EntityType.Property;
default: break;
throw new NotSupportedException(); default:
throw new NotSupportedException(string.Format("Custom member type 0x{0:x} is not supported.", b));
} }
IType type = ReadCustomAttributeFieldOrPropType(); IType type = ReadCustomAttributeFieldOrPropType();
string name = ReadSerString(); string name = ReadSerString();
@ -1196,7 +1197,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
} }
return new KeyValuePair<IMember, ResolveResult>(member, val); return new KeyValuePair<IMember, ResolveResult>(member, val);
} }
IType ReadCustomAttributeFieldOrPropType() IType ReadCustomAttributeFieldOrPropType()
{ {
ICompilation compilation = currentResolvedAssembly.Compilation; ICompilation compilation = currentResolvedAssembly.Compilation;

Loading…
Cancel
Save