internal async Task<ISet<TypeDescriptor>> GetPotentialTypesAsync(PropGraphNodeDescriptor n, PropagationGraph propGraph, ICodeProvider codeProvider) { var result = new HashSet<TypeDescriptor>(); foreach (var typeDescriptor in propGraph.GetTypes(n)) { // TO-DO fix by adding a where T: AnalysisType if (typeDescriptor.IsConcreteType) { result.Add(typeDescriptor); } else { Contract.Assert(this.InstatiatedTypes != null); foreach(var candidateType in this.InstatiatedTypes) { var isSubtype = await codeProvider.IsSubtypeAsync(candidateType, typeDescriptor); if(isSubtype) { result.Add(candidateType); } } } } return result; }