package org.elmlang.intellijplugin.psi.scope; import com.intellij.psi.PsiElement; import org.elmlang.intellijplugin.psi.*; import java.util.*; import java.util.stream.Stream; public class ElmScope { public static Stream<Optional<ElmLowerCaseId>> scopeFor(ElmLowerCaseId elem) { return provideValuesFor(elem.getParent()); } public static Stream<Optional<ElmLowerCaseId>> scopeFor(ElmFile file) { return provideValuesFor(file); } public static Stream<Optional<ElmLowerCaseId>> recordFieldsFor(ElmFile file) { ElmRecordFieldsProvider p = new ElmRecordFieldsProvider(file); return Stream.generate(p::nextField); } public static Stream<Optional<ElmUpperCaseId>> typesFor(ElmFile file) { ElmTypesProvider p = new ElmTypesProvider(file); return Stream.generate(p::nextType); } private static Stream<Optional<ElmLowerCaseId>> provideValuesFor(PsiElement element) { ElmValuesProvider p = new ElmValuesProvider(element); return Stream.generate(p::nextId); } }