Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/20/12 17:07:13 (12 years ago)
Author:
mkommend
Message:

#1774: Improved performance of type discovery for generic types.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs

    r7259 r7492  
    126126        var assemblyTypes = assembly.GetTypes();
    127127
    128         var buildTypes = from t in assemblyTypes
     128        var buildTypes = from t in assembly.GetTypes()
    129129                         where !IsNonDiscoverableType(t)
     130                         where onlyInstantiable == false ||
     131                               (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
    130132                         where CheckTypeCompatibility(type, t)
    131                          where onlyInstantiable == false || (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
    132133                         select BuildType(t, type);
    133134
     
    152153        return true;
    153154      if (type.IsGenericType && other.IsGenericType) {
     155        var otherGenericArguments = other.GetGenericArguments();
     156        var typeGenericArguments = type.GetGenericArguments();
     157
     158        //check type arguments count
     159        if (otherGenericArguments.Length != typeGenericArguments.Length)
     160          return false;
     161
     162        //check type arguments & constraints
     163        int i = 0;
     164        foreach (var genericArgument in typeGenericArguments) {
     165          if (otherGenericArguments[i].IsGenericParameter) {
     166            foreach (var constraint in otherGenericArguments[i].GetGenericParameterConstraints())
     167              if (!constraint.IsAssignableFrom(genericArgument)) return false;
     168          } else if (genericArgument != otherGenericArguments[i]) return false;
     169          i++;
     170        }
     171        //check types
    154172        try {
    155           if (type.IsAssignableFrom(other.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArguments())))
     173          var otherGenericTypeDefinition = other.GetGenericTypeDefinition();
     174          if (type.IsAssignableFrom(otherGenericTypeDefinition.MakeGenericType(typeGenericArguments)))
    156175            return true;
    157176        }
Note: See TracChangeset for help on using the changeset viewer.