internal List <MethodBase> GetInterfaceImplementations(MethodBase methodBase) { var declaringType = DegenerifyType(methodBase.DeclaringType); var method = DegenerifyMethod(methodBase); if (!_interfaceToImplementationMap.ContainsKey(declaringType)) { return(new List <MethodBase>()); } if (!_interfaceToImplementationMap[declaringType].ContainsKey(method)) { return(new List <MethodBase>()); } return(_interfaceToImplementationMap[declaringType][method]); }
internal bool HasMethodBeenSeen(MethodBase methodBase, Action <Type> callback) { var method = DegenerifyMethod(methodBase); var declaringType = DegenerifyType(methodBase.DeclaringType); if (!IsMethodWeShouldTrack(method)) { if (!_methodsWeShouldntTrack.ContainsKey(method)) { _methodsWeShouldntTrack.Add(method, true); return(false); } else { return(true); } } // have we already looked at this method before if (_graph[declaringType].ContainsKey(method)) { if (_graph[declaringType][method]) { return(true); } _graph[declaringType][method] = true; } UnusedMethods[declaringType].Remove(method); return(false); }
internal bool MarkTypeSeen(Type type, Action <Type> callback) { var degenericedType = DegenerifyType(type); if (_unusedClasses.ContainsKey(degenericedType)) { _unusedClasses.Remove(degenericedType); callback?.Invoke(degenericedType); return(true); } return(false); }
internal bool IsMethodWeShouldTrack(MethodBase methodBase) { if (methodBase.DeclaringType == null) { return(false); } if (!_graph.ContainsKey(DegenerifyType(methodBase.DeclaringType))) { return(false); } return(true); }