Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs')
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs43
1 files changed, 25 insertions, 18 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs
index 48824db647..5bd95f10eb 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Extensions/ItemTypeCondition.cs
@@ -34,7 +34,7 @@ namespace MonoDevelop.Projects.Extensions
public class ItemTypeCondition: ConditionType
{
Type objType;
- List<string> typeNames;
+ HashSet<string> typeNames;
IDictionary<string,string> aliases;
public ItemTypeCondition ()
@@ -87,7 +87,7 @@ namespace MonoDevelop.Projects.Extensions
aliases [alias] = fullName;
}
- bool MatchesType (string type)
+ protected bool MatchesType (string type)
{
if (type.IndexOf ('.') == -1) {
string res;
@@ -106,29 +106,36 @@ namespace MonoDevelop.Projects.Extensions
// use of the condition.
if (typeNames == null) {
- typeNames = new List<string> ();
-
- typeNames.Add (objType.FullName);
- typeNames.Add (objType.AssemblyQualifiedName);
+ typeNames = new HashSet<string> ();
+
+ foreach (var t in GetObjectTypes ()) {
+ typeNames.Add (t.FullName);
+ typeNames.Add (t.AssemblyQualifiedName);
- // base class hierarchy
+ // base class hierarchy
- Type baseType = objType.BaseType;
- while (baseType != null) {
- typeNames.Add (baseType.FullName);
- typeNames.Add (baseType.AssemblyQualifiedName);
- baseType = baseType.BaseType;
- }
+ Type baseType = t.BaseType;
+ while (baseType != null) {
+ typeNames.Add (baseType.FullName);
+ typeNames.Add (baseType.AssemblyQualifiedName);
+ baseType = baseType.BaseType;
+ }
- // Implemented interfaces
+ // Implemented interfaces
- Type[] interfaces = objType.GetInterfaces();
- foreach (Type itype in interfaces) {
- typeNames.Add (itype.FullName);
- typeNames.Add (itype.AssemblyQualifiedName);
+ Type[] interfaces = t.GetInterfaces ();
+ foreach (Type itype in interfaces) {
+ typeNames.Add (itype.FullName);
+ typeNames.Add (itype.AssemblyQualifiedName);
+ }
}
}
return typeNames.Contains (type);
}
+
+ protected virtual IEnumerable<Type> GetObjectTypes ()
+ {
+ yield return objType;
+ }
}
}