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

de.fraunhofer.aisec.cpg.InferenceConfiguration.kt Maven / Gradle / Ivy

Go to download

A simple library to extract a code property graph out of source code. It has support for multiple passes that can extend the analysis after the graph is constructed.

There is a newer version: 8.3.0
Show newest version
/*
 * Copyright (c) 2021, Fraunhofer AISEC. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *                    $$$$$$\  $$$$$$$\   $$$$$$\
 *                   $$  __$$\ $$  __$$\ $$  __$$\
 *                   $$ /  \__|$$ |  $$ |$$ /  \__|
 *                   $$ |      $$$$$$$  |$$ |$$$$\
 *                   $$ |      $$  ____/ $$ |\_$$ |
 *                   $$ |  $$\ $$ |      $$ |  $$ |
 *                   \$$$$$   |$$ |      \$$$$$   |
 *                    \______/ \__|       \______/
 *
 */
package de.fraunhofer.aisec.cpg

import org.apache.commons.lang3.builder.ToStringBuilder
import org.apache.commons.lang3.builder.ToStringStyle

/**
 * This class holds configuration options for the inference of certain constructs and auto-guessing
 * when executing language frontends.
 */
class InferenceConfiguration
private constructor(
    /** Enables smart guessing of cast vs. call expressions in the C/C++ language frontend */
    val guessCastExpressions: Boolean,

    /** Enables the inference of record declarations */
    val inferRecords: Boolean,
    /**
     * Uses heuristics to add DFG edges for call expressions to unresolved functions (i.e.,
     * functions not implemented in the given source code).
     */
    val inferDfgForUnresolvedSymbols: Boolean
) {
    class Builder(
        var guessCastExpressions: Boolean = false,
        var inferRecords: Boolean = false,
        var inferDfgForUnresolvedCalls: Boolean = true
    ) {
        fun guessCastExpressions(guess: Boolean) = apply { this.guessCastExpressions = guess }

        fun inferRecords(infer: Boolean) = apply { this.inferRecords = infer }

        fun inferDfgForUnresolvedCalls(infer: Boolean) = apply {
            this.inferDfgForUnresolvedCalls = infer
        }

        fun build() =
            InferenceConfiguration(guessCastExpressions, inferRecords, inferDfgForUnresolvedCalls)
    }

    companion object {
        @JvmStatic
        fun builder(): Builder {
            return Builder()
        }
    }

    override fun toString(): String {
        return ToStringBuilder(this, ToStringStyle.JSON_STYLE)
            .append("guessCastExpressions", guessCastExpressions)
            .append("inferRecords", inferRecords)
            .append("inferDfgForUnresolvedCalls", inferDfgForUnresolvedSymbols)
            .toString()
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy