Wiki
Show
Ignore:
Timestamp:
12/30/08 09:14:09 (3 years ago)
Author:
Chuck.Esterbrook
Message:

Added extensions on generic types like List<of T> and IDictionary<of K, V>.
ticket:1

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • cobra/trunk/Source/BackEndClr/SharpGenerator.cobra

    r1849 r1853  
    973973        return sharp 
    974974 
     975    def extendedMethodGenericParams(genericParams as IList<of IType>) as IList<of IType> 
     976        """ 
     977        This is a hook for Extension and Method which have to deal with extensions on generic classes. 
     978        """ 
     979        ensure 
     980            old genericParams == genericParams 
     981            result.count >= genericParams.count 
     982        body 
     983            return genericParams 
     984 
    975985    def writeSharpDef(sw as SharpWriter) 
    976986        base.writeSharpDef(sw) 
     
    12751285    is partial 
    12761286 
     1287    get _computeSharpRef as String is override 
     1288        sharp = .sharpName 
     1289        if .parentNameSpace and not .parentNameSpace.isRoot 
     1290            sharp = .parentNameSpace.sharpQualifier + sharp 
     1291        else if .parentBox 
     1292            sharp = .parentBox.sharpRef + '.' + sharp 
     1293        return sharp 
     1294 
    12771295    get sharpInit as String is override 
    12781296        return _extendedBox.sharpInit 
     
    12851303 
    12861304    var _backEndName as String? 
    1287      
     1305 
    12881306    get sharpName as String is override 
    12891307        if not _backEndName 
     
    12931311    get sharpThis as String is override 
    12941312        return '_lh_this' 
     1313 
     1314    def extendedMethodGenericParams(genericParams as IList<of IType>) as IList<of IType> is override 
     1315        if .isGeneric 
     1316            # the generated static C# method will need the generic params of the extension on it 
     1317            # since C# itself doesn't have "extension types", only extension methods 
     1318            r = List<of IType>(.genericParams) 
     1319            r.addRange(genericParams) 
     1320            return r 
     1321        else 
     1322            return base.extendedMethodGenericParams(genericParams) 
    12951323 
    12961324    def writeSharpDefName(sw as SharpWriter) is override 
     
    17801808 
    17811809    get sharpGenericParams as String is override 
    1782         if _genericParams.count 
     1810        params = .parentBox.extendedMethodGenericParams(_genericParams) 
     1811        if params.count 
    17831812            sb = StringBuilder() 
    17841813            sb.append('<') 
    17851814            sep = '' 
    1786             for param in _genericParams 
     1815            for param in params 
    17871816                sb.append(sep) 
    17881817                sb.append(param.sharpName)