jobjectArray createLinksInfos()

in src/roots/paths_to_closest_gc_roots.cpp [37:65]


    jobjectArray createLinksInfos(JNIEnv *env, jvmtiEnv *jvmti,
                                  const std::unordered_map<jlong, jint> &tagToIndex,
                                  const std::vector<ReferenceInfo *> &infos) {
        std::vector<jint> prevIndices;
        std::vector<jint> refKinds;
        std::vector<jobject> refInfos;

        size_t size = infos.size();
        prevIndices.reserve(size);
        refInfos.reserve(size);
        refKinds.reserve(size);
        for (ReferenceInfo *info : infos) {
            jlong prevTag = info->getTag();
            auto it = tagToIndex.find(prevTag);
            if (prevTag != -1 && it == tagToIndex.end()) {
                continue;
            }
            prevIndices.push_back(prevTag == -1 ? -1 : it->second);
            refKinds.push_back(static_cast<jint>(info->getKind()));
            refInfos.push_back(info->getReferenceInfo(env, jvmti));
        }

        jobjectArray result = env->NewObjectArray(4, env->FindClass("java/lang/Object"), nullptr);
        env->SetObjectArrayElement(result, 0, toJavaArray(env, prevIndices));
        env->SetObjectArrayElement(result, 1, toJavaArray(env, refKinds));
        env->SetObjectArrayElement(result, 2, toJavaArray(env, refInfos));

        return result;
    }