Compare inner class access flags in bytecode listing tests

This commit is contained in:
Dmitry Petrov
2020-07-23 14:57:29 +03:00
parent 8d894929ae
commit 0741781462
34 changed files with 151 additions and 142 deletions
@@ -146,6 +146,9 @@ class BytecodeListingTextCollectingVisitor(val filter: Filter, val withSignature
}
}
private fun getModifiers(target: ModifierTarget, access: Int) =
MODIFIERS.filter { it.hasModifier(access, target) }.joinToString(separator = " ") { it.text }
private fun classOrInterface(access: Int): String {
return when {
access and ACC_ANNOTATION != 0 -> "annotation class"
@@ -266,15 +269,21 @@ class BytecodeListingTextCollectingVisitor(val filter: Filter, val withSignature
if (!filter.shouldWriteInnerClass(name)) {
return
}
if (innerName == null) {
assertNull(outerName, "Anonymous classes should have neither innerName nor outerName. Name=$name, outerName=$outerName")
declarationsInsideClass.add(Declaration("inner (anonymous) class $name"))
} else if (outerName == null) {
declarationsInsideClass.add(Declaration("inner (local) class $name $innerName"))
} else if (name == "$outerName$$innerName") {
declarationsInsideClass.add(Declaration("inner class $name"))
} else {
declarationsInsideClass.add(Declaration("inner (unrecognized) class $name $outerName $innerName"))
when {
innerName == null -> {
assertNull(outerName, "Anonymous classes should have neither innerName nor outerName. Name=$name, outerName=$outerName")
declarationsInsideClass.add(Declaration("inner (anonymous) class $name"))
}
outerName == null -> {
declarationsInsideClass.add(Declaration("inner (local) class $name $innerName"))
}
name == "$outerName$$innerName" -> {
declarationsInsideClass.add(Declaration("${getModifiers(ModifierTarget.CLASS, access)} inner class $name"))
}
else -> {
declarationsInsideClass.add(Declaration("inner (unrecognized) class $name $outerName $innerName"))
}
}
}
}