Exemplo n.º 1
0
 private void ProcessInterfaces(VirtualsDictionary virtuals, TypeReference typeRef)
 {
     var typeDef = typeRef.Resolve();
     foreach (TypeReference iface in typeDef.Interfaces) {
         var ifaceDef = iface.Resolve();
         var ifaceSet = GetSubclasses(ifaceDef);
         ifaceSet.Add(typeDef);
         ProcessMethodOverrides(virtuals, iface);
     }
 }
Exemplo n.º 2
0
 private void ProcessMethodOverrides(VirtualsDictionary virtuals, TypeReference baseRef)
 {
     if (virtuals.Count > 0) {
         var baseDef = baseRef.Resolve();
         foreach (MethodDefinition baseMethod in baseDef.Methods) {
             if (baseMethod.IsVirtual) {
                 var overridenMethod = virtuals.FindMethodBySignature(baseRef, baseMethod);
                 if (overridenMethod != null) {
                     var overrides = GetOverridesForVirtualMethod(baseMethod);
                     overrides.Add(overridenMethod);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
        public void ProcessType(TypeDefinition typeDef)
        {
            var virtuals = new VirtualsDictionary();
            virtuals.CollectVirtualMethods(typeDef);

            var baseType = typeDef.BaseType;
            while (baseType != null) {
                var baseSet = GetSubclasses(baseType);
                baseSet.Add(typeDef);

                ProcessMethodOverrides(virtuals, baseType);

                ProcessInterfaces(virtuals, baseType);

                var baseDef = baseType.Resolve();
                baseType = baseDef.BaseType;
            }

            ProcessInterfaces(virtuals, typeDef);

            foreach (var nestedType in typeDef.NestedTypes) {
                ProcessType(nestedType);
            }
        }