public void DeriveConcreteMethodTypes(HashSet <MethodType> sharedMethodTypes) { sharedMethodTypes.Clear(); var removedMethodTypes = sharedMethodTypes; removedMethodTypes.UnionWith(this.concreteMethodTypeByMethodType.Keys); foreach (var methodType in this.MethodTypes) { removedMethodTypes.Remove(methodType); ConcreteMethodType concreteMethodType; if (!this.concreteMethodTypeByMethodType.TryGetValue(methodType, out concreteMethodType)) { concreteMethodType = new ConcreteMethodType(this, methodType); this.concreteMethodTypeByMethodType[methodType] = concreteMethodType; } } foreach (var methodType in removedMethodTypes) { this.concreteMethodTypeByMethodType.Remove(methodType); } this.concreteMethodTypes = this.concreteMethodTypeByMethodType.Values.ToArray(); }
public MethodInvocation(Class @class, MethodType methodType) { this.concreteMethodType = @class.ConcreteMethodTypeByMethodType[methodType]; }
public void DeriveConcreteMethodTypes(HashSet<MethodType> sharedMethodTypes) { sharedMethodTypes.Clear(); var removedMethodTypes = sharedMethodTypes; removedMethodTypes.UnionWith(this.concreteMethodTypeByMethodType.Keys); foreach (var methodType in this.MethodTypes) { removedMethodTypes.Remove(methodType); ConcreteMethodType concreteMethodType; if (!this.concreteMethodTypeByMethodType.TryGetValue(methodType, out concreteMethodType)) { concreteMethodType = new ConcreteMethodType(this, methodType); this.concreteMethodTypeByMethodType[methodType] = concreteMethodType; } } foreach (var methodType in removedMethodTypes) { this.concreteMethodTypeByMethodType.Remove(methodType); } this.concreteMethodTypes = this.concreteMethodTypeByMethodType.Values.ToArray(); }