public Set<InferenceVariable> getDependencies(InferenceSession session) { final Set<InferenceVariable> dependencies = new LinkedHashSet<InferenceVariable>(); for (List<PsiType> boundTypes : myBounds.values()) { if (boundTypes != null) { for (PsiType bound : boundTypes) { session.collectDependencies(bound, dependencies); } } } if (!session.hasCapture(this) && dependencies.isEmpty()) { return dependencies; } if (!session.hasCapture(this)) { return dependencies; } for (Iterator<InferenceVariable> iterator = dependencies.iterator(); iterator.hasNext(); ) { if (!session.hasCapture(iterator.next())) { iterator.remove(); } } session.collectCaptureDependencies(this, dependencies); return dependencies; }
protected void collectAllVariablesOnBothSides( Set<InferenceVariable> dependencies, Pair<PsiTypeParameter[], PsiClassType> capture) { mySession.collectDependencies(capture.second, dependencies); for (PsiTypeParameter psiTypeParameter : capture.first) { final InferenceVariable var = mySession.getInferenceVariable(psiTypeParameter); if (var != null) { dependencies.add(var); } } }