Example usage for org.antlr.v4.runtime.misc MultiMap MultiMap

List of usage examples for org.antlr.v4.runtime.misc MultiMap MultiMap

Introduction

In this page you can find the example usage for org.antlr.v4.runtime.misc MultiMap MultiMap.

Prototype

MultiMap

Source Link

Usage

From source file:com.github.drrb.rust.netbeans.structure.RustStructureScanner.java

License:Open Source License

@Override
public Map<String, List<OffsetRange>> folds(ParserResult info) {
    MultiMap<String, OffsetRange> folds = new MultiMap<>();

    NetbeansRustParserResult parseResult = (NetbeansRustParserResult) info;
    RustSourceIndex index = parseResult.getIndex();

    List<RustFunction> functions = index.getFunctions();
    for (RustFunction function : functions) {
        //TODO: this raises a NPE when typing a function. Insert millions of null checks?
        folds.map(CODEBLOCKS_FOLD_TYPE, function.getBody().getOffsetRange());
    }//ww  w  . j a  v  a  2s . c o  m

    List<RustStruct> structs = index.getStructs();
    for (RustStruct struct : structs) {
        folds.map(CODEBLOCKS_FOLD_TYPE, struct.getBody().getOffsetRange());
    }

    List<RustEnum> enums = index.getEnums();
    for (RustEnum rustEnum : enums) {
        folds.map(CODEBLOCKS_FOLD_TYPE, rustEnum.getBody().getOffsetRange());
    }

    List<RustImpl> impls = index.getImpls();
    for (RustImpl impl : impls) {
        folds.map(CODEBLOCKS_FOLD_TYPE, impl.getBody().getOffsetRange());
        List<RustImplMethod> implMethods = impl.getBody().getMethods();
        for (RustImplMethod implMethod : implMethods) {
            folds.map(CODEBLOCKS_FOLD_TYPE, implMethod.getBody().getOffsetRange());
        }
    }

    List<RustTrait> traits = index.getTraits();
    for (RustTrait trait : traits) {
        folds.map(CODEBLOCKS_FOLD_TYPE, trait.getBody().getOffsetRange());
    }

    List<RustTraitImpl> traitImpls = index.getTraitImpls();
    for (RustTraitImpl traitImpl : traitImpls) {
        folds.map(CODEBLOCKS_FOLD_TYPE, traitImpl.getBody().getOffsetRange());
        List<RustImplMethod> traitImplMethods = traitImpl.getBody().getMethods();
        for (RustImplMethod traitImplMethod : traitImplMethods) {
            folds.map(CODEBLOCKS_FOLD_TYPE, traitImplMethod.getBody().getOffsetRange());
        }
    }

    List<RustDocComment> rustdocs = index.getDocComments();
    for (RustDocComment docComment : rustdocs) {
        if (docComment.getText().contains("\n")) { //Don't fold single line comments
            folds.map(DOC_COMMENTS_FOLD_TYPE, docComment.getOffsetRange());
        }
    }

    return folds;
}