Compare commits

..

3 Commits

Author SHA1 Message Date
Sotiris Dragonas
4ab58a57fc Merge branch 'main' into bazookamusic/avro-updated 2026-06-29 10:29:57 +03:00
Sotiris Dragonas
93a26cb6c0 mark the ai-generated models with the correct provenance (they were manual because they were used as a baseline in the mads-llm project 2026-06-19 13:10:55 +03:00
Sotiris Dragonas
554576c031 updated avro models 2026-06-19 13:05:16 +03:00
44 changed files with 1732 additions and 1267 deletions

View File

@@ -28,6 +28,7 @@
/swift/extractor/ @github/codeql-swift @github/code-scanning-language-coverage
/misc/codegen/ @github/codeql-swift
/java/kotlin-extractor/ @github/codeql-kotlin @github/code-scanning-language-coverage
/java/ql/test-kotlin1/ @github/codeql-kotlin
/java/ql/test-kotlin2/ @github/codeql-kotlin
# Experimental CodeQL cryptography

View File

@@ -75,9 +75,6 @@ def get_version():
def install(version: str, quiet: bool):
if install_dir.exists():
return
if quiet:
info_out = subprocess.DEVNULL
info = lambda *args: None
@@ -86,6 +83,8 @@ def install(version: str, quiet: bool):
info = lambda *args: print(*args, file=sys.stderr)
file = file_template.format(version=version)
url = url_template.format(version=version)
if install_dir.exists():
shutil.rmtree(install_dir)
install_dir.mkdir()
zips_dir.mkdir(exist_ok=True)
zip = zips_dir / file
@@ -157,11 +156,8 @@ def main(opts, forwarded_opts):
selected_version = current_version or DEFAULT_VERSION
if selected_version != current_version:
# don't print information about install procedure unless explicitly using --select
if install_dir.exists():
shutil.rmtree(install_dir)
install(selected_version, quiet=opts.select is None)
version_file.write_text(selected_version)
# don't print information about install procedure unless explicitly using --select
install(selected_version, quiet=opts.select is None)
if opts.select and not forwarded_opts and not opts.version:
print(f"selected {selected_version}")
return

View File

@@ -6,8 +6,6 @@ import com.github.codeql.utils.*
import com.github.codeql.utils.versions.*
import com.semmle.extractor.java.OdasaOutput
import java.io.Closeable
import java.nio.file.Files
import java.nio.file.Path
import java.util.*
import kotlin.collections.ArrayList
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
@@ -52,7 +50,6 @@ import org.jetbrains.kotlin.load.java.structure.JavaMethod
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameterListOwner
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass
import org.jetbrains.kotlin.fir.java.VirtualFileBasedSourceElement
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.util.OperatorNameConventions
@@ -164,100 +161,23 @@ open class KotlinFileExtractor(
}
}
private fun javaBinaryDeclaresMethod(c: IrClass, name: String): Boolean? {
// K1 path: source is JavaSourceElement wrapping a BinaryJavaClass - inspect class metadata
val binaryJavaClass = (c.source as? JavaSourceElement)?.javaElement as? BinaryJavaClass
if (binaryJavaClass != null) {
return binaryJavaClass.methods.any { it.name.asString() == name }
private fun javaBinaryDeclaresMethod(c: IrClass, name: String) =
((c.source as? JavaSourceElement)?.javaElement as? BinaryJavaClass)?.methods?.any {
it.name.asString() == name
}
// K2 path: binary Java classes use VirtualFileBasedSourceElement instead of
// JavaSourceElement. The BinaryJavaClass is not stored in the source element, so we parse
// the class bytes directly using ASM to check if the method is explicitly declared.
if (c.source is VirtualFileBasedSourceElement) {
val virtualFile = (c.source as VirtualFileBasedSourceElement).virtualFile
if (!virtualFile.name.endsWith(".class")) return null
return try {
val bytes = virtualFile.contentsToByteArray()
var found = false
var hasKotlinMetadata = false
val reader = org.jetbrains.org.objectweb.asm.ClassReader(bytes)
reader.accept(
object : org.jetbrains.org.objectweb.asm.ClassVisitor(
org.jetbrains.org.objectweb.asm.Opcodes.ASM9
) {
override fun visitAnnotation(
descriptor: String,
visible: Boolean
): org.jetbrains.org.objectweb.asm.AnnotationVisitor? {
if (descriptor == "Lkotlin/Metadata;") hasKotlinMetadata = true
return null
}
override fun visitMethod(
access: Int,
methodName: String,
descriptor: String,
signature: String?,
exceptions: Array<String>?
): org.jetbrains.org.objectweb.asm.MethodVisitor? {
if (methodName == name) found = true
return null
}
},
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_CODE or
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_DEBUG or
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_FRAMES
)
if (hasKotlinMetadata) false else found
} catch (e: Exception) {
logger.warn("Failed to check binary class methods for ${c.fqNameWhenAvailable}: $e")
null
}
}
return null
}
private fun isJavaBinaryDeclaration(f: IrFunction) =
f.parentClassOrNull?.let { javaBinaryDeclaresMethod(it, f.name.asString()) } ?: false
private fun hasConcreteSiblingObjectMethod(f: IrFunction): Boolean {
val parentClass = f.parentClassOrNull ?: return false
return parentClass.declarations
.asSequence()
.filterIsInstance<IrFunction>()
.filter { sibling ->
sibling !== f &&
sibling.name == f.name &&
sibling.codeQlValueParameters.size == f.codeQlValueParameters.size
}
.any { sibling ->
val hasInvisibleFakeVisibility =
sibling.visibility.let {
it is DelegatedDescriptorVisibility && it.delegate == Visibilities.InvisibleFake
}
!sibling.isFakeOverride && !hasInvisibleFakeVisibility
}
}
private fun isJavaBinaryObjectMethodRedeclaration(d: IrDeclaration) =
when (d) {
is IrFunction ->
d.parentClassOrNull?.typeParameters?.isEmpty() == true &&
when (d.name.asString()) {
"toString" -> d.codeQlValueParameters.isEmpty()
"hashCode" -> d.codeQlValueParameters.isEmpty()
// Under K2 (language version 2.0+), the Object.equals(Object) parameter is
// typed as Any (non-nullable) rather than Any? (nullable). Accept both.
"equals" ->
d.codeQlValueParameters
.singleOrNull()
?.type
?.let { it.isNullableAny() || it.isAny() } ?: false
"equals" -> d.codeQlValueParameters.singleOrNull()?.type?.isNullableAny() ?: false
else -> false
} &&
!hasConcreteSiblingObjectMethod(d) &&
isJavaBinaryDeclaration(d)
} && isJavaBinaryDeclaration(d)
else -> false
}
@@ -1392,28 +1312,27 @@ open class KotlinFileExtractor(
): TypeResults {
with("value parameter", vp) {
val location = locOverride ?: getLocation(vp, classTypeArgsIncludingOuterClasses)
val parentFunction = vp.parent as? IrFunction
val javaCallable = parentFunction?.let { getJavaCallable(it) }
val maybeAlteredType =
parentFunction?.let {
(vp.parent as? IrFunction)?.let {
if (overridesCollectionsMethodWithAlteredParameterTypes(it))
eraseCollectionsMethodParameterType(vp.type, it.name.asString(), idx)
else if (
(parentFunction as? IrConstructor)?.parentClassOrNull?.kind ==
(vp.parent as? IrConstructor)?.parentClassOrNull?.kind ==
ClassKind.ANNOTATION_CLASS
)
kClassToJavaClass(vp.type)
else null
} ?: vp.type
val javaType = javaCallable?.let { jCallable -> getJavaValueParameterType(jCallable, idx) }
val addParameterWildcardsByDefault =
!getInnermostWildcardSupppressionAnnotation(vp) &&
!(javaCallable == null &&
parentFunction?.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB)
val javaType =
(vp.parent as? IrFunction)?.let {
getJavaCallable(it)?.let { jCallable ->
getJavaValueParameterType(jCallable, idx)
}
}
val typeWithWildcards =
addJavaLoweringWildcards(
maybeAlteredType,
addParameterWildcardsByDefault,
!getInnermostWildcardSupppressionAnnotation(vp),
javaType
)
val substitutedType =
@@ -1427,9 +1346,9 @@ open class KotlinFileExtractor(
vp.origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER ||
((vp.parent as? IrFunction)?.let { hasSynthesizedParameterNames(it) } ?: true)
val javaParameter =
when (javaCallable) {
is JavaConstructor -> javaCallable.valueParameters.getOrNull(idx)
is JavaMethod -> javaCallable.valueParameters.getOrNull(idx)
when (val callable = (vp.parent as? IrFunction)?.let { getJavaCallable(it) }) {
is JavaConstructor -> callable.valueParameters.getOrNull(idx)
is JavaMethod -> callable.valueParameters.getOrNull(idx)
else -> null
}
val extraAnnotations =
@@ -2955,45 +2874,6 @@ open class KotlinFileExtractor(
return v
}
private val sourceTextCache = mutableMapOf<String, String?>()
private fun getCurrentFileSourceText() =
sourceTextCache.getOrPut(filePath) {
runCatching { Files.readString(Path.of(filePath)) }.getOrNull()
}
private fun getVariableNameLocation(v: IrVariable): Label<DbLocation>? {
if (v.startOffset < 0 || v.endOffset < v.startOffset) return null
val source = getCurrentFileSourceText() ?: return null
if (v.startOffset >= source.length) return null
val name = v.name.asString()
if (name.isEmpty()) return null
val endExclusive = minOf(v.endOffset + 1, source.length)
val declarationText = source.substring(v.startOffset, endExclusive)
val nameOffsetInDeclaration = declarationText.indexOf(name)
if (nameOffsetInDeclaration < 0) return null
val nameStartOffset = v.startOffset + nameOffsetInDeclaration
val nameEndOffset = nameStartOffset + name.length - 1
return tw.getLocation(nameStartOffset, nameEndOffset)
}
private fun shouldUseVariableNameLocation(v: IrVariable): Boolean {
val initializer = v.initializer
return initializer is IrTypeOperatorCall && initializer.operator == IrTypeOperator.IMPLICIT_NOTNULL
}
private fun getVariableLocation(v: IrVariable): Label<DbLocation> {
if (shouldUseVariableNameLocation(v)) {
val nameLocation = getVariableNameLocation(v)
if (nameLocation != null) return nameLocation
}
return tw.getLocation(getVariableLocationProvider(v))
}
private fun extractVariable(
v: IrVariable,
callable: Label<out DbCallable>,
@@ -3002,7 +2882,7 @@ open class KotlinFileExtractor(
) {
with("variable", v) {
val stmtId = tw.getFreshIdLabel<DbLocalvariabledeclstmt>()
val locId = getVariableLocation(v)
val locId = tw.getLocation(getVariableLocationProvider(v))
tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable)
tw.writeHasLocation(stmtId, locId)
extractVariableExpr(v, callable, stmtId, 1, stmtId)
@@ -3020,7 +2900,7 @@ open class KotlinFileExtractor(
with("variable expr", v) {
val varId = useVariable(v)
val exprId = tw.getFreshIdLabel<DbLocalvariabledeclexpr>()
val locId = getVariableLocation(v)
val locId = tw.getLocation(getVariableLocationProvider(v))
val type = useType(v.type)
tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, exprId)
tw.writeLocalvarsKotlinType(varId, type.kotlinResult.id)
@@ -4186,28 +4066,6 @@ open class KotlinFileExtractor(
else -> false
}
private fun getCallResultType(c: IrCall, syntacticCallTarget: IrFunction): IrType {
if (syntacticCallTarget.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
return c.type
}
val primitiveInfo =
(c.type as? IrSimpleType)?.let { primitiveTypeMapping.getPrimitiveInfo(it) } ?: return c.type
val parentClass = syntacticCallTarget.parentClassOrNull ?: return c.type
val returnIsClassifier =
javaBinaryMethodReturnIsClassifierType(
parentClass,
getFunctionShortName(syntacticCallTarget).nameInDB,
syntacticCallTarget.codeQlValueParameters.size,
syntacticCallTarget is IrConstructor
)
return if (returnIsClassifier == true) {
primitiveInfo.javaClass.symbol.typeWith()
} else {
c.type
}
}
private fun isGenericArrayType(typeName: String) =
when (typeName) {
"Array" -> true
@@ -4253,7 +4111,7 @@ open class KotlinFileExtractor(
extractRawMethodAccess(
syntacticCallTarget,
c,
getCallResultType(c, syntacticCallTarget),
c.type,
callable,
parent,
idx,

View File

@@ -36,7 +36,6 @@ import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.load.java.sources.JavaSourceElement
import org.jetbrains.kotlin.load.java.structure.*
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass
import org.jetbrains.kotlin.load.java.typeEnhancement.hasEnhancedNullability
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.NameUtils
@@ -997,20 +996,7 @@ open class KotlinUsesExtractor(
)
return null
}
val fileClassId = extractFileClass(fqName)
// Under K2, external file class members sit directly under IrExternalPackageFragment
// rather than under their IrClass parent. In that case the file class entity won't
// get a location set through the normal extractClassSource path.
if (d is IrMemberWithContainerSource && tw.lm.externalFileClassLocationsExtracted.add(fqName)) {
val binaryPath =
getContainerSourceBinaryPath(d.containerSource)
?.let { normalizeExternalFileClassBinaryPath(it, fqName) }
if (binaryPath != null && shouldUseConcreteExternalFileClassLocation(binaryPath)) {
val fileId = tw.mkFileId(binaryPath, true)
tw.writeHasLocation(fileClassId, tw.getWholeFileLocation(fileId))
}
}
return fileClassId
return extractFileClass(fqName)
}
return useDeclarationParent(parent, canBeTopLevel, classTypeArguments, inReceiverContext)
}
@@ -1385,13 +1371,8 @@ open class KotlinUsesExtractor(
parentId: Label<out DbElement>,
classTypeArgsIncludingOuterClasses: List<IrTypeArgument>?,
maybeParameterList: List<IrValueParameter>? = null
): String {
val javaCallable = getJavaCallable(f)
val addParameterWildcardsByDefault =
!getInnermostWildcardSupppressionAnnotation(f) &&
!(javaCallable == null && f.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB)
return getFunctionLabel(
): String =
getFunctionLabel(
f.parent,
parentId,
getFunctionShortName(f).nameInDB,
@@ -1401,10 +1382,9 @@ open class KotlinUsesExtractor(
getFunctionTypeParameters(f),
classTypeArgsIncludingOuterClasses,
overridesCollectionsMethodWithAlteredParameterTypes(f),
javaCallable,
addParameterWildcardsByDefault
getJavaCallable(f),
!getInnermostWildcardSupppressionAnnotation(f)
)
}
/*
* This function actually generates the label for a function.
@@ -1491,41 +1471,15 @@ open class KotlinUsesExtractor(
// Finally, mimic the Java extractor's behaviour by naming functions with type
// parameters for their erased types;
// those without type parameters are named for the generic type.
var maybeErased =
val maybeErased =
if (functionTypeParameters.isEmpty()) maybeSubbed else erase(maybeSubbed)
// K2 compatibility: under K2, Java @NotNull reference types such as @NotNull Integer
// are enhanced to Kotlin primitives (e.g. kotlin.Int). But the Java extractor uses
// the original reference type (java.lang.Integer) in callable labels. When we detect
// that the original Java parameter type is a reference (classifier) type but the
// Kotlin IR type is a primitive, revert to the boxed Java class so both extractors
// produce matching callable IDs.
if (functionTypeParameters.isEmpty()) {
val primitiveInfo = (maybeErased as? IrSimpleType)?.let {
primitiveTypeMapping.getPrimitiveInfo(it)
}
if (primitiveInfo != null) {
val parentClass = parent as? IrClass
if (parentClass != null) {
val isClassifierType = javaBinaryMethodParamIsClassifierType(
parentClass,
name,
allParamTypes.size,
name == "<init>",
it.index
)
if (isClassifierType == true) {
maybeErased = primitiveInfo.javaClass.symbol.typeWith()
}
}
}
}
"{${useType(maybeErased).javaResult.id}}"
}
val paramTypeIds =
allParamTypes
.withIndex()
.joinToString(separator = ",", transform = getIdForFunctionLabel)
var labelReturnType =
val labelReturnType =
if (name == "<init>") pluginContext.irBuiltIns.unitType
else
erase(
@@ -1535,28 +1489,6 @@ open class KotlinUsesExtractor(
pluginContext
)
)
// K2 compatibility: same as for parameters, if the Java binary method return type is a
// reference type but K2 enhanced it to a Kotlin primitive, use the boxed Java class.
if (functionTypeParameters.isEmpty() && name != "<init>") {
val primitiveInfo = (labelReturnType as? IrSimpleType)?.let {
primitiveTypeMapping.getPrimitiveInfo(it)
}
if (primitiveInfo != null) {
val parentClass = parent as? IrClass
if (parentClass != null) {
val returnIsClassifier =
javaBinaryMethodReturnIsClassifierType(
parentClass,
name,
allParamTypes.size,
false
)
if (returnIsClassifier == true) {
labelReturnType = primitiveInfo.javaClass.symbol.typeWith()
}
}
}
}
// Note that `addJavaLoweringWildcards` is not required here because the return type used to
// form the function
// label is always erased.
@@ -1662,23 +1594,9 @@ open class KotlinUsesExtractor(
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
fun getJavaCallable(f: IrFunction): JavaMember? {
val fromDescriptor = (f.descriptor.source as? JavaSourceElement)?.javaElement as? JavaMember
if (fromDescriptor != null) return fromDescriptor
fun getJavaCallable(f: IrFunction) =
(f.descriptor.source as? JavaSourceElement)?.javaElement as? JavaMember
// K2 fallback: under K2, descriptor.source may not carry JavaSourceElement for binary Java
// methods. Try to get the JavaMember from the parent class's binary class directly.
val parentClass = f.parentClassOrNull ?: return null
val binaryJavaClass = (parentClass.source as? JavaSourceElement)?.javaElement as? BinaryJavaClass
?: return null
val name = getFunctionShortName(f).nameInDB
val nParams = f.codeQlValueParameters.size
return if (f is IrConstructor) {
binaryJavaClass.constructors.find { it.valueParameters.size == nParams }
} else {
binaryJavaClass.methods.find { it.name.asString() == name && it.valueParameters.size == nParams }
}
}
fun getJavaValueParameterType(m: JavaMember, idx: Int) =
when (m) {
is JavaMethod -> m.valueParameters[idx].type

View File

@@ -51,13 +51,6 @@ class TrapLabelManager {
* to avoid duplication.
*/
val fileClassLocationsExtracted = HashSet<IrFile>()
/**
* Tracks external file classes (by FqName) whose location has been set from a binary path.
* Used to avoid writing duplicate hasLocation facts for external file class entities extracted
* through the K2 code path where declarations sit directly under IrExternalPackageFragment.
*/
val externalFileClassLocationsExtracted = HashSet<org.jetbrains.kotlin.name.FqName>()
}
/**

View File

@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClass
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
// Adapted from Kotlin's interpreter/Utils.kt function 'internalName'
// Translates class names into their JLS section 13.1 binary name,
@@ -177,238 +176,15 @@ fun getIrDeclarationBinaryPath(d: IrDeclaration): String? {
// This is in a file class.
val fqName = getFileClassFqName(d)
if (fqName != null) {
if (d is IrMemberWithContainerSource) {
val containerBinaryPath = getContainerSourceBinaryPath(d.containerSource)
if (containerBinaryPath != null) {
return normalizeExternalFileClassBinaryPath(containerBinaryPath, fqName)
}
}
return getUnknownBinaryLocation(fqName.asString())
}
}
return null
}
/**
* Attempts to get the binary file path from a container source (typically a
* [JvmPackagePartSource]). Returns null if the path is unavailable.
*/
fun getContainerSourceBinaryPath(containerSource: org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource?): String? {
if (containerSource !is JvmPackagePartSource) return null
val binaryClass = containerSource.knownJvmBinaryClass ?: return null
return when (binaryClass) {
is VirtualFileKotlinClass -> {
val vf = binaryClass.file
val path = vf.path
if (vf.fileSystem.protocol == StandardFileSystems.JRT_PROTOCOL)
"/${path.split("!/", limit = 2)[1]}"
else path
}
else -> binaryClass.location.takeIf { it.isNotEmpty() }
}
}
private fun getUnknownBinaryLocation(s: String): String {
return "/!unknown-binary-location/${s.replace(".", "/")}.class"
}
fun normalizeExternalFileClassBinaryPath(path: String, fqName: FqName): String {
if (path.contains(".kotlinc_installed")) {
return getUnknownBinaryLocation(fqName.asString())
}
val normalizedPath = path.replace('\\', '/')
val classInternalPath = "${fqName.asString().replace(".", "/")}.class"
val classSuffix = "/$classInternalPath"
if (normalizedPath.endsWith(classSuffix)) {
val classpathRoot = normalizedPath.removeSuffix(classSuffix).substringAfterLast('/')
if (classpathRoot.isNotEmpty()) {
return "$classpathRoot/$classInternalPath"
}
}
return path
}
fun shouldUseConcreteExternalFileClassLocation(path: String): Boolean {
val normalizedPath = path.replace('\\', '/')
return normalizedPath.contains("/") &&
!normalizedPath.startsWith("/!unknown-binary-location/")
}
fun getJavaEquivalentClassId(c: IrClass) =
c.fqNameWhenAvailable?.toUnsafe()?.let { JavaToKotlinClassMap.mapKotlinToJava(it) }
/**
* Checks whether a specific parameter of a Java binary method (identified by [methodName] and
* [paramIndex]) is a reference type (as opposed to a Java primitive). This is used to detect
* cases where K2 FIR has enhanced a reference type parameter (e.g. `@NotNull Integer`) to a
* Kotlin primitive (e.g. `kotlin.Int`), so that callable labels can use the original reference
* type and remain compatible with the Java extractor's callable IDs.
*
* Under K1, binary Java classes use [JavaSourceElement] and we can check [BinaryJavaClass.methods]
* directly. Under K2, they use [VirtualFileBasedSourceElement] and we fall back to reading the
* class bytes with ASM.
*
* Returns `null` if the information cannot be determined.
*/
fun javaBinaryMethodParamIsClassifierType(
parentClass: IrClass,
methodName: String,
nParams: Int,
isConstructor: Boolean,
paramIndex: Int
): Boolean? {
// K1 path: binary Java class has JavaSourceElement with a BinaryJavaClass.
val k1ParamKinds =
((parentClass.source as? JavaSourceElement)?.javaElement as? BinaryJavaClass)?.let {
binaryJavaClass ->
if (isConstructor)
binaryJavaClass.constructors
.asSequence()
.filter { it.valueParameters.size == nParams }
.mapNotNull { it.valueParameters.getOrNull(paramIndex)?.type }
.map { it is org.jetbrains.kotlin.load.java.structure.JavaClassifierType }
.toSet()
else
binaryJavaClass.methods
.asSequence()
.filter { it.name.asString() == methodName && it.valueParameters.size == nParams }
.mapNotNull { it.valueParameters.getOrNull(paramIndex)?.type }
.map { it is org.jetbrains.kotlin.load.java.structure.JavaClassifierType }
.toSet()
}
if (k1ParamKinds != null && k1ParamKinds.isNotEmpty()) {
return k1ParamKinds.singleOrNull()
}
// K2 path: binary Java class has VirtualFileBasedSourceElement
if (parentClass.source !is VirtualFileBasedSourceElement) return null
val vf = (parentClass.source as VirtualFileBasedSourceElement).virtualFile
if (!vf.name.endsWith(".class")) return null
return try {
val bytes = vf.contentsToByteArray()
val expectedMethodName = if (isConstructor) "<init>" else methodName
val descriptorKinds = mutableSetOf<Boolean>()
val reader = org.jetbrains.org.objectweb.asm.ClassReader(bytes)
reader.accept(
object : org.jetbrains.org.objectweb.asm.ClassVisitor(
org.jetbrains.org.objectweb.asm.Opcodes.ASM9
) {
override fun visitMethod(
access: Int,
name: String,
descriptor: String,
signature: String?,
exceptions: Array<String>?
): org.jetbrains.org.objectweb.asm.MethodVisitor? {
if (name != expectedMethodName) return null
val paramDescriptors = parseAsmMethodDescriptorParams(descriptor)
if (paramDescriptors.size != nParams) return null
val paramDesc = paramDescriptors.getOrNull(paramIndex) ?: return null
// Reference types start with 'L' or '['; Java primitives are single chars
descriptorKinds.add(paramDesc.startsWith("L") || paramDesc.startsWith("["))
return null
}
},
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_CODE or
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_DEBUG or
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_FRAMES
)
descriptorKinds.singleOrNull()
} catch (e: Exception) {
null
}
}
/**
* Checks whether the return type of a Java binary method (identified by [methodName] and
* [nParams]) is a reference type (as opposed to a Java primitive).
*
* Returns `null` if the information cannot be determined.
*/
fun javaBinaryMethodReturnIsClassifierType(
parentClass: IrClass,
methodName: String,
nParams: Int,
isConstructor: Boolean
): Boolean? {
if (isConstructor) return false
// K1 path: binary Java class has JavaSourceElement with a BinaryJavaClass.
val k1ReturnKinds =
((parentClass.source as? JavaSourceElement)?.javaElement as? BinaryJavaClass)?.methods
?.asSequence()
?.filter { it.name.asString() == methodName && it.valueParameters.size == nParams }
?.map { it.returnType is org.jetbrains.kotlin.load.java.structure.JavaClassifierType }
?.toSet()
if (k1ReturnKinds != null && k1ReturnKinds.isNotEmpty()) {
return k1ReturnKinds.singleOrNull()
}
// K2 path: binary Java class has VirtualFileBasedSourceElement
if (parentClass.source !is VirtualFileBasedSourceElement) return null
val vf = (parentClass.source as VirtualFileBasedSourceElement).virtualFile
if (!vf.name.endsWith(".class")) return null
return try {
val bytes = vf.contentsToByteArray()
val returnKinds = mutableSetOf<Boolean>()
val reader = org.jetbrains.org.objectweb.asm.ClassReader(bytes)
reader.accept(
object : org.jetbrains.org.objectweb.asm.ClassVisitor(
org.jetbrains.org.objectweb.asm.Opcodes.ASM9
) {
override fun visitMethod(
access: Int,
name: String,
descriptor: String,
signature: String?,
exceptions: Array<String>?
): org.jetbrains.org.objectweb.asm.MethodVisitor? {
if (name != methodName) return null
if (parseAsmMethodDescriptorParams(descriptor).size != nParams) return null
val returnDescriptor = descriptor.substring(descriptor.lastIndexOf(')') + 1)
returnKinds.add(
returnDescriptor.startsWith("L") || returnDescriptor.startsWith("[")
)
return null
}
},
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_CODE or
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_DEBUG or
org.jetbrains.org.objectweb.asm.ClassReader.SKIP_FRAMES
)
returnKinds.singleOrNull()
} catch (e: Exception) {
null
}
}
fun parseAsmMethodDescriptorParams(descriptor: String): List<String> {
val params = mutableListOf<String>()
var i = descriptor.indexOf('(') + 1
val end = descriptor.lastIndexOf(')')
while (i < end) {
when (val c = descriptor[i]) {
'L' -> {
val semi = descriptor.indexOf(';', i)
params.add(descriptor.substring(i, semi + 1))
i = semi + 1
}
'[' -> {
var j = i + 1
while (j < end && descriptor[j] == '[') j++
if (descriptor[j] == 'L') {
val semi = descriptor.indexOf(';', j)
params.add(descriptor.substring(i, semi + 1))
i = semi + 1
} else {
params.add(descriptor.substring(i, j + 1))
i = j + 1
}
}
else -> { params.add(c.toString()); i++ }
}
}
return params
}

View File

@@ -1,11 +1,11 @@
import pathlib
def test(codeql, java_full):
def test(codeql, java_full, kotlinc_2_3_20):
java_srcs = " ".join([str(s) for s in pathlib.Path().glob("*.java")])
codeql.database.create(
command=[
f"javac {java_srcs} -d build",
"kotlinc -language-version 2.0 user.kt -cp build",
"kotlinc -language-version 1.9 user.kt -cp build",
]
)

View File

@@ -1,6 +1,6 @@
import commands
def test(codeql, java_full):
commands.run("kotlinc -language-version 2.0 test.kt -d lib")
codeql.database.create(command="kotlinc -language-version 2.0 user.kt -cp lib")
def test(codeql, java_full, kotlinc_2_3_20):
commands.run("kotlinc -language-version 1.9 test.kt -d lib")
codeql.database.create(command="kotlinc -language-version 1.9 user.kt -cp lib")

View File

@@ -9,4 +9,4 @@
| Percentage of calls with call target | 100 |
| Total number of lines | 3 |
| Total number of lines with extension kt | 3 |
| Uses Kotlin 2: true | 1 |
| Uses Kotlin 2: false | 1 |

View File

@@ -1,2 +1,2 @@
def test(codeql, java_full):
codeql.database.create(command="kotlinc -J-Xmx2G -language-version 2.0 SomeClass.kt")
def test(codeql, java_full, kotlinc_2_3_20):
codeql.database.create(command=f"kotlinc -J-Xmx2G -language-version 1.9 SomeClass.kt")

View File

@@ -1,6 +1,6 @@
import commands
def test(codeql, java_full):
commands.run("kotlinc -language-version 2.0 A.kt")
codeql.database.create(command="kotlinc -cp . -language-version 2.0 B.kt C.kt")
def test(codeql, java_full, kotlinc_2_3_20):
commands.run("kotlinc -language-version 1.9 A.kt")
codeql.database.create(command="kotlinc -cp . -language-version 1.9 B.kt C.kt")

View File

@@ -1,6 +1,6 @@
import commands
def test(codeql, java_full):
def test(codeql, java_full, kotlinc_2_3_20):
commands.run(["javac", "Test.java", "-d", "bin"])
codeql.database.create(command="kotlinc -language-version 2.0 user.kt -cp bin")
codeql.database.create(command="kotlinc -language-version 1.9 user.kt -cp bin")

View File

@@ -1,13 +1,13 @@
import commands
def test(codeql, java_full):
def test(codeql, java_full, kotlinc_2_3_20):
# Compile the JavaDefns2 copy outside tracing, to make sure the Kotlin view of it matches the Java view seen by the traced javac compilation of JavaDefns.java below.
commands.run(["javac", "JavaDefns2.java"])
codeql.database.create(
command=[
"kotlinc kotlindefns.kt",
"javac JavaUser.java JavaDefns.java -cp .",
"kotlinc -language-version 2.0 -cp . kotlinuser.kt",
"kotlinc -language-version 1.9 -cp . kotlinuser.kt",
]
)

View File

@@ -0,0 +1,19 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.data", "Json$ObjectReader", True, "read", "(Object,Decoder)", "", "Argument[1]", "ReturnValue", "taint", "ai-generated"]
- ["org.apache.avro.data", "Json$ObjectReader", True, "setSchema", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.data", "TimeConversions$TimeMicrosConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimeMicrosConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimeMillisConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimeMillisConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimestampMicrosConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimestampMicrosConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimestampMillisConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimestampMillisConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimestampNanosConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.data", "TimeConversions$TimestampNanosConversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"]

View File

@@ -1,10 +1,11 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro.git#68da8fb99da5c482f17853e01e79f714e3717b42 by codeql-mads-via-llm
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.apache.avro.file", "DataFileReader", True, "DataFileReader", "(File,DatumReader)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(File,DatumReader)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "appendTo", "(File)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,File)", "", "Argument[1]", "path-injection", "ai-generated"]
@@ -17,13 +18,75 @@ extensions:
pack: codeql/java-all
extensible: sourceModel
data:
- ["org.apache.avro.file", "DataFileReader12", True, "getMeta", "(String)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "getMetaString", "(String)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "next", "()", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "next", "(Object)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getMeta", "(String)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getMetaString", "(String)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "next", "()", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "next", "(Object)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "nextBlock", "()", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "FileReader", True, "next", "(Object)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "DataFileReader", "(File,DatumReader)", "", "Argument[this]", "file", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(File,DatumReader)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro.file", "SeekableFileInput", True, "SeekableFileInput", "(File)", "", "Argument[this]", "file", "ai-generated"]
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.file", "Codec", True, "compress", "(ByteBuffer)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "Codec", True, "decompress", "(ByteBuffer)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "DataFileReader", "(File,DatumReader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "DataFileReader", "(SeekableInput,DatumReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "DataFileReader", "(SeekableInput,DatumReader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(File,DatumReader)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(File,DatumReader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(SeekableInput,DatumReader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(SeekableInput,DatumReader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(SeekableInput,DatumReader,DataFileStream$Header,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(SeekableInput,DatumReader,DataFileStream$Header,boolean)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader", True, "openReader", "(SeekableInput,DatumReader,DataFileStream$Header,boolean)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "DataFileReader12", "(SeekableInput,DatumReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "DataFileReader12", "(SeekableInput,DatumReader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "DataFileReader12", "(SeekableInput,DatumReader)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "getMeta", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "getMetaString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "getSchema", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "next", "(Object)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "next", "(Object)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileReader12", True, "next", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "DataFileStream", "(InputStream,DatumReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "DataFileStream", "(InputStream,DatumReader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getHeader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getMeta", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getMetaKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getMetaString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "getSchema", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "next", "(Object)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "next", "(Object)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "next", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileStream", True, "nextBlock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "DataFileWriter", "(DatumWriter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "append", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "appendAllFrom", "(DataFileStream,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "appendEncoded", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "appendTo", "(File)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "appendTo", "(SeekableInput,OutputStream)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,File)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,File)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,File)", "", "Argument[this]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream)", "", "Argument[this]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "create", "(Schema,OutputStream,byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "setCodec", "(CodecFactory)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "setEncoder", "(Function)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "setMeta", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "setMeta", "(String,byte[])", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "setMeta", "(String,long)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter", True, "setSyncInterval", "(int)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.file", "DataFileWriter$AppendWriteException", True, "AppendWriteException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "SeekableByteArrayInput", True, "SeekableByteArrayInput", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]
- ["org.apache.avro.file", "SyncableFileOutputStream", True, "SyncableFileOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]
- ["org.apache.avro.file", "SyncableFileOutputStream", True, "SyncableFileOutputStream", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]
- ["org.apache.avro.file", "SyncableFileOutputStream", True, "SyncableFileOutputStream", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.file", "SyncableFileOutputStream", True, "SyncableFileOutputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]
- ["org.apache.avro.file", "SyncableFileOutputStream", True, "SyncableFileOutputStream", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]

View File

@@ -0,0 +1,97 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.generic", "GenericData", True, "GenericData", "(ClassLoader)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData.classLoader]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "addLogicalTypeConversion", "(Conversion)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumReader", "(Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumReader", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumReader", "(Schema,Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumReader", "(Schema,Schema)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumReader", "(Schema,Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumWriter", "(Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createDatumWriter", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createEnum", "(String,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$EnumSymbol.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createFixed", "(Object,Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createFixed", "(Object,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createFixed", "(Object,byte[],Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "createString", "(Object)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "deepCopy", "(Schema,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "deepCopy", "(Schema,Object)", "", "Argument[1]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getClassLoader", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData.classLoader]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getConversionByClass", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getConversionByClass", "(Class,LogicalType)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getConversionFor", "(LogicalType)", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getConversions", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Element", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getDefaultValue", "(Schema$Field)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getFastReaderBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "getField", "(Object,String,int)", "", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "induce", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "induce", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "newArray", "(Object,int,Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "newMap", "(Object,int)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "newRecord", "(Object,Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "newRecord", "(Object,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "setFastReaderEnabled", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData", True, "setField", "(Object,String,int,Object)", "", "Argument[3]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData", True, "toString", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData$AbstractArray", True, "AbstractArray", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$AbstractArray.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$AbstractArray", True, "getSchema", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$AbstractArray.schema]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Array", True, "Array", "(Schema,Collection)", "", "Argument[1].Element", "Argument[this].Element", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Array", True, "Array", "(int,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData$Array", True, "peek", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericData$EnumSymbol", True, "EnumSymbol", "(Schema,Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$EnumSymbol.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$EnumSymbol", True, "EnumSymbol", "(Schema,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$EnumSymbol.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$EnumSymbol", True, "getSchema", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$EnumSymbol.schema]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Fixed", True, "Fixed", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Fixed", True, "Fixed", "(Schema,byte[])", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Fixed", True, "Fixed", "(Schema,byte[])", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Fixed.bytes]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Fixed", True, "bytes", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Fixed.bytes]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Fixed", True, "bytes", "(byte[])", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Fixed.bytes]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Fixed", True, "getSchema", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$InstanceSupplier", True, "newInstance", "(Object,Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "Record", "(GenericData$Record,boolean)", "", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "Record", "(GenericData$Record,boolean)", "", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.values]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.values]", "taint", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "Record", "(GenericData$Record,boolean)", "", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "Record", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "get", "(String)", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "get", "(int)", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "getSchema", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "put", "(String,Object)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericData$Record", True, "put", "(int,Object)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.actual]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.expected]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema,Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.actual]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema,Schema)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.expected]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema,Schema,GenericData)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.actual]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema,Schema,GenericData)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.expected]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "GenericDatumReader", "(Schema,Schema,GenericData)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.data]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "getData", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.data]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "getExpected", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.expected]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "getSchema", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.actual]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "read", "(Object,Decoder)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "read", "(Object,Decoder)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "read", "(Object,Decoder)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "read", "(Object,Decoder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "setExpected", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.expected]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "setSchema", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.actual]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumReader", True, "setSchema", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.expected]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumWriter", True, "GenericDatumWriter", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericDatumWriter", True, "GenericDatumWriter", "(Schema,GenericData)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumWriter.data]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumWriter", True, "getData", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumWriter.data]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericDatumWriter", True, "setSchema", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericDatumWriter", True, "write", "(Object,Encoder)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "GenericRecordBuilder", "(GenericData$Record)", "", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "Argument[this].SyntheticField[org.apache.avro.data.RecordBuilderBase.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "GenericRecordBuilder", "(GenericRecordBuilder)", "", "Argument[0].SyntheticField[org.apache.avro.data.RecordBuilderBase.schema]", "Argument[this].SyntheticField[org.apache.avro.data.RecordBuilderBase.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "GenericRecordBuilder", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.data.RecordBuilderBase.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "build", "()", "", "Argument[this].SyntheticField[org.apache.avro.data.RecordBuilderBase.schema]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "clear", "(Schema$Field)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "clear", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "get", "(Schema$Field)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "set", "(Schema$Field,Object)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "GenericRecordBuilder", True, "set", "(String,Object)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.generic", "PrimitivesArrays", True, "createOptimizedArray", "(int,Schema,Schema$Type)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]

View File

@@ -0,0 +1,64 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.io", "BinaryDecoder", True, "inputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "BlockingDirectBinaryEncoder", True, "BlockingDirectBinaryEncoder", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Decoder", True, "readBytes", "(ByteBuffer)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "Decoder", True, "readFixed", "(byte[])", "", "Argument[this]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.io", "Decoder", True, "readFixed", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.io", "Decoder", True, "readString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "Decoder", True, "readString", "(Utf8)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "binaryDecoder", "(InputStream,BinaryDecoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "binaryDecoder", "(byte[],BinaryDecoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "binaryDecoder", "(byte[],int,int,BinaryDecoder)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "configureDecoderBufferSize", "(int)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "createBinaryDecoder", "(InputStream,BinaryDecoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "createBinaryDecoder", "(byte[],BinaryDecoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "createBinaryDecoder", "(byte[],int,int,BinaryDecoder)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "directBinaryDecoder", "(InputStream,BinaryDecoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "jsonDecoder", "(Schema,InputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "jsonDecoder", "(Schema,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "resolvingDecoder", "(Schema,Schema,Decoder)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "DecoderFactory", True, "validatingDecoder", "(Schema,Decoder)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeBytes", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeBytes", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeFixed", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeFixed", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeFixed", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeString", "(CharSequence)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "Encoder", True, "writeString", "(Utf8)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "binaryEncoder", "(OutputStream,BinaryEncoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "blockingBinaryEncoder", "(OutputStream,BinaryEncoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "blockingDirectBinaryEncoder", "(OutputStream,BinaryEncoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "configureBlockSize", "(int)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "configureBufferSize", "(int)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "directBinaryEncoder", "(OutputStream,BinaryEncoder)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "EncoderFactory", True, "validatingEncoder", "(Schema,Encoder)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder", True, "FastReaderBuilder", "(GenericData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder", True, "createDatumReader", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder", True, "createDatumReader", "(Schema,Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder", True, "reusingReader", "(FastReaderBuilder$ReusingFieldReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "FastReaderBuilder", True, "withClassPropEnabled", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "FastReaderBuilder", True, "withKeyClassEnabled", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$ExecutionStep", True, "execute", "(Object,Decoder)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$FieldReader", True, "read", "(Object,Decoder)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$MapReader", True, "MapReader", "(FastReaderBuilder$FieldReader,FastReaderBuilder$FieldReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$MapReader", True, "MapReader", "(FastReaderBuilder$FieldReader,FastReaderBuilder$FieldReader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$RecordReader", True, "finishInitialization", "(FastReaderBuilder$ExecutionStep[],Schema,GenericData$InstanceSupplier)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$RecordReader", True, "finishInitialization", "(FastReaderBuilder$ExecutionStep[],Schema,GenericData$InstanceSupplier)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "FastReaderBuilder$RecordReader", True, "finishInitialization", "(FastReaderBuilder$ExecutionStep[],Schema,GenericData$InstanceSupplier)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io", "JsonDecoder", True, "configure", "(InputStream)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "JsonDecoder", True, "configure", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "JsonEncoder", True, "configure", "(OutputStream)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "JsonEncoder", True, "configure", "(OutputStream,boolean)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "ResolvingDecoder", True, "doAction", "(Symbol,Symbol)", "", "Argument[1].Field[org.apache.avro.io.parsing.Symbol$DefaultStartAction.contents]", "Argument[this].SyntheticField[org.apache.avro.io.ValidatingDecoder.in].SyntheticField[org.apache.avro.io.BinaryDecoder.buf]", "value", "dfc-generated"]
- ["org.apache.avro.io", "ResolvingDecoder", True, "doAction", "(Symbol,Symbol)", "", "Argument[1].Field[org.apache.avro.io.parsing.Symbol$ResolvingAction.writer]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "ResolvingDecoder", True, "readString", "()", "", "Argument[this].SyntheticField[org.apache.avro.io.ValidatingDecoder.in].SyntheticField[org.apache.avro.io.BinaryDecoder.buf]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.io", "ValidatingDecoder", True, "configure", "(Decoder)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io", "ValidatingEncoder", True, "configure", "(Encoder)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]

View File

@@ -0,0 +1,53 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.io.parsing", "JsonGrammarGenerator", True, "generate", "(Schema,Map)", "", "Argument[0]", "Argument[1].MapKey.Field[org.apache.avro.io.parsing.ValidatingGrammarGenerator$LitS.actual]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "Parser", "(Symbol,Parser$ActionHandler)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.io.parsing.Parser.stack].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "advance", "(Symbol)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "advance", "(Symbol)", "", "Argument[this].SyntheticField[org.apache.avro.io.parsing.Parser.stack].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "popSymbol", "()", "", "Argument[this].SyntheticField[org.apache.avro.io.parsing.Parser.stack].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "pushProduction", "(Symbol)", "", "Argument[0].Field[org.apache.avro.io.parsing.Symbol.production]", "Argument[this].SyntheticField[org.apache.avro.io.parsing.Parser.stack]", "taint", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "pushSymbol", "(Symbol)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.io.parsing.Parser.stack].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser", True, "topSymbol", "()", "", "Argument[this].SyntheticField[org.apache.avro.io.parsing.Parser.stack].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Parser$ActionHandler", True, "doAction", "(Symbol,Symbol)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "SkipParser", True, "SkipParser", "(Symbol,Parser$ActionHandler,SkipParser$SkipHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io.parsing", "SkipParser", True, "SkipParser", "(Symbol,Parser$ActionHandler,SkipParser$SkipHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io.parsing", "SkipParser", True, "SkipParser", "(Symbol,Parser$ActionHandler,SkipParser$SkipHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io.parsing", "SkipParser", True, "skipSymbol", "(Symbol)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "defaultStartAction", "(byte[])", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$DefaultStartAction.contents]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "enumAdjustAction", "(int,Object[])", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$EnumAdjustAction.adjustments]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "enumLabelsAction", "(List)", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$EnumLabelsAction.symbols]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "fieldAdjustAction", "(int,String,Set)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$FieldAdjustAction.fname]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "fieldAdjustAction", "(int,String,Set)", "", "Argument[2]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$FieldAdjustAction.aliases]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "fieldOrderAction", "(Schema$Field[])", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$FieldOrderAction.fields]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "flatten", "(Map,Map)", "", "Argument[0].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "flatten", "(Map,Map)", "", "Argument[this]", "Argument[0].MapKey", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "flatten", "(Map,Map)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "skipAction", "(Symbol)", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$SkipAction.symToSkip]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol", True, "unionAdjustAction", "(int,Symbol)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$UnionAdjustAction.symToParse]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Alternative", True, "flatten", "(Map,Map)", "", "Argument[0].MapValue", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$Alternative.symbols].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Alternative", True, "flatten", "(Map,Map)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$Alternative.labels]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$Alternative.labels]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Alternative", True, "flatten", "(Map,Map)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$Alternative.symbols].ArrayElement", "Argument[0].MapKey", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Alternative", True, "flatten", "(Map,Map)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$Alternative.symbols].ArrayElement", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$Alternative.symbols].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Alternative", True, "getLabel", "(int)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$Alternative.labels].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Alternative", True, "getSymbol", "(int)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$Alternative.symbols].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$DefaultStartAction", True, "DefaultStartAction", "(byte[])", "", "Argument[0]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$DefaultStartAction.contents]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$EnumAdjustAction", True, "EnumAdjustAction", "(int,Object[])", "", "Argument[1]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$EnumAdjustAction.adjustments]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$EnumLabelsAction", True, "EnumLabelsAction", "(List)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$EnumLabelsAction.symbols]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$EnumLabelsAction", True, "getLabel", "(int)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$EnumLabelsAction.symbols].Element", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$FieldAdjustAction", True, "FieldAdjustAction", "(int,String,Set)", "", "Argument[1]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$FieldAdjustAction.fname]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$FieldAdjustAction", True, "FieldAdjustAction", "(int,String,Set)", "", "Argument[2]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$FieldAdjustAction.aliases]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$FieldOrderAction", False, "FieldOrderAction", "(Schema$Field[])", "", "Argument[0]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$FieldOrderAction.fields]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Repeater", True, "flatten", "(Map,Map)", "", "Argument[0].MapValue", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol.production].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Repeater", True, "flatten", "(Map,Map)", "", "Argument[0].MapValue.Field[org.apache.avro.io.parsing.Symbol.production]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol.production]", "taint", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Repeater", True, "flatten", "(Map,Map)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$Repeater.end]", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol$Repeater.end]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Repeater", True, "flatten", "(Map,Map)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol.production].ArrayElement", "Argument[0].MapKey", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$Repeater", True, "flatten", "(Map,Map)", "", "Argument[this].Field[org.apache.avro.io.parsing.Symbol.production].ArrayElement", "ReturnValue.Field[org.apache.avro.io.parsing.Symbol.production].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$SkipAction", True, "SkipAction", "(Symbol)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$SkipAction.symToSkip]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "Symbol$UnionAdjustAction", True, "UnionAdjustAction", "(int,Symbol)", "", "Argument[1]", "Argument[this].Field[org.apache.avro.io.parsing.Symbol$UnionAdjustAction.symToParse]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "ValidatingGrammarGenerator", True, "generate", "(Schema,Map)", "", "Argument[0]", "Argument[1].MapKey.Field[org.apache.avro.io.parsing.ValidatingGrammarGenerator$LitS.actual]", "value", "dfc-generated"]
- ["org.apache.avro.io.parsing", "ValidatingGrammarGenerator", True, "generate", "(Schema,Map)", "", "Argument[1].MapValue", "ReturnValue", "value", "dfc-generated"]

View File

@@ -0,0 +1,38 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.message", "BadHeaderException", True, "BadHeaderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageDecoder", True, "BinaryMessageDecoder", "(GenericData,Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageDecoder", True, "BinaryMessageDecoder", "(GenericData,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageDecoder", True, "BinaryMessageDecoder", "(GenericData,Schema,SchemaStore)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageDecoder", True, "BinaryMessageDecoder", "(GenericData,Schema,SchemaStore)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageDecoder", True, "BinaryMessageDecoder", "(GenericData,Schema,SchemaStore)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageDecoder", True, "decode", "(InputStream,Object)", "", "Argument[1]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageEncoder", True, "encode", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "BinaryMessageEncoder", True, "encode", "(Object,OutputStream)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(ByteBuffer,Object)", "", "Argument[1]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(ByteBuffer,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(InputStream)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(byte[],Object)", "", "Argument[1]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.message", "MessageDecoder$BaseDecoder", True, "decode", "(byte[],Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "MissingSchemaException", True, "MissingSchemaException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "RawMessageDecoder", "(GenericData,Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "RawMessageDecoder", "(GenericData,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "RawMessageDecoder", "(GenericData,Schema,Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "RawMessageDecoder", "(GenericData,Schema,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "RawMessageDecoder", "(GenericData,Schema,Schema)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "decode", "(InputStream,Object)", "", "Argument[1]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.message", "RawMessageDecoder", True, "decode", "(InputStream,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageEncoder", True, "RawMessageEncoder", "(GenericData,Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageEncoder", True, "RawMessageEncoder", "(GenericData,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageEncoder", True, "RawMessageEncoder", "(GenericData,Schema,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageEncoder", True, "RawMessageEncoder", "(GenericData,Schema,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.message", "RawMessageEncoder", True, "encode", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.message", "SchemaStore$Cache", True, "addSchema", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.message.SchemaStore$Cache.schemas].MapValue", "value", "dfc-generated"]
- ["org.apache.avro.message", "SchemaStore$Cache", True, "findByFingerprint", "(long)", "", "Argument[this].SyntheticField[org.apache.avro.message.SchemaStore$Cache.schemas].MapValue", "ReturnValue", "value", "dfc-generated"]

View File

@@ -1,5 +1,5 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro.git#68da8fb99da5c482f17853e01e79f714e3717b42 by codeql-mads-via-llm
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
@@ -12,18 +12,419 @@ extensions:
- ["org.apache.avro", "SchemaParser", True, "parse", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(Path)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(URI,Charset)", "", "Argument[0]", "path-injection", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(URI,Charset)", "", "Argument[0]", "request-forgery", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parseSingle", "(Path)", "", "Argument[0]", "path-injection", "ai-generated"]
- addsTo:
pack: codeql/java-all
extensible: sourceModel
data:
- ["org.apache.avro", "Protocol", True, "main", "(String[])", "", "Parameter[0]", "commandargs", "ai-generated"]
- ["org.apache.avro", "Protocol", True, "parse", "(File)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "Schema", True, "parse", "(File)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "Schema$Parser", True, "parse", "(File)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(File)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(File,Charset)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(Path)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(Path,Charset)", "", "ReturnValue", "file", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parse", "(URI,Charset)", "", "ReturnValue", "remote", "ai-generated"]
- ["org.apache.avro", "SchemaParser", True, "parseSingle", "(Path)", "", "ReturnValue", "file", "ai-generated"]
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro", "AvroMissingFieldException", True, "AvroMissingFieldException", "(String,Schema$Field)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroMissingFieldException", True, "AvroMissingFieldException", "(String,Schema$Field)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroMissingFieldException", True, "addParentField", "(Schema$Field)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroRemoteException", True, "AvroRemoteException", "(Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.AvroRemoteException.value]", "value", "dfc-generated"]
- ["org.apache.avro", "AvroRemoteException", True, "AvroRemoteException", "(Object,Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.AvroRemoteException.value]", "value", "dfc-generated"]
- ["org.apache.avro", "AvroRemoteException", True, "AvroRemoteException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroRemoteException", True, "getValue", "()", "", "Argument[this].SyntheticField[org.apache.avro.AvroRemoteException.value]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "AvroRuntimeException", True, "AvroRuntimeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroRuntimeException", True, "AvroRuntimeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroRuntimeException", True, "AvroRuntimeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroRuntimeException", True, "AvroRuntimeException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroTypeException", True, "AvroTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroTypeException", True, "AvroTypeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "AvroTypeException", True, "AvroTypeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "Conversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro", "Conversion", True, "adjustAndSetValue", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro", "Conversions", True, "convertToLogicalType", "(Object,Schema,LogicalType,Conversion)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Conversions", True, "convertToRawType", "(Object,Schema,LogicalType,Conversion)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Conversions$DecimalConversion", True, "toFixed", "(BigDecimal,Schema,LogicalType)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Conversions$DurationConversion", True, "toFixed", "(TimePeriod,Schema,LogicalType)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Conversions$UUIDConversion", True, "toFixed", "(UUID,Schema,LogicalType)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "FormattedSchemaParser", True, "parse", "(ParseContext,URI,CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "InvalidAvroMagicException", True, "InvalidAvroMagicException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "InvalidNumberEncodingException", True, "InvalidNumberEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "JsonProperties", True, "addAllProps", "(JsonProperties)", "", "Argument[0].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "addAllProps", "(JsonProperties)", "", "Argument[0].SyntheticField[org.apache.avro.JsonProperties.props].MapValue", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "addProp", "(String,Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "addProp", "(String,Object)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "addProp", "(String,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "getObjectProp", "(String,Object)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "getObjectProps", "()", "", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "ReturnValue.MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "putAll", "(JsonProperties)", "", "Argument[0].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "JsonProperties", True, "putAll", "(JsonProperties)", "", "Argument[0].SyntheticField[org.apache.avro.JsonProperties.props].MapValue", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "LogicalType", True, "LogicalType", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.LogicalType.name]", "taint", "dfc-generated"]
- ["org.apache.avro", "LogicalType", True, "addToSchema", "(Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "LogicalType", True, "addToSchema", "(Schema)", "", "Argument[this]", "Argument[0].SyntheticField[org.apache.avro.Schema.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "LogicalType", True, "addToSchema", "(Schema)", "", "Argument[this]", "ReturnValue.SyntheticField[org.apache.avro.Schema.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "LogicalType", True, "getName", "()", "", "Argument[this].SyntheticField[org.apache.avro.LogicalType.name]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "LogicalTypes$Decimal", True, "addToSchema", "(Schema)", "", "Argument[this]", "Argument[0].SyntheticField[org.apache.avro.Schema.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "LogicalTypes$Decimal", True, "addToSchema", "(Schema)", "", "Argument[this]", "ReturnValue.SyntheticField[org.apache.avro.Schema.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "NameValidator", True, "validate", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "NameValidator$Result", True, "Result", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.NameValidator$Result.errors]", "value", "dfc-generated"]
- ["org.apache.avro", "NameValidator$Result", True, "getErrors", "()", "", "Argument[this].SyntheticField[org.apache.avro.NameValidator$Result.errors]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "ParseContext", "(NameValidator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "ParseContext", True, "commit", "()", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.newSchemas].MapKey", "Argument[this].SyntheticField[org.apache.avro.ParseContext.oldSchemas].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "commit", "()", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.newSchemas].MapValue", "Argument[this].SyntheticField[org.apache.avro.ParseContext.oldSchemas].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "find", "(String,String)", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.newSchemas].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "find", "(String,String)", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.oldSchemas].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "getNamedSchema", "(String)", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.newSchemas].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "getNamedSchema", "(String)", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.oldSchemas].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "put", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.ParseContext.newSchemas].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "resolve", "(Schema)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "resolve", "(Schema)", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.oldSchemas].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "resolveAllSchemas", "()", "", "Argument[this].SyntheticField[org.apache.avro.ParseContext.oldSchemas].MapValue", "ReturnValue.Element", "value", "dfc-generated"]
- ["org.apache.avro", "ParseContext", True, "typesByName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol", True, "Protocol", "(Protocol)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "Protocol", True, "Protocol", "(String,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Protocol.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "Protocol", "(String,String)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Protocol.namespace]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "Protocol", "(String,String,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Protocol.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "Protocol", "(String,String,String)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Protocol.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "Protocol", "(String,String,String)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.Protocol.namespace]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(Protocol$Message,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.request]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(Protocol$Message,Schema,Schema,Schema)", "", "Argument[2]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.response]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(Protocol$Message,Schema,Schema,Schema)", "", "Argument[3]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.errors]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,JsonProperties,Schema)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,JsonProperties,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,JsonProperties,Schema)", "", "Argument[3]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.request]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,JsonProperties,Schema,Schema,Schema)", "", "Argument[4]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.response]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,JsonProperties,Schema,Schema,Schema)", "", "Argument[5]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.errors]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Map,Schema)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Map,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Map,Schema)", "", "Argument[3]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.request]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Map,Schema,Schema,Schema)", "", "Argument[4]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.response]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Map,Schema,Schema,Schema)", "", "Argument[5]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.errors]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Schema)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Schema)", "", "Argument[2]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$Message.request]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Schema,Schema,Schema)", "", "Argument[3]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.response]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "createMessage", "(String,String,Schema,Schema,Schema)", "", "Argument[4]", "ReturnValue.SyntheticField[org.apache.avro.Protocol$TwoWayMessage.errors]", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "getDoc", "()", "", "Argument[this].SyntheticField[org.apache.avro.Protocol.doc]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "getMD5", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol", True, "getMessages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol", True, "getName", "()", "", "Argument[this].SyntheticField[org.apache.avro.Protocol.name]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "getNamespace", "()", "", "Argument[this].SyntheticField[org.apache.avro.Protocol.namespace]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol", True, "getType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol", True, "getTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol", True, "getUnresolvedTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol$Message", True, "getDoc", "()", "", "Argument[this].SyntheticField[org.apache.avro.Protocol$Message.doc]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol$Message", True, "getErrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Protocol$Message", True, "getName", "()", "", "Argument[this].SyntheticField[org.apache.avro.Protocol$Message.name]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol$Message", True, "getRequest", "()", "", "Argument[this].SyntheticField[org.apache.avro.Protocol$Message.request]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Protocol$Message", True, "getResponse", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "ReturnValue.Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "ReturnValue.Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$Container.elementAction].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$ReaderUnion.actualAction].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Container", True, "Container", "(Schema,Schema,GenericData,Resolver$Action)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Container", True, "Container", "(Schema,Schema,GenericData,Resolver$Action)", "", "Argument[1]", "Argument[this].Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Container", True, "Container", "(Schema,Schema,GenericData,Resolver$Action)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "Argument[this].Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Container", True, "Container", "(Schema,Schema,GenericData,Resolver$Action)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[this].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Container", True, "Container", "(Schema,Schema,GenericData,Resolver$Action)", "", "Argument[3]", "Argument[this].Field[org.apache.avro.Resolver$Container.elementAction]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$DoNothing", True, "DoNothing", "(Schema,Schema,GenericData)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$DoNothing", True, "DoNothing", "(Schema,Schema,GenericData)", "", "Argument[1]", "Argument[this].Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$DoNothing", True, "DoNothing", "(Schema,Schema,GenericData)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "Argument[this].Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$DoNothing", True, "DoNothing", "(Schema,Schema,GenericData)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[this].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$EnumAdjust", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$EnumAdjust", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$EnumAdjust", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "ReturnValue.Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$EnumAdjust", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ErrorAction", True, "ErrorAction", "(Schema,Schema,GenericData,Resolver$ErrorAction$ErrorType)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ErrorAction", True, "ErrorAction", "(Schema,Schema,GenericData,Resolver$ErrorAction$ErrorType)", "", "Argument[1]", "Argument[this].Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ErrorAction", True, "ErrorAction", "(Schema,Schema,GenericData,Resolver$ErrorAction$ErrorType)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "Argument[this].Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ErrorAction", True, "ErrorAction", "(Schema,Schema,GenericData,Resolver$ErrorAction$ErrorType)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[this].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Promote", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Promote", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Promote", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "ReturnValue.Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Promote", True, "resolve", "(Schema,Schema,GenericData)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "ReaderUnion", "(Schema,Schema,GenericData,int,Resolver$Action)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "ReaderUnion", "(Schema,Schema,GenericData,int,Resolver$Action)", "", "Argument[1]", "Argument[this].Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "ReaderUnion", "(Schema,Schema,GenericData,int,Resolver$Action)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "Argument[this].Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "ReaderUnion", "(Schema,Schema,GenericData,int,Resolver$Action)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[this].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "ReaderUnion", "(Schema,Schema,GenericData,int,Resolver$Action)", "", "Argument[4]", "Argument[this].Field[org.apache.avro.Resolver$ReaderUnion.actualAction]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[1]", "ReturnValue.Field[org.apache.avro.Resolver$Action.reader]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[1].SyntheticField[org.apache.avro.Schema.logicalType]", "ReturnValue.Field[org.apache.avro.Resolver$Action.logicalType]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[3].MapValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$ReaderUnion.actualAction].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[3].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$ReaderUnion.actualAction]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[3].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$ReaderUnion.actualAction].Field[org.apache.avro.Resolver$Container.elementAction]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$ReaderUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[3].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$ReaderUnion.actualAction].Field[org.apache.avro.Resolver$ReaderUnion.actualAction]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Skip", True, "Skip", "(Schema,GenericData)", "", "Argument[0]", "Argument[this].Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$Skip", True, "Skip", "(Schema,GenericData)", "", "Argument[1].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[this].Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$WriterUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[0]", "ReturnValue.Field[org.apache.avro.Resolver$Action.writer]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$WriterUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "Argument[3].MapValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$WriterUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[2].SyntheticField[org.apache.avro.generic.GenericData.conversions].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$Action.conversion]", "value", "dfc-generated"]
- ["org.apache.avro", "Resolver$WriterUnion", True, "resolve", "(Schema,Schema,GenericData,Map)", "", "Argument[3].MapValue", "ReturnValue.Field[org.apache.avro.Resolver$WriterUnion.actions].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "addProp", "(String,Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "addProp", "(String,Object)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "addProp", "(String,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.JsonProperties.props].MapKey", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "applyAliases", "(Schema,Schema)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro", "Schema", True, "applyAliases", "(Schema,Schema)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createArray", "(Schema)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.Schema$ArraySchema.elementType]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createEnum", "(String,String,String,List)", "", "Argument[3].Element", "ReturnValue.SyntheticField[org.apache.avro.Schema$EnumSchema.symbols].Element", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createEnum", "(String,String,String,List,String)", "", "Argument[3].Element", "ReturnValue.SyntheticField[org.apache.avro.Schema$EnumSchema.symbols].Element", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createEnum", "(String,String,String,List,String)", "", "Argument[4]", "ReturnValue.SyntheticField[org.apache.avro.Schema$EnumSchema.enumDefault]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createFixed", "(String,String,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createFixed", "(String,String,String,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createFixed", "(String,String,String,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createMap", "(Schema)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.Schema$MapSchema.valueType]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createRecord", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createRecord", "(String,String,String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createRecord", "(String,String,String,boolean)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createRecord", "(String,String,String,boolean)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "createRecord", "(String,String,String,boolean,List)", "", "Argument[4].Element", "ReturnValue.SyntheticField[org.apache.avro.Schema$RecordSchema.fieldMap].MapValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createRecord", "(String,String,String,boolean,List)", "", "Argument[4].Element", "ReturnValue.SyntheticField[org.apache.avro.Schema$RecordSchema.fields].Element", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "createUnion", "(List)", "", "Argument[0].Element", "ReturnValue.SyntheticField[org.apache.avro.Schema$UnionSchema.types].Element", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "getAliases", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getDoc", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getElementType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getEnumDefault", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getEnumSymbols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getField", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getFullName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getLogicalType", "()", "", "Argument[this].SyntheticField[org.apache.avro.Schema.logicalType]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getNamespace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "getValueType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema", True, "setFields", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(Schema$Field,Schema)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String,Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String,Object)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String,Object)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String,Object,Schema$Field$Order)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.name]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String,Object,Schema$Field$Order)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.schema]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "Field", "(String,Schema,String,Object,Schema$Field$Order)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.doc]", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "addAlias", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.aliases].Element", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "aliases", "()", "", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.aliases].Element", "ReturnValue.Element", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "doc", "()", "", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.doc]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "name", "()", "", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.name]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Field", True, "schema", "()", "", "Argument[this].SyntheticField[org.apache.avro.Schema$Field.schema]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Parser", True, "Parser", "(NameValidator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "Parser", "(ParseContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "addTypes", "(Iterable)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Parser", True, "addTypes", "(Map)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$Parser", True, "getTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "parse", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "parse", "(InputStream)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "parse", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "parse", "(String,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "parseInternal", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "Schema$Parser", True, "setValidateDefaults", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "Schema$SeenPair", True, "SeenPair", "(Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "Schema$SeenPair", True, "SeenPair", "(Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder", True, "builder", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder", True, "enumeration", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder", True, "fixed", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder", True, "record", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$ArrayBuilder", False, "ArrayBuilder", "(SchemaBuilder$Completion,SchemaBuilder$NameContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$ArrayBuilder", False, "ArrayBuilder", "(SchemaBuilder$Completion,SchemaBuilder$NameContext)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$ArrayBuilder", False, "items", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$ArrayBuilder", False, "items", "(Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$ArrayBuilder", False, "items", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$ArrayDefault", True, "arrayDefault", "(List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "booleanBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "booleanType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "bytesBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "bytesType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "doubleBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "doubleType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "enumeration", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "enumeration", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "fixed", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "fixed", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "floatBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "floatType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "intBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "intType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "longBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "longType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "map", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "nullBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "nullType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "record", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "record", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "stringBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseFieldTypeBuilder", True, "stringType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "booleanBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "booleanType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "bytesBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "bytesType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "doubleBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "doubleType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "enumeration", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "enumeration", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "fixed", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "fixed", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "floatBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "floatType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "intBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "intType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "longBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "longType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "map", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "nullBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "nullType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "record", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "record", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "stringBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "stringType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "type", "(Schema)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "type", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "type", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BaseTypeBuilder", True, "type", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BooleanBuilder", False, "endBoolean", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BooleanDefault", True, "booleanDefault", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BytesBuilder", False, "endBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BytesDefault", True, "bytesDefault", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BytesDefault", True, "bytesDefault", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$BytesDefault", True, "bytesDefault", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$DoubleBuilder", False, "endDouble", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$DoubleDefault", True, "doubleDefault", "(double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$EnumBuilder", False, "defaultSymbol", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$EnumBuilder", False, "symbols", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$EnumBuilder", False, "symbols", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$EnumDefault", True, "enumDefault", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldAssembler", False, "endRecord", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldAssembler", False, "name", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldAssembler", False, "name", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "notValidatingDefaults", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "orderAscending", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "orderDescending", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "orderIgnore", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "type", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "type", "(Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "type", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "type", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "type", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldBuilder", False, "validatingDefaults", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldDefault", True, "noDefault", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldTypeBuilder", False, "nullable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldTypeBuilder", False, "optional", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FieldTypeBuilder", False, "unionOf", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FixedBuilder", False, "size", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FixedDefault", True, "fixedDefault", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FixedDefault", True, "fixedDefault", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FixedDefault", True, "fixedDefault", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FloatBuilder", False, "endFloat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$FloatDefault", True, "floatDefault", "(float)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$GenericDefault", False, "noDefault", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$GenericDefault", False, "withDefault", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$IntBuilder", False, "endInt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$IntDefault", True, "intDefault", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$LongBuilder", False, "endLong", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$LongDefault", True, "longDefault", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$MapBuilder", False, "values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$MapBuilder", False, "values", "(Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$MapBuilder", False, "values", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$MapDefault", True, "mapDefault", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$NamedBuilder", True, "aliases", "(String[])", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$NamedBuilder", True, "doc", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$NamespacedBuilder", True, "namespace", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$NullBuilder", False, "endNull", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$NullDefault", True, "nullDefault", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$PropBuilder", True, "prop", "(String,Object)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$PropBuilder", True, "prop", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaBuilder$RecordBuilder", False, "fields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$RecordDefault", True, "recordDefault", "(GenericRecord)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$StringBldr", False, "endString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$StringDefault", True, "stringDefault", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$TypeBuilder", False, "nullable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$TypeBuilder", False, "unionOf", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionAccumulator", False, "and", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionAccumulator", False, "endUnion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "booleanBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "booleanType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "bytesBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "bytesType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "doubleBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "doubleType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "enumeration", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "enumeration", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "fixed", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "fixed", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "floatBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "floatType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "intBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "intType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "longBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "longType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "map", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "nullBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "nullType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "record", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "record", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "stringBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilder$UnionFieldTypeBuilder", False, "stringType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilderException", True, "SchemaBuilderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaBuilderException", True, "SchemaBuilderException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility", True, "checkReaderWriterCompatibility", "(Schema,Schema)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mReader]", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility", True, "checkReaderWriterCompatibility", "(Schema,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mWriter]", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$Incompatibility", False, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$Incompatibility", False, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$Incompatibility", False, "getReaderFragment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$Incompatibility", False, "getWriterFragment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaCompatibilityResult", False, "getIncompatibilities", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaCompatibilityResult", False, "mergedWith", "(SchemaCompatibility$SchemaCompatibilityResult)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaCompatibilityResult", False, "mergedWith", "(SchemaCompatibility$SchemaCompatibilityResult)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "SchemaPairCompatibility", "(SchemaCompatibility$SchemaCompatibilityResult,Schema,Schema,String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mResult]", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "SchemaPairCompatibility", "(SchemaCompatibility$SchemaCompatibilityResult,Schema,Schema,String)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mReader]", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "SchemaPairCompatibility", "(SchemaCompatibility$SchemaCompatibilityResult,Schema,Schema,String)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mWriter]", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "SchemaPairCompatibility", "(SchemaCompatibility$SchemaCompatibilityResult,Schema,Schema,String)", "", "Argument[3]", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mDescription]", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "getDescription", "()", "", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mDescription]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "getReader", "()", "", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mReader]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "getResult", "()", "", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mResult]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaCompatibility$SchemaPairCompatibility", False, "getWriter", "()", "", "Argument[this].SyntheticField[org.apache.avro.SchemaCompatibility$SchemaPairCompatibility.mWriter]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaParseException", True, "SchemaParseException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaParseException", True, "SchemaParseException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaParser", True, "SchemaParser", "(NameValidator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaParser", True, "getParsedNamedSchemas", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaParser$ParseResult", True, "mainSchema", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-generated"]
- ["org.apache.avro", "SchemaParser$ParseResult", True, "parsedNamedSchemas", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-generated"]
- ["org.apache.avro", "SchemaValidationException", True, "SchemaValidationException", "(Schema,Schema,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "SchemaValidatorBuilder", False, "canBeReadStrategy", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaValidatorBuilder", False, "canReadStrategy", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaValidatorBuilder", False, "mutualReadStrategy", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaValidatorBuilder", False, "strategy", "(SchemaValidationStrategy)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "SchemaValidatorBuilder", False, "validateAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SchemaValidatorBuilder", False, "validateLatest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro", "SystemLimitException", True, "SystemLimitException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "UnknownAvroCodecException", True, "UnknownAvroCodecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "UnresolvedUnionException", True, "UnresolvedUnionException", "(Schema,Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.UnresolvedUnionException.unionSchema]", "value", "dfc-generated"]
- ["org.apache.avro", "UnresolvedUnionException", True, "UnresolvedUnionException", "(Schema,Object)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.UnresolvedUnionException.unresolvedDatum]", "value", "dfc-generated"]
- ["org.apache.avro", "UnresolvedUnionException", True, "UnresolvedUnionException", "(Schema,Schema$Field,Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.UnresolvedUnionException.unionSchema]", "value", "dfc-generated"]
- ["org.apache.avro", "UnresolvedUnionException", True, "UnresolvedUnionException", "(Schema,Schema$Field,Object)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.UnresolvedUnionException.unresolvedDatum]", "value", "dfc-generated"]
- ["org.apache.avro", "UnresolvedUnionException", True, "getUnionSchema", "()", "", "Argument[this].SyntheticField[org.apache.avro.UnresolvedUnionException.unionSchema]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "UnresolvedUnionException", True, "getUnresolvedDatum", "()", "", "Argument[this].SyntheticField[org.apache.avro.UnresolvedUnionException.unresolvedDatum]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro", "ValidateAll", False, "ValidateAll", "(SchemaValidationStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro", "ValidateLatest", False, "ValidateLatest", "(SchemaValidationStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- addsTo:
pack: codeql/java-all
extensible: neutralModel
data:
- ["org.apache.avro", "SchemaFormatterFactory", "getDefaultFormatter", "()", "summary", "ai-generated"]

View File

@@ -0,0 +1,22 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.path", "LocationStep", True, "LocationStep", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "LocationStep", True, "LocationStep", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "MapKeyPredicate", True, "MapKeyPredicate", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.path.MapKeyPredicate.key]", "value", "dfc-generated"]
- ["org.apache.avro.path", "MapKeyPredicate", True, "getKey", "()", "", "Argument[this].SyntheticField[org.apache.avro.path.MapKeyPredicate.key]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.path", "TracingAvroTypeException", True, "TracingAvroTypeException", "(AvroTypeException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingAvroTypeException", True, "summarize", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingAvroTypeException", True, "tracePath", "(PathElement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingClassCastException", True, "TracingClassCastException", "(ClassCastException,Object,Schema,boolean)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.path.TracingClassCastException.datum]", "value", "dfc-generated"]
- ["org.apache.avro.path", "TracingClassCastException", True, "summarize", "(Schema)", "", "Argument[this].SyntheticField[org.apache.avro.path.TracingClassCastException.datum]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.path", "TracingClassCastException", True, "tracePath", "(PathElement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingNullPointException", True, "TracingNullPointException", "(NullPointerException,Schema,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingNullPointException", True, "TracingNullPointException", "(NullPointerException,Schema,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingNullPointException", True, "summarize", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.path", "TracingNullPointException", True, "tracePath", "(PathElement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.path", "UnionTypePredicate", True, "UnionTypePredicate", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]

View File

@@ -0,0 +1,30 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.reflect", "MapEntry", True, "MapEntry", "(Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "MapEntry", True, "MapEntry", "(Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "ReflectData", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "addStringable", "(Class)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "createFixed", "(Object,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Fixed.schema]", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "getCustomEncoding", "(Schema)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "getField", "(Object,String,int)", "", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "makeNullable", "(Schema)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "newRecord", "(Object,Schema)", "", "Argument[1]", "ReturnValue.SyntheticField[org.apache.avro.generic.GenericData$Record.schema]", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "setDefaultGeneratedValue", "(Type,Object)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "setDefaultsGenerated", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectData", True, "setField", "(Object,String,int,Object)", "", "Argument[3]", "Argument[0].SyntheticField[org.apache.avro.generic.GenericData$Record.values].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(ReflectData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(Schema,Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(Schema,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(Schema,Schema,ReflectData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(Schema,Schema,ReflectData)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumReader", True, "ReflectDatumReader", "(Schema,Schema,ReflectData)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumWriter", True, "ReflectDatumWriter", "(Class,ReflectData)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumWriter", True, "ReflectDatumWriter", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumWriter", True, "ReflectDatumWriter", "(Schema,ReflectData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.reflect", "ReflectDatumWriter", True, "ReflectDatumWriter", "(Schema,ReflectData)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]

View File

@@ -0,0 +1,47 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.specific", "SpecificData", True, "SpecificData", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "getClassName", "(Schema)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "getDecoder", "(ObjectInput)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "getEncoder", "(ObjectOutput)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "getSchema", "(Type)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangle", "(String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangle", "(String,Set)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangle", "(String,Set,boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangle", "(String,boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangleFullyQualified", "(String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangleMethod", "(String,boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangleTypeIdentifier", "(String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificData", True, "mangleTypeIdentifier", "(String,boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "SpecificDatumReader", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "SpecificDatumReader", "(Schema,Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "SpecificDatumReader", "(Schema,Schema)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "SpecificDatumReader", "(Schema,Schema,SpecificData)", "", "Argument[2]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.data]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "SpecificDatumReader", "(SpecificData)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.data]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "getSpecificData", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumReader.data]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificDatumReader", True, "setSchema", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificDatumWriter", True, "SpecificDatumWriter", "(Schema)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificDatumWriter", True, "SpecificDatumWriter", "(Schema,SpecificData)", "", "Argument[1]", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumWriter.data]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificDatumWriter", True, "getSpecificData", "()", "", "Argument[this].SyntheticField[org.apache.avro.generic.GenericDatumWriter.data]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "clearCause", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "clearValue", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "getCause", "()", "", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificErrorBuilderBase.cause]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "getValue", "()", "", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificErrorBuilderBase.value]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "setCause", "(Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificErrorBuilderBase.cause]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "setCause", "(Throwable)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.specific.SpecificErrorBuilderBase.cause]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "setCause", "(Throwable)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificErrorBuilderBase.value]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "setValue", "(Object)", "", "Argument[0]", "ReturnValue.SyntheticField[org.apache.avro.specific.SpecificErrorBuilderBase.value]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificErrorBuilderBase", True, "setValue", "(Object)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificExceptionBase", True, "SpecificExceptionBase", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificExceptionBase", True, "SpecificExceptionBase", "(Object,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificExceptionBase", True, "SpecificExceptionBase", "(Object,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificExceptionBase", True, "SpecificExceptionBase", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.specific", "SpecificFixed", True, "SpecificFixed", "(byte[])", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificFixed.bytes]", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificFixed", True, "bytes", "()", "", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificFixed.bytes]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.specific", "SpecificFixed", True, "bytes", "(byte[])", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.specific.SpecificFixed.bytes]", "value", "dfc-generated"]

View File

@@ -1,8 +1,63 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
# Generated from https://github.com/apache/avro.git#68da8fb99da5c482f17853e01e79f714e3717b42 by codeql-mads-via-llm
# Generated from https://github.com/apache/avro#0f18ca801f25fa9435d727abba9fb979f9bde662 by codeql-mads-via-llm
extensions:
- addsTo:
pack: codeql/java-all
extensible: sourceModel
data:
- ["org.apache.avro.util", "RandomData", True, "main", "(String[])", "", "Argument[0]", "commandargs", "ai-generated"]
- ["org.apache.avro.util", "RandomData", True, "main", "(String[])", "", "Parameter[0]", "commandargs", "ai-generated"]
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.avro.util", "ByteBufferInputStream", True, "ByteBufferInputStream", "(List)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.ByteBufferInputStream.buffers]", "value", "dfc-generated"]
- ["org.apache.avro.util", "ByteBufferInputStream", True, "readBuffer", "(int)", "", "Argument[this].SyntheticField[org.apache.avro.util.ByteBufferInputStream.buffers].Element", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "ByteBufferOutputStream", True, "append", "(List)", "", "Argument[0].Element", "Argument[this].SyntheticField[org.apache.avro.util.ByteBufferOutputStream.buffers].Element", "value", "dfc-generated"]
- ["org.apache.avro.util", "ByteBufferOutputStream", True, "getBufferList", "()", "", "Argument[this].SyntheticField[org.apache.avro.util.ByteBufferOutputStream.buffers]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "ByteBufferOutputStream", True, "write", "(ByteBuffer)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.ByteBufferOutputStream.buffers].Element", "value", "dfc-generated"]
- ["org.apache.avro.util", "ByteBufferOutputStream", True, "writeBuffer", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]
- ["org.apache.avro.util", "ByteBufferOutputStream", True, "writeBuffer", "(ByteBuffer)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.ByteBufferOutputStream.buffers].Element", "taint", "dfc-generated"]
- ["org.apache.avro.util", "ClassSecurityValidator$Builder", True, "add", "(Class)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "ClassSecurityValidator$Builder", True, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "MapEntry", True, "MapEntry", "(Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "MapEntry", True, "MapEntry", "(Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "MapUtil", True, "computeIfAbsent", "(ConcurrentMap,Object,Function)", "", "Argument[0].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "NonCopyingByteArrayOutputStream", True, "asByteBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["org.apache.avro.util", "NonCopyingByteArrayOutputStream", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "dfc-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int,long,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(GenericData,Schema,int,long,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(Schema,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(Schema,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(Schema,int,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "RandomData", True, "RandomData", "(Schema,int,long,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "ReusableByteArrayInputStream", True, "setByteArray", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "ReusableByteBufferInputStream", True, "setByteBuffer", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "ResolvingVisitor", "(Function)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "afterVisitNonTerminal", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.SchemaResolver$ResolvingVisitor.replace].MapKey", "value", "dfc-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "copyProperties", "(Schema,Schema)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "getResolved", "(Schema)", "", "Argument[this].SyntheticField[org.apache.avro.util.SchemaResolver$ResolvingVisitor.replace].MapValue", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "visitNonTerminal", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.SchemaResolver$ResolvingVisitor.replace].MapKey", "value", "dfc-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "visitTerminal", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.SchemaResolver$ResolvingVisitor.replace].MapKey", "value", "dfc-generated"]
- ["org.apache.avro.util", "SchemaResolver$ResolvingVisitor", False, "visitTerminal", "(Schema)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.SchemaResolver$ResolvingVisitor.replace].MapValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "SchemaUtil", True, "describe", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.util", "Schemas", False, "visit", "(Schema,SchemaVisitor)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"]
- ["org.apache.avro.util", "TimePeriod", False, "from", "(TemporalAmount)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "Utf8", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.Utf8.bytes]", "taint", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "Utf8", "(Utf8)", "", "Argument[0].SyntheticField[org.apache.avro.util.Utf8.bytes].ArrayElement", "Argument[this].SyntheticField[org.apache.avro.util.Utf8.bytes].ArrayElement", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "Utf8", "(byte[])", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.Utf8.bytes]", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "getBytes", "()", "", "Argument[this].SyntheticField[org.apache.avro.util.Utf8.bytes]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "getBytesFor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "readExternal", "(ObjectInput)", "", "Argument[0]", "Argument[this].SyntheticField[org.apache.avro.util.Utf8.bytes]", "taint", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "set", "(String)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "set", "(Utf8)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "setByteLength", "(int)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"]
- ["org.apache.avro.util", "Utf8", True, "writeExternal", "(ObjectOutput)", "", "Argument[this].SyntheticField[org.apache.avro.util.Utf8.bytes]", "Argument[0]", "taint", "dfc-generated"]
- ["org.apache.avro.util", "UtfTextUtils", True, "asString", "(byte[],Charset)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.util", "UtfTextUtils", True, "readAllBytes", "(InputStream,Charset)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]
- ["org.apache.avro.util", "UtfTextUtils", True, "readAllChars", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"]

View File

@@ -28,6 +28,8 @@ nodes
| string_flow.rb:227:10:227:10 | a | semmle.label | a |
subpaths
testFailures
| string_flow.rb:85:10:85:10 | a | Unexpected result: hasValueFlow=a |
| string_flow.rb:227:10:227:10 | a | Unexpected result: hasValueFlow=a |
#select
| string_flow.rb:3:10:3:22 | call to new | string_flow.rb:2:9:2:18 | call to source | string_flow.rb:3:10:3:22 | call to new | $@ | string_flow.rb:2:9:2:18 | call to source | call to source |
| string_flow.rb:85:10:85:10 | a | string_flow.rb:83:9:83:18 | call to source | string_flow.rb:85:10:85:10 | a | $@ | string_flow.rb:83:9:83:18 | call to source | call to source |

View File

@@ -82,7 +82,7 @@ end
def m_clear
a = source "a"
a.clear
sink a # $ SPURIOUS: hasValueFlow=a
sink a
end
# concat and prepend omitted because they clash with the summaries for
@@ -224,7 +224,7 @@ def m_replace
b = source "b"
sink a.replace(b) # $ hasTaintFlow=b
# TODO: currently we get value flow for a, because we don't clear content
sink a # $ hasTaintFlow=b SPURIOUS: hasValueFlow=a
sink a # $ hasTaintFlow=b
end
def m_reverse
@@ -316,4 +316,4 @@ def m_upto(i)
a.upto("b", true) { |x| sink x } # $ hasTaintFlow=a
"b".upto(a) { |x| sink x } # $ hasTaintFlow=a
"b".upto(a, true) { |x| sink x }
end
end

View File

@@ -9,7 +9,7 @@ end
class OneController < ActionController::Base
before_action :a
after_action :c
def a
@foo = params[:foo]
end
@@ -18,14 +18,14 @@ class OneController < ActionController::Base
end
def c
sink @foo # $ hasTaintFlow
sink @foo
end
end
class TwoController < ActionController::Base
before_action :a
after_action :c
def a
@foo = params[:foo]
end
@@ -35,14 +35,14 @@ class TwoController < ActionController::Base
end
def c
sink @foo # $ SPURIOUS: hasTaintFlow
sink @foo
end
end
class ThreeController < ActionController::Base
before_action :a
after_action :c
def a
@foo = params[:foo]
@foo = "safe"
@@ -52,14 +52,14 @@ class ThreeController < ActionController::Base
end
def c
sink @foo # $ SPURIOUS: hasTaintFlow
sink @foo
end
end
class FourController < ActionController::Base
before_action :a
after_action :c
def a
@foo.bar = params[:foo]
end
@@ -68,14 +68,14 @@ class FourController < ActionController::Base
end
def c
sink(@foo.bar) # $ hasTaintFlow
sink(@foo.bar)
end
end
class FiveController < ActionController::Base
before_action :a
after_action :c
def a
self.taint_foo
end
@@ -84,10 +84,10 @@ class FiveController < ActionController::Base
end
def c
sink @foo # $ hasTaintFlow
sink @foo
end
def taint_foo
@foo = params[:foo]
end
end
end

View File

@@ -270,6 +270,11 @@ nodes
| params_flow.rb:205:10:205:10 | a | semmle.label | a |
subpaths
testFailures
| filter_flow.rb:21:10:21:13 | @foo | Unexpected result: hasTaintFlow |
| filter_flow.rb:38:10:38:13 | @foo | Unexpected result: hasTaintFlow |
| filter_flow.rb:55:10:55:13 | @foo | Unexpected result: hasTaintFlow |
| filter_flow.rb:71:10:71:17 | call to bar | Unexpected result: hasTaintFlow |
| filter_flow.rb:87:11:87:14 | @foo | Unexpected result: hasTaintFlow |
#select
| filter_flow.rb:21:10:21:13 | @foo | filter_flow.rb:14:12:14:17 | call to params | filter_flow.rb:21:10:21:13 | @foo | $@ | filter_flow.rb:14:12:14:17 | call to params | call to params |
| filter_flow.rb:38:10:38:13 | @foo | filter_flow.rb:30:12:30:17 | call to params | filter_flow.rb:38:10:38:13 | @foo | $@ | filter_flow.rb:30:12:30:17 | call to params | call to params |

View File

@@ -66,7 +66,7 @@ impl<'a> AstNode for Node<'a> {
impl AstNode for yeast::Node {
fn kind(&self) -> &str {
yeast::Node::kind_name(self)
yeast::Node::kind(self)
}
fn is_named(&self) -> bool {
yeast::Node::is_named(self)
@@ -882,6 +882,7 @@ fn emit_extras_in(visitor: &mut Visitor, node: Node<'_>) {
}
fn traverse_yeast(tree: &yeast::Ast, visitor: &mut Visitor) {
use yeast::Cursor;
let mut cursor = tree.walk();
visitor.enter_node(cursor.node());
let mut recurse = true;

View File

@@ -41,14 +41,22 @@ pub fn query(input: TokenStream) -> TokenStream {
/// (kind "literal") - leaf with static content
/// (kind #{expr}) - leaf with computed content (expr.to_string())
/// (kind $fresh) - leaf with auto-generated unique name
/// {expr} - embed a Rust expression, dispatched via
/// the `IntoFieldIds` trait: `Id` pushes a
/// single id; iterables (`Vec<Id>`,
/// `Option<Id>`, iterator chains) splice
/// their elements
/// field: {expr} - extend a named field with `{expr}`'s ids
/// {expr} - embed a Rust expression returning Id
/// {..expr} - splice an iterable of Id (in child/field position)
/// field: {..expr} - splice into a named field
/// {expr}.map(p -> tpl) - apply tpl to each element; splice result
/// {expr}.reduce_left(f -> init, acc, e -> fold)
/// - fold with per-element init; splice 0 or 1 result
/// ```
///
/// Chain syntax after `{expr}` or `{..expr}`:
/// - `.map(param -> template)` — one output node per input element.
/// - `.reduce_left(first -> init, acc, elem -> fold)` — fold left; the first
/// element is converted by `init`, subsequent elements are folded by `fold`
/// with the accumulator bound to `acc`. An empty iterable yields nothing.
/// - Chains always splice (the result is iterable).
/// - Multiple chains can be chained, e.g. `.map(...).reduce_left(...)`.
///
/// Can be called with an explicit context or using the implicit context
/// from an enclosing `rule!`:
///
@@ -92,7 +100,7 @@ pub fn trees(input: TokenStream) -> TokenStream {
/// rule!(
/// (query_pattern field: (_) @name (kind)* @repeated (_)? @optional)
/// =>
/// (output_template field: {name} {repeated})
/// (output_template field: {name} {..repeated})
/// )
///
/// // Shorthand: captures become fields on the output node
@@ -113,3 +121,37 @@ pub fn rule(input: TokenStream) -> TokenStream {
Err(err) => err.to_compile_error().into(),
}
}
/// Define a desugaring rule whose transform is a hand-written Rust block.
///
/// Use `manual_rule!` when the transform needs control over capture
/// translation timing — for example, when an outer rule needs to set
/// state in `ctx` (the `BuildCtx`'s user context) before recursive
/// translation reaches inner rules that read that state.
///
/// ```text
/// manual_rule!(
/// (query_pattern field: (_) @name)
/// {
/// // `ctx` is a `&mut BuildCtx<'_, C>`; capture variables
/// // (`name: NodeRef`, etc.) are bound from the query.
/// let translated = ctx.translate(name)?;
/// Ok(translated)
/// }
/// )
/// ```
///
/// Differences from [`rule!`]:
/// - Captures are **not** auto-translated before the body runs; they
/// refer to raw input-schema nodes. Use [`BuildCtx::translate`] (or
/// [`BuildCtx::translate_opt`]) to translate them when you choose.
/// - The body is plain Rust returning `Result<Vec<Id>, String>` — no
/// tree template, no `Ok(...)` wrap.
#[proc_macro]
pub fn manual_rule(input: TokenStream) -> TokenStream {
let input2: TokenStream2 = input.into();
match parse::parse_manual_rule_top(input2) {
Ok(output) => output.into(),
Err(err) => err.to_compile_error().into(),
}
}

View File

@@ -22,9 +22,10 @@ pub fn parse_query_top(input: TokenStream) -> Result<TokenStream> {
/// Parse a single query node (possibly with a trailing `@capture`).
fn parse_query_node(tokens: &mut Tokens) -> Result<TokenStream> {
let base = parse_query_atom(tokens)?;
// Check for trailing @capture or @@capture
// Check for trailing @capture
if peek_is_at(tokens) {
let capture_name = consume_capture_marker(tokens)?;
tokens.next(); // consume @
let capture_name = expect_ident(tokens, "expected capture name after @")?;
let name_str = capture_name.to_string();
Ok(quote! {
yeast::query::QueryNode::Capture {
@@ -158,7 +159,8 @@ fn parse_query_fields(tokens: &mut Tokens) -> Result<Vec<TokenStream>> {
push_field_elem(&mut field_order, &mut field_elems, field_str, elem);
} else {
let child = if peek_is_at(tokens) {
let capture_name = consume_capture_marker(tokens)?;
tokens.next();
let capture_name = expect_ident(tokens, "expected capture name after @")?;
let name_str = capture_name.to_string();
quote! {
yeast::query::QueryNode::Capture {
@@ -304,8 +306,7 @@ fn parse_ctx_or_implicit(tokens: &mut Tokens) -> Ident {
&& matches!(lookahead.next(), Some(TokenTree::Punct(p)) if p.as_char() == ',');
if is_explicit {
let ctx = expect_ident(tokens, "unreachable: ident was just peeked")
.expect("unreachable: ident was just peeked");
let ctx = expect_ident(tokens, "").unwrap();
let _ = tokens.next(); // consume comma
ctx
} else {
@@ -343,7 +344,7 @@ pub fn parse_trees_top(input: TokenStream) -> Result<TokenStream> {
}
Ok(quote! {
{
let mut __nodes: Vec<yeast::Id> = Vec::new();
let mut __nodes: Vec<usize> = Vec::new();
#(#items)*
__nodes
}
@@ -357,7 +358,7 @@ fn parse_direct_node(tokens: &mut Tokens, ctx: &Ident) -> Result<TokenStream> {
Some(TokenTree::Group(g)) if g.delimiter() == Delimiter::Brace => {
let group = expect_group(tokens, Delimiter::Brace)?;
let expr = group.stream();
Ok(quote! { ::std::convert::Into::<yeast::Id>::into({ #expr }) })
Ok(quote! { ::std::convert::Into::<usize>::into({ #expr }) })
}
Some(TokenTree::Group(g)) if g.delimiter() == Delimiter::Parenthesis => {
let group = expect_group(tokens, Delimiter::Parenthesis)?;
@@ -430,24 +431,49 @@ fn parse_direct_node_inner(tokens: &mut Tokens, ctx: &Ident) -> Result<TokenStre
);
field_counter += 1;
// Plain `field: {expr}` — trait-dispatched extend.
// Check for field: {..expr}.chain or field: {expr}.chain — splice a Vec<Id> into the field
if peek_is_group(tokens, Delimiter::Brace) {
let group = expect_group(tokens, Delimiter::Brace)?;
let expr = group.stream();
stmts.push(quote! {
let mut #temp: Vec<yeast::Id> = Vec::new();
yeast::IntoFieldIds::extend_into({ #expr }, &mut #temp);
});
// An empty `{expr}` means the field is absent — skip it
// entirely rather than emitting an empty named field.
field_args.push(quote! {
if !#temp.is_empty() { __fields.push((#field_str, #temp)); }
});
continue;
let group_clone = tokens.clone().next().unwrap();
if let TokenTree::Group(g) = &group_clone {
let mut inner_check = g.stream().into_iter();
let is_splice = matches!(inner_check.next(), Some(TokenTree::Punct(p)) if p.as_char() == '.')
&& matches!(inner_check.next(), Some(TokenTree::Punct(p)) if p.as_char() == '.');
// Determine if a chain (.map(..)) follows the `{}` group.
let mut after = tokens.clone();
after.next(); // skip the brace group
let has_chain =
matches!(after.peek(), Some(TokenTree::Punct(p)) if p.as_char() == '.');
if is_splice || has_chain {
let group = expect_group(tokens, Delimiter::Brace)?;
let base: TokenStream = if is_splice {
let mut inner = group.stream().into_iter().peekable();
inner.next(); // consume first .
inner.next(); // consume second .
let expr: TokenStream = inner.collect();
quote! {
{ #expr }.into_iter().map(::std::convert::Into::<usize>::into)
}
} else {
let expr = group.stream();
quote! { { #expr }.into_iter() }
};
let chained = parse_chain_suffix(tokens, ctx, base)?;
stmts.push(quote! {
let #temp: Vec<usize> = #chained.collect();
});
// An empty splice means the field is absent — skip it
// entirely rather than emitting an empty named field.
field_args.push(quote! {
if !#temp.is_empty() { __fields.push((#field_str, #temp)); }
});
continue;
}
}
}
let value = parse_direct_node(tokens, ctx)?;
stmts.push(quote! { let #temp: yeast::Id = #value; });
stmts.push(quote! { let #temp: usize = #value; });
field_args.push(quote! { __fields.push((#field_str, vec![#temp])); });
}
@@ -464,13 +490,101 @@ fn parse_direct_node_inner(tokens: &mut Tokens, ctx: &Ident) -> Result<TokenStre
Ok(quote! {
{
#(#stmts)*
let mut __fields: Vec<(&str, Vec<yeast::Id>)> = Vec::new();
let mut __fields: Vec<(&str, Vec<usize>)> = Vec::new();
#(#field_args)*
#ctx.node(#kind_str, __fields)
}
})
}
/// Parse a chain of `.method(args)` suffixes after a `{expr}` or `{..expr}`
/// placeholder in tree templates. Currently supports:
///
/// ```text
/// .map(param -> template) -- iterator map: produces Vec<usize>
/// ```
///
/// The chain may be empty (returns `base` unchanged). Multiple chained calls
/// are supported, e.g. `.map(p -> ...).map(q -> ...)`.
///
/// Each call expects the receiver to be an iterator. The `base` argument
/// should therefore already be an iterator (use `.into_iter()` on it before
/// calling this function).
fn parse_chain_suffix(tokens: &mut Tokens, ctx: &Ident, base: TokenStream) -> Result<TokenStream> {
let mut current = base;
while matches!(tokens.peek(), Some(TokenTree::Punct(p)) if p.as_char() == '.') {
tokens.next(); // consume .
let method = expect_ident(tokens, "expected method name after `.`")?;
let method_str = method.to_string();
let args_group = expect_group(tokens, Delimiter::Parenthesis)?;
match method_str.as_str() {
"map" => {
let mut inner = args_group.stream().into_iter().peekable();
let param = expect_ident(&mut inner, "expected lambda parameter name")?;
expect_punct(&mut inner, '-', "expected `->` after lambda parameter")?;
expect_punct(&mut inner, '>', "expected `->` after lambda parameter")?;
let body = parse_direct_node(&mut inner, ctx)?;
if let Some(tok) = inner.next() {
return Err(syn::Error::new_spanned(
tok,
"unexpected token after lambda body",
));
}
current = quote! {
#current.map(|#param| #body)
};
}
"reduce_left" => {
// Syntax: reduce_left(first -> init_tpl, acc, elem -> fold_tpl)
// - first -> init_tpl : converts the first element to the initial accumulator
// - acc, elem -> fold_tpl : fold step (acc = current accumulator, elem = next element)
// Empty iterator produces an empty iterator; non-empty produces a single-element iterator.
let mut inner = args_group.stream().into_iter().peekable();
let init_param = expect_ident(&mut inner, "expected initial lambda parameter")?;
expect_punct(&mut inner, '-', "expected `->` after init parameter")?;
expect_punct(&mut inner, '>', "expected `->` after init parameter")?;
let init_body = parse_direct_node(&mut inner, ctx)?;
expect_punct(&mut inner, ',', "expected `,` after init template")?;
let acc_param = expect_ident(&mut inner, "expected accumulator parameter")?;
expect_punct(&mut inner, ',', "expected `,` after accumulator parameter")?;
let elem_param = expect_ident(&mut inner, "expected element parameter")?;
expect_punct(&mut inner, '-', "expected `->` after element parameter")?;
expect_punct(&mut inner, '>', "expected `->` after element parameter")?;
let fold_body = parse_direct_node(&mut inner, ctx)?;
if let Some(tok) = inner.next() {
return Err(syn::Error::new_spanned(
tok,
"unexpected token after fold template",
));
}
current = quote! {
{
let mut __iter = #current;
let __result: Option<usize> = if let Some(#init_param) = __iter.next() {
let mut __acc: usize = #init_body;
for #elem_param in __iter {
let #acc_param: usize = __acc;
__acc = #fold_body;
}
Some(__acc)
} else {
None
};
__result.into_iter()
}
};
}
_ => {
return Err(syn::Error::new_spanned(
method,
format!("unknown builtin method `.{method_str}()`"),
));
}
}
}
Ok(current)
}
/// Parse the top-level list of a `trees!` template.
/// Each item is a node template or `{expr}` splice.
fn parse_direct_list(tokens: &mut Tokens, ctx: &Ident) -> Result<Vec<TokenStream>> {
@@ -491,14 +605,35 @@ fn parse_direct_list(tokens: &mut Tokens, ctx: &Ident) -> Result<Vec<TokenStream
continue;
}
// `{expr}` — extend `__nodes` via `IntoFieldIds`, which handles
// single ids and iterables uniformly.
// {expr} or {..expr} (with optional .chain) — single node or splice
if peek_is_group(tokens, Delimiter::Brace) {
let group = expect_group(tokens, Delimiter::Brace)?;
let expr = group.stream();
items.push(quote! {
yeast::IntoFieldIds::extend_into({ #expr }, &mut __nodes);
});
let has_chain =
matches!(tokens.peek(), Some(TokenTree::Punct(p)) if p.as_char() == '.');
let mut inner = group.stream().into_iter().peekable();
let is_splice = peek_is_dotdot(&inner);
if is_splice || has_chain {
let base: TokenStream = if is_splice {
inner.next(); // consume first .
inner.next(); // consume second .
let expr: TokenStream = inner.collect();
quote! {
{ #expr }.into_iter().map(::std::convert::Into::<usize>::into)
}
} else {
let expr = group.stream();
quote! { { #expr }.into_iter() }
};
let chained = parse_chain_suffix(tokens, ctx, base)?;
items.push(quote! {
__nodes.extend(#chained);
});
} else {
let expr = group.stream();
items.push(quote! {
__nodes.push(::std::convert::Into::<usize>::into({ #expr }));
});
}
continue;
}
@@ -515,9 +650,6 @@ fn parse_direct_list(tokens: &mut Tokens, ctx: &Ident) -> Result<Vec<TokenStream
struct CaptureInfo {
name: String,
multiplicity: CaptureMultiplicity,
/// `true` for `@@name` captures: the auto-translate prefix skips them,
/// so the bound `Id` refers to the raw (input-schema) node.
raw: bool,
}
#[derive(Clone, Copy, PartialEq)]
@@ -576,14 +708,6 @@ fn extract_captures_inner(
extract_captures_inner(&mut inner, captures, child_mult);
}
TokenTree::Punct(p) if p.as_char() == '@' => {
// `@@name` marks the capture as raw (skip auto-translate).
let raw = matches!(
tokens.peek(),
Some(TokenTree::Punct(p)) if p.as_char() == '@'
);
if raw {
tokens.next(); // consume the second `@`
}
if let Some(TokenTree::Ident(name)) = tokens.next() {
let mult = if parent_mult == CaptureMultiplicity::Repeated
|| last_mult == CaptureMultiplicity::Repeated
@@ -599,7 +723,6 @@ fn extract_captures_inner(
captures.push(CaptureInfo {
name: name.to_string(),
multiplicity: mult,
raw,
});
}
last_mult = CaptureMultiplicity::Single;
@@ -653,14 +776,6 @@ pub fn parse_rule_top(input: TokenStream) -> Result<TokenStream> {
// Parse query
let query_code = parse_query_top(query_stream.clone())?;
// Capture names marked `@@name` (raw) — passed to the auto-translate
// prefix as a skip list so those captures keep their input-schema ids.
let raw_capture_names: Vec<&str> = captures
.iter()
.filter(|c| c.raw)
.map(|c| c.name.as_str())
.collect();
// Generate capture bindings
let ctx_ident = Ident::new(IMPLICIT_CTX, Span::call_site());
let bindings: Vec<TokenStream> = captures
@@ -671,17 +786,22 @@ pub fn parse_rule_top(input: TokenStream) -> Result<TokenStream> {
match cap.multiplicity {
CaptureMultiplicity::Repeated => {
quote! {
let #name: Vec<yeast::Id> = __captures.get_all(#name_str);
let #name: Vec<yeast::NodeRef> = __captures.get_all(#name_str)
.into_iter()
.map(yeast::NodeRef)
.collect();
}
}
CaptureMultiplicity::Optional => {
quote! {
let #name: Option<yeast::Id> = __captures.get_opt(#name_str);
let #name: Option<yeast::NodeRef> =
__captures.get_opt(#name_str).map(yeast::NodeRef);
}
}
CaptureMultiplicity::Single => {
quote! {
let #name: yeast::Id = __captures.get_var(#name_str).unwrap();
let #name: yeast::NodeRef =
yeast::NodeRef(__captures.get_var(#name_str).unwrap());
}
}
}
@@ -712,7 +832,7 @@ pub fn parse_rule_top(input: TokenStream) -> Result<TokenStream> {
__fields.insert(
__field_id,
#name.into_iter()
.map(::std::convert::Into::<yeast::Id>::into)
.map(::std::convert::Into::<usize>::into)
.collect(),
);
},
@@ -721,14 +841,14 @@ pub fn parse_rule_top(input: TokenStream) -> Result<TokenStream> {
.unwrap_or_else(|| panic!("field '{}' not found", #name_str));
if let Some(__id) = #name {
__fields.entry(__field_id).or_insert_with(Vec::new)
.push(::std::convert::Into::<yeast::Id>::into(__id));
.push(::std::convert::Into::<usize>::into(__id));
}
},
CaptureMultiplicity::Single => quote! {
let __field_id = #ctx_ident.ast.field_id_for_name(#name_str)
.unwrap_or_else(|| panic!("field '{}' not found", #name_str));
__fields.entry(__field_id).or_insert_with(Vec::new)
.push(::std::convert::Into::<yeast::Id>::into(#name));
.push(::std::convert::Into::<usize>::into(#name));
},
}
})
@@ -760,7 +880,7 @@ pub fn parse_rule_top(input: TokenStream) -> Result<TokenStream> {
}
quote! {
let mut __nodes: Vec<yeast::Id> = Vec::new();
let mut __nodes: Vec<usize> = Vec::new();
#(#transform_items)*
__nodes
}
@@ -771,23 +891,120 @@ pub fn parse_rule_top(input: TokenStream) -> Result<TokenStream> {
let __query = #query_code;
yeast::Rule::new(__query, Box::new(|__ast: &mut yeast::Ast, mut __captures: yeast::captures::Captures, __fresh: &yeast::tree_builder::FreshScope, __source_range: Option<tree_sitter::Range>, __user_ctx: &mut _, __translator: yeast::TranslatorHandle<'_, _>| {
// Auto-translation prefix: recursively translate every
// captured node before invoking the user's transform body,
// except for `@@name` captures listed in `__skip` which the
// body consumes raw.
// captured node before invoking the user's transform body.
// For OneShot rules this preserves the legacy behaviour
// (input-schema captures translated to output-schema
// nodes); for Repeating rules it is a no-op.
let __skip: &[&str] = &[#(#raw_capture_names),*];
__translator.auto_translate_captures(&mut __captures, __ast, __user_ctx, __skip)?;
__translator.auto_translate_captures(&mut __captures, __ast, __user_ctx)?;
#(#bindings)*
let mut #ctx_ident = yeast::build::BuildCtx::with_translator(__ast, &__captures, __fresh, __source_range, __user_ctx, __translator);
let __result: Vec<yeast::Id> = { #transform_body };
let __result: Vec<usize> = { #transform_body };
Ok(__result)
}))
}
})
}
/// Parse `manual_rule!( query { body } )`.
///
/// Like [`parse_rule_top`] but:
/// - Expects a Rust block `{ ... }` after the query (no `=>` arrow).
/// - Generates code that does NOT auto-translate captures before
/// running the body. Capture variables refer to raw (input-schema)
/// nodes; the body is responsible for explicit translation via
/// `ctx.translate(...)`.
/// - The body is included verbatim and must evaluate to
/// `Result<Vec<usize>, String>`.
pub fn parse_manual_rule_top(input: TokenStream) -> Result<TokenStream> {
let mut tokens = input.into_iter().peekable();
// Collect query tokens up to the body block `{ ... }`.
let mut query_tokens = Vec::new();
loop {
match tokens.peek() {
None => {
return Err(syn::Error::new(
Span::call_site(),
"expected a Rust block `{ ... }` after the query in manual_rule!",
))
}
Some(TokenTree::Group(g)) if g.delimiter() == Delimiter::Brace => break,
_ => {
query_tokens.push(tokens.next().unwrap());
}
}
}
let query_stream: TokenStream = query_tokens.into_iter().collect();
// Extract captures from the query (same as in `rule!`).
let captures = extract_captures(&query_stream);
// Parse the query into the QueryNode-building expression.
let query_code = parse_query_top(query_stream)?;
// Generate capture bindings (same as in `rule!`).
let ctx_ident = Ident::new(IMPLICIT_CTX, Span::call_site());
let bindings: Vec<TokenStream> = captures
.iter()
.map(|cap| {
let name = Ident::new(&cap.name, Span::call_site());
let name_str = &cap.name;
match cap.multiplicity {
CaptureMultiplicity::Repeated => quote! {
let #name: Vec<yeast::NodeRef> = __captures.get_all(#name_str)
.into_iter()
.map(yeast::NodeRef)
.collect();
},
CaptureMultiplicity::Optional => quote! {
let #name: Option<yeast::NodeRef> =
__captures.get_opt(#name_str).map(yeast::NodeRef);
},
CaptureMultiplicity::Single => quote! {
let #name: yeast::NodeRef =
yeast::NodeRef(__captures.get_var(#name_str).unwrap());
},
}
})
.collect();
// Consume the body block.
let body_group = match tokens.next() {
Some(TokenTree::Group(g)) if g.delimiter() == Delimiter::Brace => g,
other => {
return Err(syn::Error::new(
Span::call_site(),
format!(
"expected a Rust block `{{ ... }}` after the query in manual_rule!, found: {other:?}"
),
))
}
};
let body_stream = body_group.stream();
// No tokens should follow the body.
if let Some(tok) = tokens.next() {
return Err(syn::Error::new_spanned(
tok,
"unexpected token after manual_rule! body",
));
}
Ok(quote! {
{
let __query = #query_code;
yeast::Rule::new(__query, Box::new(|__ast: &mut yeast::Ast, __captures: yeast::captures::Captures, __fresh: &yeast::tree_builder::FreshScope, __source_range: Option<tree_sitter::Range>, __user_ctx: &mut _, __translator: yeast::TranslatorHandle<'_, _>| {
// No auto-translate prefix for manual rules — the body
// is responsible for translating captures explicitly.
#(#bindings)*
let mut #ctx_ident = yeast::build::BuildCtx::with_translator(__ast, &__captures, __fresh, __source_range, __user_ctx, __translator);
#body_stream
}))
}
})
}
// ---------------------------------------------------------------------------
// Token utilities
// ---------------------------------------------------------------------------
@@ -796,16 +1013,6 @@ fn peek_is_at(tokens: &mut Tokens) -> bool {
matches!(tokens.peek(), Some(TokenTree::Punct(p)) if p.as_char() == '@')
}
/// Consume an `@` or `@@` capture marker and the following name ident.
/// Caller has already verified `peek_is_at(tokens)`.
fn consume_capture_marker(tokens: &mut Tokens) -> Result<Ident> {
tokens.next(); // consume the first `@`
if peek_is_at(tokens) {
tokens.next(); // consume the second `@` of `@@`
}
expect_ident(tokens, "expected capture name after `@` or `@@`")
}
fn peek_is_literal(tokens: &mut Tokens) -> bool {
matches!(tokens.peek(), Some(TokenTree::Literal(_)))
}
@@ -818,6 +1025,13 @@ fn peek_is_hash(tokens: &mut Tokens) -> bool {
matches!(tokens.peek(), Some(TokenTree::Punct(p)) if p.as_char() == '#')
}
/// Check for `..` (two consecutive dot punctuation tokens).
fn peek_is_dotdot(tokens: &Tokens) -> bool {
let mut lookahead = tokens.clone();
matches!(lookahead.next(), Some(TokenTree::Punct(p)) if p.as_char() == '.')
&& matches!(lookahead.next(), Some(TokenTree::Punct(p)) if p.as_char() == '.')
}
fn peek_is_underscore(tokens: &mut Tokens) -> bool {
matches!(tokens.peek(), Some(TokenTree::Ident(id)) if *id == "_")
}
@@ -899,7 +1113,8 @@ fn expect_repetition(tokens: &mut Tokens) -> Result<TokenStream> {
fn maybe_wrap_capture(tokens: &mut Tokens, base: TokenStream) -> Result<TokenStream> {
if peek_is_at(tokens) {
let name = consume_capture_marker(tokens)?;
tokens.next(); // consume @
let name = expect_ident(tokens, "expected capture name after @")?;
let name_str = name.to_string();
Ok(quote! {
yeast::query::QueryNode::Capture {
@@ -926,12 +1141,13 @@ fn maybe_wrap_repetition(tokens: &mut Tokens, single: TokenStream) -> Result<Tok
}
}
/// If `@name` (or `@@name`) follows a Repeated list element, wrap each
/// child SingleNode inside the repetition with a Capture. This matches
/// tree-sitter semantics where `(_)* @name` captures each matched node.
/// If `@name` follows a Repeated list element, wrap each child SingleNode
/// inside the repetition with a Capture. This matches tree-sitter semantics
/// where `(_)* @name` captures each matched node.
fn maybe_wrap_list_capture(tokens: &mut Tokens, elem: TokenStream) -> Result<TokenStream> {
if peek_is_at(tokens) {
let name = consume_capture_marker(tokens)?;
tokens.next();
let name = expect_ident(tokens, "expected capture name after @")?;
let name_str = name.to_string();
// Re-parse the element isn't practical, so we generate a wrapper
// that creates a new Repeated with each child wrapped in a capture.

View File

@@ -214,7 +214,7 @@ yeast::tree!(ctx,
```rust
yeast::trees!(ctx,
(assignment left: {tmp} right: {right})
{body}
{..body}
)
```
@@ -256,26 +256,12 @@ occurrences of the same `$name` within one `BuildCtx` share the same value:
### Embedded Rust expressions
`{expr}` embeds a Rust expression whose value is appended to the
enclosing field (or to the rule body's id list). Dispatch happens via
the [`IntoFieldIds`] trait, which is implemented for:
- `Id` — pushes the single id.
- Any `IntoIterator<Item: Into<Id>>` — extends with all yielded ids
(covers `Vec<Id>`, `Option<Id>`, iterator chains, etc.).
So the same `{expr}` syntax handles single ids, splices, and zero-or-many
options uniformly:
`{expr}` embeds a Rust expression that returns a single node `Id`:
```rust
(assignment
left: {some_node_id} // a single Id
right: {rhs} // a captured value (inside rule!)
)
yeast::trees!(ctx,
(assignment left: {tmp} right: {right})
{extra_nodes} // splices a Vec<Id>
left: {some_node_id} // insert a pre-built node
right: {rhs} // insert a captured value (inside rule!)
)
```
@@ -291,47 +277,20 @@ expressions (with `let` bindings) work too:
})
```
Inside `rule!`, captures are Rust variables — `{name}` works for
single, optional, and repeated captures alike:
`{..expr}` splices a `Vec<Id>` (or any iterable of `Id`); the contents
are likewise a Rust block, so the splice can be the result of arbitrary
computation:
```rust
rule!(
(assignment left: @lhs right: _* @parts)
=>
(assignment left: {lhs} right: (block stmt: {parts}))
yeast::trees!(ctx,
(assignment left: {tmp} right: {right})
{..extra_nodes} // splice a Vec<Id>
)
```
### Raw captures (`@@name`)
The default `@name` capture marker is *auto-translated*: in OneShot
phases the macro recursively translates the captured node before
binding it, so `{name}` in the output template splices a node that
already conforms to the output schema.
For rules that need the raw (input-schema) capture — typically to read
its source text or to translate it explicitly with mutable context
state between calls — use `@@name` instead. The body sees the original
input-schema `Id`:
```rust
yeast::rule!(
(assignment left: (_) @@raw_lhs right: (_) @rhs)
=>
{
// raw_lhs is untranslated: read its original source text.
let text = ctx.ast.source_text(raw_lhs);
// rhs is already translated by the auto-translate prefix.
tree!((call
method: (identifier #{text.as_str()})
receiver: {rhs}))
}
);
```
Mix `@` and `@@` freely in the same rule. In a Repeating phase both
markers are equivalent (auto-translation is a no-op for repeating
rules).
Inside `rule!`, captures are Rust variables, so `{name}` inserts a
single capture (`Id`) and `{..name}` splices a repeated capture
(`Vec<Id>`).
## Complete example: for-loop desugaring

View File

@@ -158,6 +158,15 @@ impl<'a, C> BuildCtx<'a, C> {
self.ast
.create_named_token_with_range(kind, generated, self.source_range)
}
/// Prepend a value to a field of an existing node.
pub fn prepend_field(&mut self, node_id: Id, field_name: &str, value_id: Id) {
let field_id = self
.ast
.field_id_for_name(field_name)
.unwrap_or_else(|| panic!("build: field '{field_name}' not found"));
self.ast.prepend_field_child(node_id, field_id, value_id);
}
}
impl<C: Clone> BuildCtx<'_, C> {
@@ -167,6 +176,9 @@ impl<C: Clone> BuildCtx<'_, C> {
/// (translation is not meaningful when input and output share a
/// schema).
///
/// Accepts any value convertible to [`Id`] (including [`crate::NodeRef`]),
/// so manual rules can pass capture bindings directly without unwrapping.
///
/// Errors if this `BuildCtx` was constructed by hand (without a
/// translator handle) — for example, in unit tests that don't go
/// through the rule driver.
@@ -177,6 +189,20 @@ impl<C: Clone> BuildCtx<'_, C> {
None => Err("translate() called on a BuildCtx without a translator handle".into()),
}
}
/// Translate an optional capture, returning the first translated id or
/// `None`. Convenience for `?`-quantifier captures (`Option<NodeRef>`).
///
/// If the underlying translation produces multiple ids for a single
/// input, only the first is returned. For most use cases (e.g.
/// translating a single type annotation) this is what you want; if
/// you need all ids, use [`translate`] directly.
pub fn translate_opt<I: Into<Id>>(&mut self, id: Option<I>) -> Result<Option<Id>, String> {
match id {
Some(id) => Ok(self.translate(id)?.into_iter().next()),
None => Ok(None),
}
}
}
impl<C> std::ops::Deref for BuildCtx<'_, C> {

View File

@@ -54,24 +54,24 @@ impl Captures {
self.captures.entry(key).or_default().push(id);
}
/// Apply a fallible function to every captured id, replacing each id
/// with the results. A function returning an empty vector removes
/// the capture; returning multiple ids splices them into the
/// capture's value list (suitable for `*`/`+` captures). Captures
/// whose name appears in `skip` are left untouched. Stops and
/// returns the error on the first failure.
///
/// Used by the `rule!` macro's auto-translate prefix to translate
/// every capture except those marked `@@name` (raw).
pub fn try_map_captures_except<E>(
pub fn map_captures(&mut self, kind: &str, f: &mut impl FnMut(Id) -> Id) {
if let Some(ids) = self.captures.get_mut(kind) {
for id in ids {
*id = f(*id);
}
}
}
/// Apply a fallible function to every captured id (across all keys),
/// replacing each id with the results. A function returning an empty
/// vector removes the capture; returning multiple ids splices them
/// into the capture's value list (suitable for `*`/`+` captures).
/// Stops and returns the error on the first failure.
pub fn try_map_all_captures<E>(
&mut self,
skip: &[&str],
mut f: impl FnMut(Id) -> Result<Vec<Id>, E>,
) -> Result<(), E> {
for (name, ids) in self.captures.iter_mut() {
if skip.contains(name) {
continue;
}
for ids in self.captures.values_mut() {
let mut new_ids = Vec::with_capacity(ids.len());
for &id in ids.iter() {
new_ids.extend(f(id)?);
@@ -80,6 +80,12 @@ impl Captures {
}
Ok(())
}
pub fn map_captures_to(&mut self, from: &str, to: &'static str, f: &mut impl FnMut(Id) -> Id) {
if let Some(from_ids) = self.captures.get(from) {
let new_values = from_ids.iter().copied().map(f).collect();
self.captures.insert(to, new_values);
}
}
pub fn merge(&mut self, other: &Captures) {
for (key, ids) in &other.captures {

View File

@@ -0,0 +1,8 @@
pub trait Cursor<'a, T, N, F> {
fn node(&self) -> &'a N;
fn field_id(&self) -> Option<F>;
fn field_name(&self) -> Option<&'static str>;
fn goto_first_child(&mut self) -> bool;
fn goto_next_sibling(&mut self) -> bool;
fn goto_parent(&mut self) -> bool;
}

View File

@@ -1,6 +1,6 @@
use std::fmt::Write;
use crate::{schema::Schema, Ast, Id, Node, NodeContent, CHILD_FIELD};
use crate::{schema::Schema, Ast, Node, NodeContent, CHILD_FIELD};
/// Options for controlling AST dump output.
pub struct DumpOptions {
@@ -34,11 +34,16 @@ impl Default for DumpOptions {
/// method:
/// identifier "foo"
/// ```
pub fn dump_ast(ast: &Ast, root: Id, source: &str) -> String {
pub fn dump_ast(ast: &Ast, root: usize, source: &str) -> String {
dump_ast_with_options(ast, root, source, &DumpOptions::default())
}
pub fn dump_ast_with_options(ast: &Ast, root: Id, source: &str, options: &DumpOptions) -> String {
pub fn dump_ast_with_options(
ast: &Ast,
root: usize,
source: &str,
options: &DumpOptions,
) -> String {
let mut out = String::new();
dump_node(ast, root, source, options, 0, None, &mut out);
out
@@ -48,7 +53,7 @@ pub fn dump_ast_with_options(ast: &Ast, root: Id, source: &str, options: &DumpOp
///
/// Any node that does not match the expected type set for its parent field is
/// rendered with a trailing `" <-- ERROR: ..."` annotation on the same line.
pub fn dump_ast_with_type_errors(ast: &Ast, root: Id, source: &str, schema: &Schema) -> String {
pub fn dump_ast_with_type_errors(ast: &Ast, root: usize, source: &str, schema: &Schema) -> String {
dump_ast_with_type_errors_and_options(ast, root, source, schema, &DumpOptions::default())
}
@@ -58,7 +63,7 @@ pub fn dump_ast_with_type_errors(ast: &Ast, root: Id, source: &str, schema: &Sch
/// rendered with a trailing `" <-- ERROR: ..."` annotation on the same line.
pub fn dump_ast_with_type_errors_and_options(
ast: &Ast,
root: Id,
root: usize,
source: &str,
schema: &Schema,
options: &DumpOptions,
@@ -171,7 +176,7 @@ fn expected_for_field<'a>(
fn dump_node(
ast: &Ast,
id: Id,
id: usize,
source: &str,
options: &DumpOptions,
indent: usize,
@@ -310,7 +315,7 @@ fn dump_node(
/// Dump a leaf node inline (no newline prefix, caller provides context).
fn dump_node_inline(
ast: &Ast,
id: Id,
id: usize,
source: &str,
options: &DumpOptions,
type_check: Option<(

View File

@@ -7,6 +7,7 @@ use serde_json::{json, Value};
pub mod build;
pub mod captures;
pub mod cursor;
pub mod dump;
pub mod node_types_yaml;
pub mod query;
@@ -15,64 +16,35 @@ pub mod schema;
pub mod tree_builder;
mod visitor;
pub use yeast_macros::{query, rule, tree, trees};
pub use yeast_macros::{manual_rule, query, rule, tree, trees};
use captures::Captures;
pub use cursor::Cursor;
use query::QueryNode;
/// Node id: an index into the [`Ast`] arena. A newtype around `usize`
/// rather than a bare alias so that it can carry its own
/// [`YeastDisplay`] / [`YeastSourceRange`] / [`IntoFieldIds`] impls
/// without colliding with the impls for plain integers.
///
/// Use `id.0` (or `id.into()`) to obtain the raw arena index.
#[repr(transparent)]
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Hash, Serialize)]
pub struct Id(pub usize);
impl From<usize> for Id {
fn from(value: usize) -> Self {
Id(value)
}
}
impl From<Id> for usize {
fn from(value: Id) -> Self {
value.0
}
}
/// Node ids are indexes into the arena
pub type Id = usize;
/// Field and Kind ids are provided by tree-sitter
type FieldId = u16;
type KindId = u16;
/// Trait for values that can be appended to a field's id list inside a
/// `tree!`/`trees!`/`rule!` template (in `{expr}` placeholders).
///
/// `Id` pushes a single id; the blanket impl for
/// `IntoIterator<Item: Into<Id>>` handles `Vec<Id>`, `Option<Id>`,
/// arbitrary iterators yielding `Id`, etc.
///
/// This lets `{expr}` interpolate any of these shapes without a
/// dedicated splice syntax — the macro emits the same trait-dispatched
/// call regardless of the value's type.
pub trait IntoFieldIds {
fn extend_into(self, out: &mut Vec<Id>);
}
/// A typed reference to a node in an [`Ast`] arena. Wraps an [`Id`] but
/// deliberately does not implement [`std::fmt::Display`]: rendering a node
/// requires the [`Ast`] it lives in (to resolve [`NodeContent::Range`] back
/// to source text). Use [`YeastDisplay::yeast_to_string`] to format it.
#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
pub struct NodeRef(pub Id);
impl IntoFieldIds for Id {
fn extend_into(self, out: &mut Vec<Id>) {
out.push(self);
impl NodeRef {
pub fn id(self) -> Id {
self.0
}
}
impl<I, T> IntoFieldIds for I
where
I: IntoIterator<Item = T>,
T: Into<Id>,
{
fn extend_into(self, out: &mut Vec<Id>) {
out.extend(self.into_iter().map(Into::into));
impl From<NodeRef> for Id {
fn from(value: NodeRef) -> Self {
value.0
}
}
@@ -89,21 +61,21 @@ pub trait YeastDisplay {
/// Optional source range for values used in `#{expr}` interpolations.
///
/// By default this returns `None`, so synthesized leaves inherit the matched
/// rule's source range. `Id` returns the referenced node's range, letting
/// rule's source range. `NodeRef` returns the referenced node's range, letting
/// `(kind #{capture})` carry the captured node's location.
pub trait YeastSourceRange {
fn yeast_source_range(&self, ast: &Ast) -> Option<tree_sitter::Range>;
}
impl YeastDisplay for Id {
impl YeastDisplay for NodeRef {
fn yeast_to_string(&self, ast: &Ast) -> String {
ast.source_text(*self)
ast.source_text(self.0)
}
}
impl YeastSourceRange for Id {
impl YeastSourceRange for NodeRef {
fn yeast_source_range(&self, ast: &Ast) -> Option<tree_sitter::Range> {
ast.get_node(*self).and_then(|n| match &n.content {
ast.get_node(self.0).and_then(|n| match &n.content {
NodeContent::Range(r) => Some(r.clone()),
_ => n.source_range,
})
@@ -172,36 +144,6 @@ impl<'a> AstCursor<'a> {
self.node_id
}
pub fn node(&self) -> &'a Node {
&self.ast.nodes[self.node_id.0]
}
pub fn field_id(&self) -> Option<FieldId> {
let (_, children) = self.parents.last()?;
children.current_field()
}
pub fn field_name(&self) -> Option<&'static str> {
if self.field_id() == Some(CHILD_FIELD) {
None
} else {
self.field_id()
.and_then(|id| self.ast.field_name_for_id(id))
}
}
pub fn goto_first_child(&mut self) -> bool {
self.goto_first_child_opt().is_some()
}
pub fn goto_next_sibling(&mut self) -> bool {
self.goto_next_sibling_opt().is_some()
}
pub fn goto_parent(&mut self) -> bool {
self.goto_parent_opt().is_some()
}
fn goto_next_sibling_opt(&mut self) -> Option<()> {
self.node_id = self.parents.last_mut()?.1.next()?;
Some(())
@@ -222,6 +164,37 @@ impl<'a> AstCursor<'a> {
Some(())
}
}
impl<'a> Cursor<'a, Ast, Node, FieldId> for AstCursor<'a> {
fn node(&self) -> &'a Node {
&self.ast.nodes[self.node_id]
}
fn field_id(&self) -> Option<FieldId> {
let (_, children) = self.parents.last()?;
children.current_field()
}
fn field_name(&self) -> Option<&'static str> {
if self.field_id() == Some(CHILD_FIELD) {
None
} else {
self.field_id()
.and_then(|id| self.ast.field_name_for_id(id))
}
}
fn goto_first_child(&mut self) -> bool {
self.goto_first_child_opt().is_some()
}
fn goto_next_sibling(&mut self) -> bool {
self.goto_next_sibling_opt().is_some()
}
fn goto_parent(&mut self) -> bool {
self.goto_parent_opt().is_some()
}
}
/// An iterator over the child Ids of a node.
#[derive(Debug)]
@@ -368,16 +341,16 @@ impl Ast {
///
/// This reflects the effective AST after desugaring and excludes orphaned
/// arena nodes left behind by rewrite operations.
pub fn reachable_node_ids(&self) -> Vec<Id> {
pub fn reachable_node_ids(&self) -> Vec<usize> {
let mut reachable = Vec::new();
let mut stack = vec![self.root];
let mut seen = vec![false; self.nodes.len()];
while let Some(id) = stack.pop() {
if id.0 >= self.nodes.len() || seen[id.0] {
if id >= self.nodes.len() || seen[id] {
continue;
}
seen[id.0] = true;
seen[id] = true;
reachable.push(id);
if let Some(node) = self.get_node(id) {
@@ -401,11 +374,11 @@ impl Ast {
}
pub fn get_node(&self, id: Id) -> Option<&Node> {
self.nodes.get(id.0)
self.nodes.get(id)
}
pub fn print(&self, source: &str, root_id: Id) -> Value {
let root = &self.nodes()[root_id.0];
let root = &self.nodes()[root_id];
self.print_node(root, source)
}
@@ -448,7 +421,7 @@ impl Ast {
is_named,
source_range,
});
Id(id)
id
}
fn union_source_range_of_children(
@@ -515,6 +488,15 @@ impl Ast {
self.create_named_token_with_range(kind, content, None)
}
/// Prepend a child id to the given field of the given node.
pub fn prepend_field_child(&mut self, node_id: Id, field_id: FieldId, value_id: Id) {
let node = self
.nodes
.get_mut(node_id)
.expect("prepend_field_child: invalid node id");
node.fields.entry(field_id).or_default().insert(0, value_id);
}
pub fn create_named_token_with_range(
&mut self,
kind: &'static str,
@@ -536,7 +518,7 @@ impl Ast {
fields: BTreeMap::new(),
content: NodeContent::DynamicString(content),
});
Id(id)
id
}
pub fn field_name_for_id(&self, id: FieldId) -> Option<&'static str> {
@@ -620,6 +602,10 @@ pub struct Node {
}
impl Node {
pub fn kind(&self) -> &'static str {
self.kind_name
}
pub fn kind_name(&self) -> &'static str {
self.kind_name
}
@@ -771,14 +757,13 @@ impl<'a, C: Clone> TranslatorHandle<'a, C> {
}
/// Translate every captured node in `captures` in place (OneShot phase
/// only), except for captures whose name appears in `skip` — those are
/// left as raw (input-schema) ids for the rule body to consume
/// directly. In a Repeating phase this is a no-op — Repeating rules
/// receive raw captures regardless of `skip`.
/// only). In a Repeating phase this is a no-op — Repeating rules
/// receive raw captures.
///
/// Used by the `rule!` macro's generated prefix. `skip` is populated
/// from the macro's `@@name` capture markers; for plain `@name`
/// captures (and rules with no `@@` markers) it is empty.
/// Used by the `rule!` macro's generated prefix to preserve the
/// pre-existing "auto-translate captures before running the transform
/// body" behavior. Manually-written transforms typically translate
/// captures selectively via [`translate`] instead.
///
/// To avoid infinite recursion, a capture whose id matches the rule's
/// matched root (e.g. from a `(_) @_` pattern) is left unchanged.
@@ -787,12 +772,11 @@ impl<'a, C: Clone> TranslatorHandle<'a, C> {
captures: &mut Captures,
ast: &mut Ast,
user_ctx: &mut C,
skip: &[&str],
) -> Result<(), String> {
match &self.inner {
TranslatorImpl::OneShot { matched_root, .. } => {
let root = *matched_root;
captures.try_map_captures_except(skip, |cid| {
captures.try_map_all_captures(|cid| {
if cid == root {
Ok(vec![cid])
} else {
@@ -964,7 +948,7 @@ fn apply_repeating_rules_inner<C: Clone>(
));
}
let node_kind = ast.get_node(id).map(|n| n.kind_name()).unwrap_or("");
let node_kind = ast.get_node(id).map(|n| n.kind()).unwrap_or("");
for rule in index.rules_for_kind(node_kind) {
let rule_ptr = *rule as *const Rule<C>;
if Some(rule_ptr) == skip_rule {
@@ -1016,7 +1000,7 @@ fn apply_repeating_rules_inner<C: Clone>(
//
// Child traversal does not increment rewrite depth and starts fresh
// (no rule is skipped on child subtrees).
let mut fields = std::mem::take(&mut ast.nodes[id.0].fields);
let mut fields = std::mem::take(&mut ast.nodes[id].fields);
for children in fields.values_mut() {
let mut new_children: Option<Vec<Id>> = None;
for (i, &child_id) in children.iter().enumerate() {
@@ -1049,7 +1033,7 @@ fn apply_repeating_rules_inner<C: Clone>(
*children = new;
}
}
ast.nodes[id.0].fields = fields;
ast.nodes[id].fields = fields;
Ok(vec![id])
}
@@ -1083,7 +1067,7 @@ fn apply_one_shot_rules_inner<C: Clone>(
));
}
let node_kind = ast.get_node(id).map(|n| n.kind_name()).unwrap_or("");
let node_kind = ast.get_node(id).map(|n| n.kind()).unwrap_or("");
for rule in index.rules_for_kind(node_kind) {
if let Some(captures) = rule.try_match(ast, id)? {

View File

@@ -49,7 +49,7 @@ impl Visitor {
pub fn build_with_schema(self, schema: crate::schema::Schema) -> Ast {
Ast {
root: Id(0),
root: 0,
schema,
nodes: self.nodes.into_iter().map(|n| n.inner).collect(),
source: Vec::new(),
@@ -72,7 +72,7 @@ impl Visitor {
},
parent: self.current,
});
Id(id)
id
}
fn enter_node(&mut self, node: tree_sitter::Node<'_>) -> bool {
@@ -83,10 +83,10 @@ impl Visitor {
fn leave_node(&mut self, field_name: Option<&'static str>, _node: tree_sitter::Node<'_>) {
let node_id = self.current.unwrap();
let node_parent = self.nodes[node_id.0].parent;
let node_parent = self.nodes[node_id].parent;
if let Some(parent_id) = node_parent {
let parent = self.nodes.get_mut(parent_id.0).unwrap();
let parent = self.nodes.get_mut(parent_id).unwrap();
if let Some(field) = field_name {
let field_id = self.language.field_id_for_name(field).unwrap().get();
parent

View File

@@ -300,7 +300,7 @@ fn test_query_skips_extras_in_positional_match() {
let mut cursor = AstCursor::new(&ast);
cursor.goto_first_child();
let array_id = cursor.node_id();
assert_eq!(ast.get_node(array_id).unwrap().kind_name(), "array");
assert_eq!(ast.get_node(array_id).unwrap().kind(), "array");
// Two positional wildcards should bind to the two integers, skipping
// the comment that sits between them.
@@ -309,15 +309,11 @@ fn test_query_skips_extras_in_positional_match() {
let matched = query.do_match(&ast, array_id, &mut captures).unwrap();
assert!(matched);
assert_eq!(
ast.get_node(captures.get_var("a").unwrap())
.unwrap()
.kind_name(),
ast.get_node(captures.get_var("a").unwrap()).unwrap().kind(),
"integer"
);
assert_eq!(
ast.get_node(captures.get_var("b").unwrap())
.unwrap()
.kind_name(),
ast.get_node(captures.get_var("b").unwrap()).unwrap().kind(),
"integer"
);
}
@@ -395,7 +391,7 @@ fn test_capture_unnamed_node_parenthesized() {
assert!(matched);
let op_id = captures.get_var("op").unwrap();
let op_node = ast.get_node(op_id).unwrap();
assert_eq!(op_node.kind_name(), "=");
assert_eq!(op_node.kind(), "=");
assert!(!op_node.is_named());
}
@@ -418,7 +414,7 @@ fn test_capture_bare_underscore_repeated() {
let all = captures.get_all("all");
assert_eq!(all.len(), 1);
assert_eq!(ast.get_node(all[0]).unwrap().kind_name(), "=");
assert_eq!(ast.get_node(all[0]).unwrap().kind(), "=");
assert!(!ast.get_node(all[0]).unwrap().is_named());
}
@@ -445,7 +441,7 @@ fn test_capture_unnamed_node_bare_literal() {
assert!(matched);
let op_id = captures.get_var("op").unwrap();
let op_node = ast.get_node(op_id).unwrap();
assert_eq!(op_node.kind_name(), "=");
assert_eq!(op_node.kind(), "=");
assert!(!op_node.is_named());
}
@@ -483,7 +479,7 @@ fn test_bare_underscore_matches_unnamed() {
.unwrap();
assert!(matched, "_ should match the unnamed `=`");
let any_node = ast.get_node(captures.get_var("any").unwrap()).unwrap();
assert_eq!(any_node.kind_name(), "=");
assert_eq!(any_node.kind(), "=");
assert!(!any_node.is_named());
}
@@ -510,7 +506,7 @@ fn test_bare_forms_in_field_position() {
assert_eq!(
ast.get_node(captures.get_var("lhs").unwrap())
.unwrap()
.kind_name(),
.kind(),
"identifier"
);
@@ -520,7 +516,7 @@ fn test_bare_forms_in_field_position() {
let matched = query.do_match(&ast, assignment_id, &mut captures).unwrap();
assert!(matched);
let op = ast.get_node(captures.get_var("op").unwrap()).unwrap();
assert_eq!(op.kind_name(), "=");
assert_eq!(op.kind(), "=");
assert!(!op.is_named());
}
@@ -539,7 +535,7 @@ fn test_forward_scan_finds_unnamed_token_late() {
let mut cursor = AstCursor::new(&ast);
cursor.goto_first_child(); // for
cursor.goto_first_child(); // do (the body)
while cursor.node().kind_name() != "do" || !cursor.node().is_named() {
while cursor.node().kind() != "do" || !cursor.node().is_named() {
assert!(cursor.goto_next_sibling(), "expected to find named `do`");
}
let do_id = cursor.node_id();
@@ -549,7 +545,7 @@ fn test_forward_scan_finds_unnamed_token_late() {
let matched = query.do_match(&ast, do_id, &mut captures).unwrap();
assert!(matched, "forward-scan should find the `end` keyword");
let kw = ast.get_node(captures.get_var("kw").unwrap()).unwrap();
assert_eq!(kw.kind_name(), "end");
assert_eq!(kw.kind(), "end");
assert!(!kw.is_named());
}
@@ -565,7 +561,7 @@ fn test_forward_scan_preserves_order() {
let mut cursor = AstCursor::new(&ast);
cursor.goto_first_child();
cursor.goto_first_child();
while cursor.node().kind_name() != "do" || !cursor.node().is_named() {
while cursor.node().kind() != "do" || !cursor.node().is_named() {
assert!(cursor.goto_next_sibling(), "expected to find named `do`");
}
let do_id = cursor.node_id();
@@ -639,7 +635,7 @@ fn ruby_rules() -> Vec<Rule> {
left: (identifier $tmp)
right: {right}
)
{left.iter().enumerate().map(|(i, &lhs)|
{..left.iter().enumerate().map(|(i, &lhs)|
yeast::tree!(
(assignment
left: {lhs}
@@ -671,7 +667,7 @@ fn ruby_rules() -> Vec<Rule> {
left: {pat}
right: (identifier $tmp)
)
stmt: {body}
stmt: {..body}
)
)
)
@@ -907,7 +903,7 @@ fn one_shot_xeq1_rules() -> Vec<Rule> {
yeast::rule!(
(program (_)* @stmts)
=>
(program stmt: {stmts})
(program stmt: {..stmts})
),
yeast::rule!(
(assignment left: (_) @left right: (_) @right)
@@ -983,7 +979,7 @@ fn test_one_shot_recurses_into_returned_capture() {
yeast::rule!(
(program (_)* @stmts)
=>
(program stmt: {stmts})
(program stmt: {..stmts})
),
// Returns the captured `left` verbatim, discarding `right`.
yeast::rule!(
@@ -1025,7 +1021,7 @@ fn test_one_shot_does_not_recurse_into_wrapper_output() {
yeast::rule!(
(program (_)* @stmts)
=>
(program stmt: {stmts})
(program stmt: {..stmts})
),
// Wraps `left` in nested `first_node`/`second_node` output kinds.
// Neither wrapper kind has a matching rule, so a buggy implementation
@@ -1062,111 +1058,6 @@ fn test_one_shot_does_not_recurse_into_wrapper_output() {
);
}
/// Verify that `@@name` capture markers skip the auto-translate prefix:
/// the body sees the *raw* (input-schema) `Id` and can read its
/// source text or call `ctx.translate(...)` explicitly. Compare with
/// the bare `@name` form, where the auto-translate prefix runs the
/// same translation up front and the body sees the post-translate id.
#[test]
fn test_raw_capture_marker() {
let lang: tree_sitter::Language = tree_sitter_ruby::LANGUAGE.into();
let schema =
yeast::node_types_yaml::schema_from_yaml_with_language(OUTPUT_SCHEMA_YAML, &lang).unwrap();
let rules: Vec<Rule> = vec![
yeast::rule!(
(program (_)* @stmts)
=>
(program stmt: {stmts})
),
// `@@raw_lhs` is untranslated: the body reads its source text
// ("x") and embeds it directly as the identifier content. `@rhs`
// is auto-translated (rhs already points to (integer "INT")).
yeast::rule!(
(assignment left: (_) @@raw_lhs right: (_) @rhs)
=>
{
let text = ctx.ast.source_text(raw_lhs);
tree!((call
method: (identifier #{text.as_str()})
receiver: {rhs}))
}
),
yeast::rule!((identifier) => (identifier "ID")),
yeast::rule!((integer) => (integer "INT")),
];
let phases = vec![Phase::new("translate", PhaseKind::OneShot, rules)];
let runner: Runner = Runner::with_schema(lang, &schema, &phases);
let input = "x = 1";
let ast = runner.run(input).unwrap();
let dump = dump_ast(&ast, ast.get_root(), input);
// `method:` uses the raw source text ("x"); if `@@` were broken and
// auto-translation ran on `raw_lhs`, it would still produce the
// string "x" (source_text inherits the input range), so the dump
// wouldn't change here. The companion test
// `test_raw_capture_marker_explicit_translate` exercises the
// stronger property that `ctx.translate(raw_lhs)?` succeeds and
// produces the translated `(identifier "ID")`.
assert_dump_eq(
&dump,
r#"
program
stmt:
call
method: identifier "x"
receiver: integer "INT"
"#,
);
}
/// Companion to `test_raw_capture_marker`: confirms that calling
/// `ctx.translate(raw)` on a `@@`-captured `Id` from the rule body
/// produces the correctly-translated output-schema node. With `@`, the
/// translation has already happened, so `ctx.translate(...)` inside the
/// body would attempt to re-translate an output node (which has no
/// matching rule and would error).
#[test]
fn test_raw_capture_marker_explicit_translate() {
let lang: tree_sitter::Language = tree_sitter_ruby::LANGUAGE.into();
let schema =
yeast::node_types_yaml::schema_from_yaml_with_language(OUTPUT_SCHEMA_YAML, &lang).unwrap();
let rules: Vec<Rule> = vec![
yeast::rule!(
(program (_)* @stmts)
=>
(program stmt: {stmts})
),
yeast::rule!(
(assignment left: (_) @@raw_lhs right: (_) @rhs)
=>
{
let translated_lhs = ctx.translate(raw_lhs)?;
tree!((call
method: {translated_lhs}
receiver: {rhs}))
}
),
yeast::rule!((identifier) => (identifier "ID")),
yeast::rule!((integer) => (integer "INT")),
];
let phases = vec![Phase::new("translate", PhaseKind::OneShot, rules)];
let runner: Runner = Runner::with_schema(lang, &schema, &phases);
let input = "x = 1";
let ast = runner.run(input).unwrap();
let dump = dump_ast(&ast, ast.get_root(), input);
assert_dump_eq(
&dump,
r#"
program
stmt:
call
method: identifier "ID"
receiver: integer "INT"
"#,
);
}
// ---- Cursor tests ----
#[test]
@@ -1176,11 +1067,11 @@ fn test_cursor_navigation() {
let mut cursor = AstCursor::new(&ast);
// Start at root
assert_eq!(cursor.node().kind_name(), "program");
assert_eq!(cursor.node().kind(), "program");
// Go to first child (assignment)
assert!(cursor.goto_first_child());
assert_eq!(cursor.node().kind_name(), "assignment");
assert_eq!(cursor.node().kind(), "assignment");
// No sibling
assert!(!cursor.goto_next_sibling());
@@ -1191,10 +1082,10 @@ fn test_cursor_navigation() {
// Go back up
assert!(cursor.goto_parent());
assert_eq!(cursor.node().kind_name(), "assignment");
assert_eq!(cursor.node().kind(), "assignment");
assert!(cursor.goto_parent());
assert_eq!(cursor.node().kind_name(), "program");
assert_eq!(cursor.node().kind(), "program");
// Can't go further up
assert!(!cursor.goto_parent());
@@ -1239,8 +1130,10 @@ fn test_desugar_for_with_multiple_assignment() {
}
/// Regression test: `#{capture}` in a template must render the *source text*
/// of the captured node, not its arena `Id`. Captures are bound as `Id`,
/// whose `YeastDisplay` impl resolves to the captured node's source text.
/// of the captured node, not its arena `Id`. Previously, captures were bound
/// as `usize`, so `#{cap}` printed the integer id (e.g. `"3"`) via `Display`.
/// Captures are now bound as `NodeRef`, which has no `Display` impl and
/// resolves to the captured node's source text via `YeastDisplay`.
#[test]
fn test_hash_brace_renders_capture_source_text() {
let rule: Rule = rule!(
@@ -1268,7 +1161,7 @@ fn test_hash_brace_renders_capture_source_text() {
);
}
/// Regression test: non-`Id` values in `#{expr}` still render via their
/// Regression test: non-`NodeRef` values in `#{expr}` still render via their
/// `Display` impl (covered by `YeastDisplay`'s blanket impls for primitives).
#[test]
fn test_hash_brace_renders_integer_expression() {
@@ -1306,12 +1199,12 @@ fn test_hash_brace_uses_capture_location_for_leaf() {
let ast = run_and_ast("foo.bar()", vec![rule]);
let mut bar_ids: Vec<yeast::Id> = Vec::new();
let mut bar_ids: Vec<usize> = Vec::new();
for id in ast.reachable_node_ids() {
let Some(node) = ast.get_node(id) else {
continue;
};
if node.kind_name() == "identifier" && ast.source_text(id) == "bar" {
if node.kind() == "identifier" && ast.source_text(id) == "bar" {
bar_ids.push(id);
}
}

View File

@@ -42,7 +42,6 @@ supertypes:
- name_pattern
- tuple_pattern
- constructor_pattern
- or_pattern
- ignore_pattern
- expr_equality_pattern
- bulk_importing_pattern
@@ -360,12 +359,12 @@ named:
case*: switch_case
# A single `case ...:` (or `default:`) entry in a switch.
# An entry with multiple `case p1, p2:` patterns uses an `or_pattern`.
# A `default:` entry has no pattern.
# An entry with multiple `case p1, p2:` patterns has multiple `pattern`s.
# A `default:` entry has no patterns.
# An optional `guard` corresponds to a `where`-clause on the case.
switch_case:
modifier*: modifier
pattern?: pattern
pattern*: pattern
guard?: expr
body: block
@@ -422,11 +421,6 @@ named:
constructor: expr_or_type
element*: pattern_element
# A disjunction pattern that matches if any of its sub-patterns match.
or_pattern:
modifier*: modifier
pattern*: pattern
# A pattern with an optional associated name.
pattern_element:
modifier*: modifier

View File

@@ -1,5 +1,5 @@
use codeql_extractor::extractor::simple;
use yeast::{ConcreteDesugarer, DesugaringConfig, PhaseKind, Rule, rule, tree};
use yeast::{ConcreteDesugarer, DesugaringConfig, PhaseKind, Rule, manual_rule, rule, tree};
/// User context propagated from outer rules down to the inner rules that
/// emit the corresponding output declarations, so that each emitted node
@@ -45,7 +45,7 @@ struct SwiftContext {
/// Build a freshly-created `chained_declaration` modifier node if
/// `ctx.is_chained`, else `None`. Used by inner declaration rules to
/// emit the chained tag for non-first children of a flattening outer
/// rule. Returns `Option<Id>` so it splices via `{…}` to 0 or 1 ids.
/// rule. Returns `Option<Id>` so it splices via `{..…}` to 0 or 1 ids.
fn chained_modifier(ctx: &mut yeast::build::BuildCtx<'_, SwiftContext>) -> Option<yeast::Id> {
if ctx.is_chained {
Some(ctx.literal("modifier", "chained_declaration"))
@@ -63,10 +63,10 @@ fn chained_modifier(ctx: &mut yeast::build::BuildCtx<'_, SwiftContext>) -> Optio
/// condition.
fn and_chain(
ctx: &mut yeast::build::BuildCtx<'_, SwiftContext>,
conds: Vec<yeast::Id>,
conds: Vec<yeast::NodeRef>,
) -> yeast::Id {
conds
.into_iter()
conds.into_iter()
.map(yeast::Id::from)
.reduce(|acc, elem| {
tree!((binary_expr operator: (infix_operator "&&") left: {acc} right: {elem}))
})
@@ -79,7 +79,7 @@ fn and_chain(
/// guarantees at least one part.
fn member_chain(
ctx: &mut yeast::build::BuildCtx<'_, SwiftContext>,
parts: Vec<yeast::Id>,
parts: Vec<yeast::NodeRef>,
) -> yeast::Id {
let mut iter = parts.into_iter();
let first = iter
@@ -100,7 +100,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(source_file statement: _* @children)
=>
(top_level
body: (block stmt: {children})
body: (block stmt: {..children})
)
),
// Declarations may be wrapped in local/global wrapper nodes.
@@ -144,12 +144,12 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
rule!(
(operator_declaration "prefix" (referenceable_operator _ @op) (simple_identifier)? @prec)
=>
(operator_syntax_declaration name: (identifier #{op}) fixity: (fixity "prefix") precedence: {prec})
(operator_syntax_declaration name: (identifier #{op}) fixity: (fixity "prefix") precedence: {..prec})
),
rule!(
(operator_declaration "postfix" (referenceable_operator _ @op) (simple_identifier)? @prec)
=>
(operator_syntax_declaration name: (identifier #{op}) fixity: (fixity "postfix") precedence: {prec})
(operator_syntax_declaration name: (identifier #{op}) fixity: (fixity "postfix") precedence: {..prec})
),
rule!(
(operator_declaration "infix" (referenceable_operator _ @op) (simple_identifier)? @prec)
@@ -157,7 +157,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(operator_syntax_declaration
name: (identifier #{op})
fixity: (fixity "infix")
precedence: {prec})
precedence: {..prec})
),
rule!((bitwise_operation lhs: @l op: @op rhs: @r) => (binary_expr left: {l} operator: (infix_operator #{op}) right: {r})),
rule!((nil_coalescing_expression value: @l if_nil: @r) => (binary_expr left: {l} operator: (infix_operator "??") right: {r})),
@@ -170,9 +170,9 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
rule!((postfix_expression operation: @op target: @operand) => (unary_expr operator: (postfix_operator #{op}) operand: {operand})),
// TODO: Parenthesised single-value tuple is a grouping expression and should pass through.
// Multi-value tuples become tuple_expr.
rule!((tuple_expression value: _* @v) => (tuple_expr element: {v})),
rule!((tuple_expression value: _* @v) => (tuple_expr element: {..v})),
// Blocks contain statement* directly.
rule!((block statement: _+ @stmts) => (block stmt: {stmts})),
rule!((block statement: _+ @stmts) => (block stmt: {..stmts})),
rule!((block) => (block)),
// ---- Variables ----
// property_binding rules — these produce variable_declaration and/or accessor_declaration
@@ -192,15 +192,21 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// this whole property_binding is itself a non-first declarator
// of a containing property_declaration); subsequent accessors
// always emit `chained_declaration`.
rule!(
manual_rule!(
(property_binding
name: @pattern
type: _? @ty
computed_value: (computed_property accessor: _+ @@accessors))
=>
{{
ctx.property_name = Some(tree!((identifier #{pattern})));
ctx.property_type = ty;
computed_value: (computed_property accessor: _+ @accessors))
{
// Translate `ty` first so the context holds an
// output-schema node id.
let translated_ty = ctx.translate_opt(ty)?;
// Build the property-name identifier from the
// (untranslated) pattern leaf.
let name_id = tree!((identifier #{pattern}));
ctx.property_name = Some(name_id);
ctx.property_type = translated_ty;
let mut result = Vec::new();
for (i, acc) in accessors.into_iter().enumerate() {
@@ -209,8 +215,8 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
}
result.extend(ctx.translate(acc)?);
}
result
}}
Ok(result)
}
),
// Computed property: shorthand getter (no explicit get/set, just
// statements) → a single accessor_declaration with kind "get".
@@ -223,13 +229,13 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
computed_value: (computed_property statement: _* @body))
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: (identifier #{name})
type: {ty}
type: {..ty}
accessor_kind: (accessor_kind "get")
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Stored property with willSet/didSet observers (initializer
// optional) → a `variable_declaration` followed by one
@@ -242,22 +248,26 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// The `variable_declaration` itself inherits the outer rule's
// chained state; observers always get `chained_declaration`
// because they're subsequent outputs of this flattening rule.
rule!(
manual_rule!(
(property_binding
name: (pattern bound_identifier: @name)
type: _? @ty
value: _? @val
observers: (willset_didset_block willset: _? @@ws didset: _? @@ds))
=>
{{
observers: (willset_didset_block willset: _? @ws didset: _? @ds))
{
// Translate ty and val so the variable_declaration
// below contains output-schema nodes.
let translated_ty = ctx.translate_opt(ty)?;
let translated_val = ctx.translate_opt(val)?;
let var_decl = tree!(
(variable_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
pattern: (name_pattern identifier: (identifier #{name}))
type: {ty}
value: {val})
type: {..translated_ty}
value: {..translated_val})
);
// Publish the property name for the observer rules.
@@ -270,8 +280,8 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
for obs in ws.into_iter().chain(ds) {
result.extend(ctx.translate(obs)?);
}
result
}}
Ok(result)
}
),
// property_binding with any pattern name (identifier or
// destructuring). Reads outer modifiers / chained tag from `ctx`.
@@ -282,12 +292,12 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
value: _? @val)
=>
(variable_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
pattern: {pattern}
type: {ty}
value: {val})
type: {..ty}
value: {..val})
),
// property_declaration: flatten declarators (each may translate
// to multiple nodes — variable_declaration and/or
@@ -299,24 +309,27 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// inner declaration rules (`property_binding` variants,
// accessor inner rules) read these fields and emit complete
// `modifier:` lists from the start.
rule!(
manual_rule!(
(property_declaration
binding: (value_binding_pattern mutability: @@binding_kind)
declarator: _* @@decls
binding: (value_binding_pattern mutability: @binding_kind)
declarator: _* @decls
(modifiers)* @mods)
=>
{{
let binding_text = ctx.ast.source_text(binding_kind);
{
let binding_text = ctx.ast.source_text(binding_kind.0);
ctx.binding_modifier = Some(ctx.literal("modifier", &binding_text));
ctx.outer_modifiers = mods;
let mut modifiers = Vec::new();
for m in mods {
modifiers.extend(ctx.translate(m)?);
}
ctx.outer_modifiers = modifiers;
let mut result = Vec::new();
for (i, decl) in decls.into_iter().enumerate() {
ctx.is_chained = i > 0;
result.extend(ctx.translate(decl)?);
}
result
}}
Ok(result)
}
),
// ---- Enums ----
// enum_type_parameter → parameter (with optional name as pattern).
@@ -342,19 +355,19 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
data_contents: (enum_type_parameters parameter: _* @params))
=>
(class_like_declaration
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
modifier: (modifier "enum_case")
name: (identifier #{name})
member: (constructor_declaration parameter: {params} body: (block)))
member: (constructor_declaration parameter: {..params} body: (block)))
),
// enum_case_entry with explicit raw value → variable_declaration with that value.
rule!(
(enum_case_entry name: @name raw_value: @val)
=>
(variable_declaration
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
modifier: (modifier "enum_case")
pattern: (name_pattern identifier: (identifier #{name}))
value: {val})
@@ -364,8 +377,8 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(enum_case_entry name: @name)
=>
(variable_declaration
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
modifier: (modifier "enum_case")
pattern: (name_pattern identifier: (identifier #{name})))
),
@@ -373,19 +386,22 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// into `ctx` and translate each case with `ctx.is_chained`
// toggled per iteration so the inner `enum_case_entry` rules
// emit complete `modifier:` lists from the start.
rule!(
(enum_entry case: _+ @@cases (modifiers)* @mods)
=>
{{
ctx.outer_modifiers = mods;
manual_rule!(
(enum_entry case: _+ @cases (modifiers)* @mods)
{
let mut modifiers = Vec::new();
for m in mods {
modifiers.extend(ctx.translate(m)?);
}
ctx.outer_modifiers = modifiers;
let mut result = Vec::new();
for (i, case) in cases.into_iter().enumerate() {
ctx.is_chained = i > 0;
result.extend(ctx.translate(case)?);
}
result
}}
Ok(result)
}
),
// Plain assignment: `x = expr`
rule!(
@@ -418,7 +434,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(constructor_pattern
constructor: (member_access_expr base: {typ} member: (identifier #{name}))
element: {items})
element: {..items})
),
// case .foo(x,y) pattern
rule!(
@@ -426,10 +442,10 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(constructor_pattern
constructor: (member_access_expr base: (inferred_type_expr #{dot}) member: (identifier #{name}))
element: {items})
element: {..items})
),
// Tuple pattern and its (optionally named) items
rule!((pattern kind: (tuple_pattern item: _* @elems)) => (tuple_pattern element: {elems})),
rule!((pattern kind: (tuple_pattern item: _* @elems)) => (tuple_pattern element: {..elems})),
rule!((tuple_pattern_item name: @key pattern: @pat) => (pattern_element key: (identifier #{key}) pattern: {pat})),
rule!((tuple_pattern_item pattern: @pat) => (pattern_element pattern: {pat})),
// Type casting pattern (TODO)
@@ -452,21 +468,20 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(function_declaration
name: (identifier #{name})
parameter: {params}
return_type: {ret}
body: (block stmt: {body_stmts}))
parameter: {..params}
return_type: {..ret}
body: (block stmt: {..body_stmts}))
),
// Parameters are wrapped in function_parameter, which also carries
// optional default values. Publishes the default value into `ctx`
// before translating the inner `parameter` so the `parameter`
// rules can include it as a `default:` field directly.
rule!(
(function_parameter parameter: @@p default_value: _? @def)
=>
{{
ctx.default_value = def;
ctx.translate(p)?
}}
manual_rule!(
(function_parameter parameter: @p default_value: _? @def)
{
ctx.default_value = ctx.translate_opt(def)?;
ctx.translate(p)
}
),
// Parameter with external name and type
rule!(
@@ -475,7 +490,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(parameter
external_name: (identifier #{ext})
pattern: (name_pattern identifier: (identifier #{name}))
default: {ctx.default_value})
default: {..ctx.default_value})
),
rule!(
(parameter external_name: @ext name: @name type: @ty)
@@ -484,7 +499,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
external_name: (identifier #{ext})
pattern: (name_pattern identifier: (identifier #{name}))
type: {ty}
default: {ctx.default_value})
default: {..ctx.default_value})
),
// Parameter with just name and type (no external name)
rule!(
@@ -492,7 +507,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(parameter
pattern: (name_pattern identifier: (identifier #{name}))
default: {ctx.default_value})
default: {..ctx.default_value})
),
rule!(
(parameter name: @name type: @ty)
@@ -500,7 +515,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(parameter
pattern: (name_pattern identifier: (identifier #{name}))
type: {ty}
default: {ctx.default_value})
default: {..ctx.default_value})
),
// Reference to a function, f(x:y:z:). This is parsed as a call with a single argument with multiple reference_specifier labels.
// We don't want downstream QL to try to handle this as a call_expr with a weird argument, so explicitly mark it as unsupported for now.
@@ -514,7 +529,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
rule!(
(call_expression function: @func suffix: (call_suffix arguments: (value_arguments argument: (value_argument)* @args)))
=>
(call_expr callee: {func} argument: {args})
(call_expr callee: {func} argument: {..args})
),
// Value argument with label (value: _ matches both named nodes and anonymous tokens like nil)
rule!(
@@ -537,7 +552,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// Return / break / continue, one rule per keyword.
// The anonymous "return"/"break"/"continue" keywords are matched as
// string literals.
rule!((control_transfer_statement kind: "return" result: _? @val) => (return_expr value: {val})),
rule!((control_transfer_statement kind: "return" result: _? @val) => (return_expr value: {..val})),
rule!((control_transfer_statement kind: "break" result: @lbl) => (break_expr label: (identifier #{lbl}))),
rule!((control_transfer_statement kind: "break") => (break_expr)),
rule!((control_transfer_statement kind: "continue" result: @lbl) => (continue_expr label: (identifier #{lbl}))),
@@ -556,20 +571,20 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
statement: _* @body)
=>
(function_expr
modifier: {attrs}
capture_declaration: {captures}
parameter: {params}
return_type: {ret}
body: (block stmt: {body}))
modifier: {..attrs}
capture_declaration: {..captures}
parameter: {..params}
return_type: {..ret}
body: (block stmt: {..body}))
),
// capture_list_item with ownership modifier (e.g. [weak self], [unowned x])
rule!(
(capture_list_item ownership: _? @ownership name: @name value: _? @val)
=>
(variable_declaration
modifier: {ownership}
modifier: {..ownership}
pattern: (name_pattern identifier: (identifier #{name}))
value: {val})
value: {..val})
),
// Lambda parameter with type and optional external name
rule!(
@@ -615,7 +630,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(if_expr
condition: {and_chain(&mut ctx, cond)}
then: {then_body}
else: {else_stmts})
else: {..else_stmts})
),
// Guard statement
rule!(
@@ -623,7 +638,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(guard_if_stmt
condition: {and_chain(&mut ctx, cond)}
else: (block stmt: {else_stmts}))
else: (block stmt: {..else_stmts}))
),
// Ternary expression → if_expr
rule!(
@@ -635,36 +650,27 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
rule!(
(switch_statement expr: @val entry: (switch_entry)* @cases)
=>
(switch_expr value: {val} case: {cases})
(switch_expr value: {val} case: {..cases})
),
// Switch entry with multiple patterns and body
// Switch entry with patterns and body
rule!(
(switch_entry
pattern: (switch_pattern pattern: @first)
pattern: (switch_pattern pattern: @rest)+
statement: _* @body)
(switch_entry pattern: (switch_pattern pattern: @pats)* statement: _* @body)
=>
(switch_case pattern: (or_pattern pattern: {first} pattern: {rest}) body: (block stmt: {body}))
),
// Switch entry with exactly one pattern and body
rule!(
(switch_entry pattern: (switch_pattern pattern: @pat) statement: _* @body)
=>
(switch_case pattern: {pat} body: (block stmt: {body}))
(switch_case pattern: {..pats} body: (block stmt: {..body}))
),
// Switch entry: default case (no patterns)
rule!(
(switch_entry default: (default_keyword) statement: _* @body)
=>
(switch_case body: (block stmt: {body}))
(switch_case body: (block stmt: {..body}))
),
// if case PATTERN = expr — preserve the pattern directly (no Optional wrapping)
// if case let x = expr — the pattern is taken as-is (no Optional wrapping)
rule!(
(if_let_binding "case" pattern: @pat value: @val)
(if_let_binding "case" (value_binding_pattern) bound_identifier: @name _ @val)
=>
(pattern_guard_expr
value: {val}
pattern: {pat})
pattern: (name_pattern identifier: (identifier #{name})))
),
rule!(
(if_let_binding
@@ -702,8 +708,8 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(for_each_stmt
pattern: {pat}
iterable: {iter}
guard: {guard}
body: (block stmt: {body}))
guard: {..guard}
body: (block stmt: {..body}))
),
// While loop
rule!(
@@ -711,7 +717,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(while_stmt
condition: {and_chain(&mut ctx, cond)}
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Repeat-while loop
rule!(
@@ -719,28 +725,28 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(do_while_stmt
condition: {and_chain(&mut ctx, cond)}
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Labeled statement (e.g. `outer: for ...`). Strip the trailing ':' from the label token.
rule!((labeled_statement label: (statement_label) @lbl statement: @stmt) => {
let text = ctx.ast.source_text(lbl);
let text = ctx.ast.source_text(lbl.into());
let name = &text[..text.len() - 1];
tree!((labeled_stmt label: (identifier #{name}) stmt: {stmt}))
}),
// ---- Collections ----
// Array literal
rule!((array_literal element: _* @elems) => (array_literal element: {elems})),
rule!((array_literal element: _* @elems) => (array_literal element: {..elems})),
// Empty array literal
rule!((array_literal) => (array_literal)),
// Dictionary literal — zip keys and values into key_value_pairs
rule!(
(dictionary_literal key: _* @keys value: _* @vals)
=>
(map_literal element: {keys.into_iter().zip(vals).map(|(k, v)|
(map_literal element: {..keys.into_iter().zip(vals).map(|(k, v)|
tree!((key_value_pair key: {k} value: {v}))
)})
),
rule!((dictionary_literal element: _* @elems) => (map_literal element: {elems})),
rule!((dictionary_literal element: _* @elems) => (map_literal element: {..elems})),
rule!((dictionary_literal_item key: @k value: @v) => (key_value_pair key: {k} value: {v})),
// ---- Optionals and errors ----
// Optional chaining — unwrap the marker
@@ -753,8 +759,8 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(do_statement body: (block statement: _* @body) catch: (catch_block)* @catches)
=>
(try_expr
body: (block stmt: {body})
catch_clause: {catches})
body: (block stmt: {..body})
catch_clause: {..catches})
),
// Catch block with bound identifier; optional where-clause guard.
rule!(
@@ -766,14 +772,14 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(catch_clause
pattern: {pattern}
guard: {guard}
body: (block stmt: {body}))
guard: {..guard}
body: (block stmt: {..body}))
),
// Catch block without error binding
rule!(
(catch_block keyword: (catch_keyword) body: (block statement: _* @body))
=>
(catch_clause body: (block stmt: {body}))
(catch_clause body: (block stmt: {..body}))
),
// Empty catch block: catch {}
rule!(
@@ -787,7 +793,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(catch_clause
pattern: {pat}
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// As expression (type cast) — as?, as!
rule!((as_expression (as_operator) @op expr: @val type: @ty) => (type_cast_expr expr: {val} operator: (infix_operator #{op}) type: {ty})),
@@ -812,7 +818,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
pattern: (name_pattern identifier: (identifier #{parts.last().unwrap()}))
imported_expr: {name}
modifier: (modifier #{kind})
modifier: {mods})
modifier: {..mods})
),
// Non-scoped import declaration (for example `import Foundation`):
// flatten the identifier parts into a member_access_expr and use a
@@ -823,7 +829,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(import_declaration
pattern: (bulk_importing_pattern)
imported_expr: {name}
modifier: {mods})
modifier: {..mods})
),
// ---- Types and classes ----
// Self expression → name_expr
@@ -831,7 +837,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// Super expression → super_expr
rule!((super_expression) => (super_expr)),
// Modifiers — unwrap to individual modifier children
rule!((modifiers _* @mods) => {mods}),
rule!((modifiers _* @mods) => {..mods}),
rule!((attribute) @m => (modifier #{m})),
rule!((visibility_modifier) @m => (modifier #{m})),
rule!((function_modifier) @m => (modifier #{m})),
@@ -848,7 +854,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// Keep a conservative textual fallback to avoid dropping type information.
rule!((user_type) @ty => (named_type_expr name: (identifier #{ty}))),
// Tuple type → tuple_type_expr
rule!((tuple_type element: _* @elems) => (tuple_type_expr element: {elems})),
rule!((tuple_type element: _* @elems) => (tuple_type_expr element: {..elems})),
rule!((tuple_type_item name: @name type: @ty) => (tuple_type_element name: (identifier #{name}) type: {ty})),
rule!((tuple_type_item type: @ty) => (tuple_type_element type: {ty})),
// Array type `[T]` → generic_type_expr with Array base
@@ -865,7 +871,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
base: (named_type_expr name: (identifier "Optional"))
type_argument: {w})),
// Function type `(Params) -> Ret` → function_type_expr.
rule!((function_type parameter: _* @ps return_type: @ret) => (function_type_expr parameter: {ps} return_type: {ret})),
rule!((function_type parameter: _* @ps return_type: @ret) => (function_type_expr parameter: {..ps} return_type: {ret})),
rule!((function_type_parameter name: @name type: @ty) => (parameter external_name: (identifier #{name}) type: {ty})),
rule!((function_type_parameter type: @ty) => (parameter type: {ty})),
// Selector expression: `#selector(inner)` -- not yet supported
@@ -889,10 +895,10 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(class_like_declaration
modifier: (modifier #{kind})
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
base_type: {bases}
member: {members})
base_type: {..bases}
member: {..members})
),
// Enum class declaration: same as a regular class but with an enum body.
rule!(
@@ -905,10 +911,10 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(class_like_declaration
modifier: (modifier #{kind})
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
base_type: {bases}
member: {members})
base_type: {..bases}
member: {..members})
),
// Class declaration with empty body
rule!(
@@ -921,9 +927,9 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(class_like_declaration
modifier: (modifier #{kind})
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
base_type: {bases})
base_type: {..bases})
),
// Protocol declaration
rule!(
@@ -935,10 +941,10 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(class_like_declaration
modifier: (modifier "protocol")
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
base_type: {bases}
member: {members})
base_type: {..bases}
member: {..members})
),
// Protocol function — return type and body statements both optional.
rule!(
@@ -950,11 +956,11 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(modifiers)* @mods)
=>
(function_declaration
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
parameter: {params}
return_type: {ret}
body: (block stmt: {body_stmts}))
parameter: {..params}
return_type: {..ret}
body: (block stmt: {..body_stmts}))
),
// Init declaration → constructor_declaration. Body statements optional;
// body itself is also optional (protocol requirement).
@@ -965,9 +971,9 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(modifiers)* @mods)
=>
(constructor_declaration
modifier: {mods}
parameter: {params}
body: (block stmt: {body_stmts}))
modifier: {..mods}
parameter: {..params}
body: (block stmt: {..body_stmts}))
),
// Deinit declaration → destructor_declaration. Body statements optional.
rule!(
@@ -976,15 +982,15 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(modifiers)* @mods)
=>
(destructor_declaration
modifier: {mods}
body: (block stmt: {body_stmts}))
modifier: {..mods}
body: (block stmt: {..body_stmts}))
),
// Typealias declaration
rule!(
(typealias_declaration name: @name value: @val (modifiers)* @mods)
=>
(type_alias_declaration
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
r#type: {val})
),
@@ -999,9 +1005,9 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(associatedtype_declaration name: @name inherits_from: _? @bound (modifiers)* @mods)
=>
(associated_type_declaration
modifier: {mods}
modifier: {..mods}
name: (identifier #{name})
bound: {bound})
bound: {..bound})
),
// Protocol property declaration: translate each accessor
// requirement to an `accessor_declaration` carrying the property
@@ -1011,25 +1017,28 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
// inner `getter_specifier`/`setter_specifier` rules emit
// complete nodes from the start (including the
// `chained_declaration` tag for non-first accessors).
rule!(
manual_rule!(
(protocol_property_declaration
name: (pattern bound_identifier: @name)
requirements: (protocol_property_requirements accessor: _+ @@accessors)
requirements: (protocol_property_requirements accessor: _+ @accessors)
type: _? @ty
(modifiers)* @mods)
=>
{{
{
ctx.property_name = Some(tree!((identifier #{name})));
ctx.property_type = ty;
ctx.outer_modifiers = mods;
ctx.property_type = ctx.translate_opt(ty)?;
let mut modifiers = Vec::new();
for m in mods {
modifiers.extend(ctx.translate(m)?);
}
ctx.outer_modifiers = modifiers;
let mut result = Vec::new();
for (i, acc) in accessors.into_iter().enumerate() {
ctx.is_chained = i > 0;
result.extend(ctx.translate(acc)?);
}
result
}}
Ok(result)
}
),
// getter_specifier / setter_specifier → bodyless accessor_declaration
// getter_specifier / setter_specifier → bodyless
@@ -1040,23 +1049,23 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
=>
(accessor_declaration
name: {ctx.property_name.ok_or("getter_specifier outside protocol_property_declaration context")?}
type: {ctx.property_type}
type: {..ctx.property_type}
accessor_kind: (accessor_kind "get")
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)})
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)})
),
rule!(
(setter_specifier)
=>
(accessor_declaration
name: {ctx.property_name.ok_or("setter_specifier outside protocol_property_declaration context")?}
type: {ctx.property_type}
type: {..ctx.property_type}
accessor_kind: (accessor_kind "set")
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)})
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)})
),
// protocol_property_requirements wrapper — should be consumed by above; fallback
rule!((protocol_property_requirements accessor: _* @accs) => {accs}),
rule!((protocol_property_requirements accessor: _* @accs) => {..accs}),
// Computed getter → accessor_declaration (body optional).
// Reads property name/type from the outer property_binding rule
// and binding/outer modifiers + chained tag from the outer
@@ -1065,58 +1074,58 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(computed_getter body: (block statement: _* @body)?)
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: {ctx.property_name.ok_or("computed_getter outside property_binding context")?}
type: {ctx.property_type}
type: {..ctx.property_type}
accessor_kind: (accessor_kind "get")
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Computed setter with explicit parameter name.
rule!(
(computed_setter parameter: @param body: (block statement: _* @body))
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: {ctx.property_name.ok_or("computed_setter outside property_binding context")?}
type: {ctx.property_type}
type: {..ctx.property_type}
accessor_kind: (accessor_kind "set")
parameter: (parameter pattern: (name_pattern identifier: (identifier #{param})))
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Computed setter without explicit parameter name; body optional.
rule!(
(computed_setter body: (block statement: _* @body)?)
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: {ctx.property_name.ok_or("computed_setter outside property_binding context")?}
type: {ctx.property_type}
type: {..ctx.property_type}
accessor_kind: (accessor_kind "set")
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Computed modify → accessor_declaration
rule!(
(computed_modify body: (block statement: _* @body))
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: {ctx.property_name.ok_or("computed_modify outside property_binding context")?}
type: {ctx.property_type}
type: {..ctx.property_type}
accessor_kind: (accessor_kind "modify")
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// willset/didset block — spread to children (only reachable as a
// fallback; the outer property_binding manual rule normally
// captures the willset/didset clauses directly).
rule!((willset_didset_block _* @clauses) => {clauses}),
rule!((willset_didset_block _* @clauses) => {..clauses}),
// willset clause → accessor_declaration (body optional). Reads
// `ctx.property_name` set by the outer property_binding rule and
// binding/outer modifiers + chained tag from the outer
@@ -1125,24 +1134,24 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
(willset_clause body: (block statement: _* @body)?)
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: {ctx.property_name.ok_or("willset_clause outside property_binding context")?}
accessor_kind: (accessor_kind "willSet")
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// didset clause → accessor_declaration (body optional).
rule!(
(didset_clause body: (block statement: _* @body)?)
=>
(accessor_declaration
modifier: {ctx.binding_modifier}
modifier: {ctx.outer_modifiers.clone()}
modifier: {chained_modifier(&mut ctx)}
modifier: {..ctx.binding_modifier}
modifier: {..ctx.outer_modifiers.clone()}
modifier: {..chained_modifier(&mut ctx)}
name: {ctx.property_name.ok_or("didset_clause outside property_binding context")?}
accessor_kind: (accessor_kind "didSet")
body: (block stmt: {body}))
body: (block stmt: {..body}))
),
// Preprocessor conditionals — unsupported
rule!((diagnostic) => (unsupported_node)),

View File

@@ -573,12 +573,10 @@ top_level
name_expr
identifier: identifier "print"
pattern:
or_pattern
pattern:
expr_equality_pattern
expr: int_literal "2"
expr_equality_pattern
expr: int_literal "3"
expr_equality_pattern
expr: int_literal "2"
expr_equality_pattern
expr: int_literal "3"
switch_case
body:
block
@@ -594,83 +592,6 @@ top_level
name_expr
identifier: identifier "x"
===
If-case-let with shadowing in condition value
===
if case let x = x + 10 {
print(x)
}
---
source_file
statement:
if_statement
body:
block
statement:
call_expression
function: simple_identifier "print"
suffix:
call_suffix
arguments:
value_arguments
argument:
value_argument
value: simple_identifier "x"
condition:
if_condition
kind:
if_let_binding
pattern:
pattern
kind:
binding_pattern
binding:
value_binding_pattern
mutability: let
pattern:
pattern
bound_identifier: simple_identifier "x"
value:
additive_expression
lhs: simple_identifier "x"
op: +
rhs: integer_literal "10"
---
top_level
body:
block
stmt:
if_expr
condition:
pattern_guard_expr
pattern:
name_pattern
identifier: identifier "x"
value:
binary_expr
operator: infix_operator "+"
left:
name_expr
identifier: identifier "x"
right: int_literal "10"
then:
block
stmt:
call_expr
argument:
argument
value:
name_expr
identifier: identifier "x"
callee:
name_expr
identifier: identifier "print"
===
Switch with binding pattern
===

View File

@@ -978,23 +978,6 @@ module Unified {
}
}
/** A class representing `or_pattern` nodes. */
class OrPattern extends @unified_or_pattern, AstNode {
/** Gets the name of the primary QL class for this element. */
final override string getAPrimaryQlClass() { result = "OrPattern" }
/** Gets the node corresponding to the field `modifier`. */
final Modifier getModifier(int i) { unified_or_pattern_modifier(this, i, result) }
/** Gets the node corresponding to the field `pattern`. */
final Pattern getPattern(int i) { unified_or_pattern_pattern(this, i, result) }
/** Gets a field or child node of this node. */
final override AstNode getAFieldOrChild() {
unified_or_pattern_modifier(this, _, result) or unified_or_pattern_pattern(this, _, result)
}
}
/** A class representing `parameter` nodes. */
class Parameter extends @unified_parameter, AstNode {
/** Gets the name of the primary QL class for this element. */
@@ -1126,14 +1109,14 @@ module Unified {
final Modifier getModifier(int i) { unified_switch_case_modifier(this, i, result) }
/** Gets the node corresponding to the field `pattern`. */
final Pattern getPattern() { unified_switch_case_pattern(this, result) }
final Pattern getPattern(int i) { unified_switch_case_pattern(this, i, result) }
/** Gets a field or child node of this node. */
final override AstNode getAFieldOrChild() {
unified_switch_case_def(this, result) or
unified_switch_case_guard(this, result) or
unified_switch_case_modifier(this, _, result) or
unified_switch_case_pattern(this, result)
unified_switch_case_pattern(this, _, result)
}
}
@@ -1671,10 +1654,6 @@ module Unified {
i = -1 and
name = "getPrecedence"
or
result = node.(OrPattern).getModifier(i) and name = "getModifier"
or
result = node.(OrPattern).getPattern(i) and name = "getPattern"
or
result = node.(Parameter).getDefault() and i = -1 and name = "getDefault"
or
result = node.(Parameter).getExternalName() and i = -1 and name = "getExternalName"
@@ -1703,7 +1682,7 @@ module Unified {
or
result = node.(SwitchCase).getModifier(i) and name = "getModifier"
or
result = node.(SwitchCase).getPattern() and i = -1 and name = "getPattern"
result = node.(SwitchCase).getPattern(i) and name = "getPattern"
or
result = node.(SwitchExpr).getCase(i) and name = "getCase"
or

View File

@@ -716,24 +716,6 @@ unified_operator_syntax_declaration_def(
int name: @unified_token_identifier ref
);
#keyset[unified_or_pattern, index]
unified_or_pattern_modifier(
int unified_or_pattern: @unified_or_pattern ref,
int index: int ref,
unique int modifier: @unified_token_modifier ref
);
#keyset[unified_or_pattern, index]
unified_or_pattern_pattern(
int unified_or_pattern: @unified_or_pattern ref,
int index: int ref,
unique int pattern: @unified_pattern ref
);
unified_or_pattern_def(
unique int id: @unified_or_pattern
);
unified_parameter_default(
unique int unified_parameter: @unified_parameter ref,
unique int default: @unified_expr ref
@@ -765,7 +747,7 @@ unified_parameter_def(
unique int id: @unified_parameter
);
@unified_pattern = @unified_bulk_importing_pattern | @unified_constructor_pattern | @unified_expr_equality_pattern | @unified_name_pattern | @unified_or_pattern | @unified_token_ignore_pattern | @unified_token_unsupported_node | @unified_tuple_pattern
@unified_pattern = @unified_bulk_importing_pattern | @unified_constructor_pattern | @unified_expr_equality_pattern | @unified_name_pattern | @unified_token_ignore_pattern | @unified_token_unsupported_node | @unified_tuple_pattern
unified_pattern_element_key(
unique int unified_pattern_element: @unified_pattern_element ref,
@@ -813,8 +795,10 @@ unified_switch_case_modifier(
unique int modifier: @unified_token_modifier ref
);
#keyset[unified_switch_case, index]
unified_switch_case_pattern(
unique int unified_switch_case: @unified_switch_case ref,
int unified_switch_case: @unified_switch_case ref,
int index: int ref,
unique int pattern: @unified_pattern ref
);
@@ -1072,7 +1056,7 @@ unified_trivia_tokeninfo(
string value: string ref
);
@unified_ast_node = @unified_accessor_declaration | @unified_argument | @unified_array_literal | @unified_assign_expr | @unified_associated_type_declaration | @unified_base_type | @unified_binary_expr | @unified_block | @unified_bound_type_constraint | @unified_break_expr | @unified_bulk_importing_pattern | @unified_call_expr | @unified_catch_clause | @unified_class_like_declaration | @unified_compound_assign_expr | @unified_constructor_declaration | @unified_constructor_pattern | @unified_continue_expr | @unified_destructor_declaration | @unified_do_while_stmt | @unified_equality_type_constraint | @unified_expr_equality_pattern | @unified_for_each_stmt | @unified_function_declaration | @unified_function_expr | @unified_function_type_expr | @unified_generic_type_expr | @unified_guard_if_stmt | @unified_if_expr | @unified_import_declaration | @unified_initializer_declaration | @unified_key_value_pair | @unified_labeled_stmt | @unified_map_literal | @unified_member_access_expr | @unified_name_expr | @unified_name_pattern | @unified_named_type_expr | @unified_operator_syntax_declaration | @unified_or_pattern | @unified_parameter | @unified_pattern_element | @unified_pattern_guard_expr | @unified_return_expr | @unified_switch_case | @unified_switch_expr | @unified_throw_expr | @unified_token | @unified_top_level | @unified_trivia_token | @unified_try_expr | @unified_tuple_expr | @unified_tuple_pattern | @unified_tuple_type_element | @unified_tuple_type_expr | @unified_type_alias_declaration | @unified_type_cast_expr | @unified_type_parameter | @unified_type_test_expr | @unified_type_test_pattern | @unified_unary_expr | @unified_variable_declaration | @unified_while_stmt
@unified_ast_node = @unified_accessor_declaration | @unified_argument | @unified_array_literal | @unified_assign_expr | @unified_associated_type_declaration | @unified_base_type | @unified_binary_expr | @unified_block | @unified_bound_type_constraint | @unified_break_expr | @unified_bulk_importing_pattern | @unified_call_expr | @unified_catch_clause | @unified_class_like_declaration | @unified_compound_assign_expr | @unified_constructor_declaration | @unified_constructor_pattern | @unified_continue_expr | @unified_destructor_declaration | @unified_do_while_stmt | @unified_equality_type_constraint | @unified_expr_equality_pattern | @unified_for_each_stmt | @unified_function_declaration | @unified_function_expr | @unified_function_type_expr | @unified_generic_type_expr | @unified_guard_if_stmt | @unified_if_expr | @unified_import_declaration | @unified_initializer_declaration | @unified_key_value_pair | @unified_labeled_stmt | @unified_map_literal | @unified_member_access_expr | @unified_name_expr | @unified_name_pattern | @unified_named_type_expr | @unified_operator_syntax_declaration | @unified_parameter | @unified_pattern_element | @unified_pattern_guard_expr | @unified_return_expr | @unified_switch_case | @unified_switch_expr | @unified_throw_expr | @unified_token | @unified_top_level | @unified_trivia_token | @unified_try_expr | @unified_tuple_expr | @unified_tuple_pattern | @unified_tuple_type_element | @unified_tuple_type_expr | @unified_type_alias_declaration | @unified_type_cast_expr | @unified_type_parameter | @unified_type_test_expr | @unified_type_test_pattern | @unified_unary_expr | @unified_variable_declaration | @unified_while_stmt
unified_ast_node_location(
unique int node: @unified_ast_node ref,