All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlin.fir.visitors.FirTransformerUtil.kt Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
/*
 * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
 */

package org.jetbrains.kotlin.fir.visitors

import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement

fun  T.transformSingle(transformer: FirTransformer, data: D): T {
    return (this as FirPureAbstractElement).transform(transformer, data).single
}

fun  MutableList.transformInplace(transformer: FirTransformer, data: D) {
    val iterator = this.listIterator()
    while (iterator.hasNext()) {
        val next = iterator.next() as FirPureAbstractElement
        val result = next.transform(transformer, data)
        if (result.isSingle) {
            iterator.set(result.single)
        } else {
            val resultIterator = result.list.listIterator()
            if (!resultIterator.hasNext()) {
                iterator.remove()
            } else {
                iterator.set(resultIterator.next())
            }
            while (resultIterator.hasNext()) {
                iterator.add(resultIterator.next())
            }
        }

    }
}

sealed class TransformData {
    class Data(val value: D) : TransformData()
    object Nothing : TransformData()
}

inline fun  MutableList.transformInplace(transformer: FirTransformer, dataProducer: (Int) -> TransformData) {
    val iterator = this.listIterator()
    var index = 0
    while (iterator.hasNext()) {
        val next = iterator.next() as FirPureAbstractElement
        val data = when (val data = dataProducer(index++)) {
            is TransformData.Data -> data.value
            TransformData.Nothing -> continue
        }
        val result = next.transform(transformer, data).single
        iterator.set(result)
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy