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

org.jetbrains.kotlin.statistics.metrics.MetricPolicies.kt Maven / Gradle / Ivy

There is a newer version: 2.0.20-Beta1
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.statistics.metrics

import org.jetbrains.kotlin.statistics.ValueAnonymizer
import org.jetbrains.kotlin.statistics.anonymizeComponentVersion
import org.jetbrains.kotlin.statistics.sha256


enum class StringOverridePolicy: IMetricContainerFactory {
    OVERRIDE {
        override fun newMetricContainer(): IMetricContainer = OverrideMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = OverrideMetricContainer(state)
    },
    OVERRIDE_VERSION_IF_NOT_SET {
        override fun newMetricContainer(): IMetricContainer = OverrideVersionMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = OverrideVersionMetricContainer(state)
    },
    CONCAT {
        override fun newMetricContainer(): IMetricContainer = ConcatMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = ConcatMetricContainer(state.split(ConcatMetricContainer.SEPARATOR))
    }

    //Should be useful counting container?
}

private fun applyIfLong(v: String, action: (Long) -> IMetricContainer) : IMetricContainer? {
    val longVal = v.toLongOrNull()
    return if (longVal == null) {
        null
    } else {
        action(longVal)
    }
}

enum class NumberOverridePolicy: IMetricContainerFactory {
    OVERRIDE {
        override fun newMetricContainer(): IMetricContainer = OverrideMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = applyIfLong(state) {
            OverrideMetricContainer(it)
        }
    },
    SUM {
        override fun newMetricContainer(): IMetricContainer = SumMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = applyIfLong(state) {
            SumMetricContainer(it)
        }
    },
    AVERAGE {
        override fun newMetricContainer(): IMetricContainer = AverageMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = applyIfLong(state) {
            AverageMetricContainer(it)
        }
    }
}

enum class BooleanOverridePolicy: IMetricContainerFactory {
    OVERRIDE {
        override fun newMetricContainer(): IMetricContainer = OverrideMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = OverrideMetricContainer(state.toBoolean())
    },
    OR {
        override fun newMetricContainer(): IMetricContainer = OrMetricContainer()

        override fun fromStringRepresentation(state: String): IMetricContainer? = OrMetricContainer(state.toBoolean())
    }

    // may be add disctribution counter metric container
}

enum class BooleanAnonymizationPolicy : ValueAnonymizer {
    SAFE {
        override fun anonymize(t: Boolean) = t
    }
}

enum class StringAnonymizationPolicy : ValueAnonymizer {
    SAFE {
        override fun anonymize(t: String) = t
    },
    ANONYMIZE_IN_IDE {
        override fun anonymize(t: String) = t
        override fun anonymizeOnIdeSize() = true
    },
    SHA_256 {
        override fun anonymize(t: String) = sha256(t)
    },
    COMPONENT_VERSION {
        override fun anonymize(t: String) = anonymizeComponentVersion(t)
    }
}

enum class NumberAnonymizationPolicy : ValueAnonymizer {
    SAFE {
        override fun anonymize(t: Long) = t
    },
    RANDOM_10_PERCENT {
        override fun anonymize(t: Long) = (t + t * 0.1 * Math.random()).toLong()
    },
    RANDOM_01_PERCENT {
        override fun anonymize(t: Long) = (t + t * 0.01 * Math.random()).toLong()
    }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy