Skip to content

Commit

Permalink
add to reader and writer
Browse files Browse the repository at this point in the history
  • Loading branch information
wagyourtail committed Aug 13, 2024
1 parent 9752a21 commit cdbb034
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,39 @@ object UMFReader : FormatReader {
last as ClassVisitor?
last?.visitInnerClass(type, names)
}
EntryType.SEAL -> {
val type = fixValue(input.takeNext())!!.let {
when (it) {
"+" -> SealedType.ADD
"-" -> SealedType.REMOVE
"c" -> SealedType.CLEAR
else -> throw IllegalArgumentException("Invalid seal type $it")
}
}
val name = if (type != SealedType.CLEAR) {
fixValue(input.takeNext())?.let {
if (unchecked) InternalName.unchecked(it) else InternalName.read(it)
}
} else null
val names = input.takeRemainingOnLine().mapNotNull { fixValue(it) }.map { Namespace(it) }.iterator()
last as ClassVisitor?
last?.visitSeal(type, name, names.next(), names.asSequence().toSet())
}
EntryType.INTERFACE -> {
val type = fixValue(input.takeNext())!!.let {
when (it) {
"+" -> InterfacesType.ADD
"-" -> InterfacesType.REMOVE
else -> throw IllegalArgumentException("Invalid interface type $it")
}
}
val name = fixValue(input.takeNext())!!.let {
if (unchecked) InternalName.unchecked(it) else InternalName.read(it)
}
val names = input.takeRemainingOnLine().mapNotNull { fixValue(it) }.map { Namespace(it) }.iterator()
last as ClassVisitor?
last?.visitInterface(type, name, names.next(), names.asSequence().toSet())
}
EntryType.JAVADOC -> {
val comment = fixValue(input.takeNext())!!
val names = input.takeRemainingOnLine().mapNotNull { fixValue(it) }.map { Namespace(it) }.iterator()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,63 @@ object UMFWriter : FormatWriter {
return super.visitInnerClass(delegate, type, names)
}

override fun visitSeal(
delegate: ClassVisitor,
type: SealedType,
name: InternalName?,
baseNs: Namespace,
namespaces: Set<Namespace>
): SealVisitor? {
val typeStr = when (type) {
SealedType.ADD -> "+"
SealedType.REMOVE -> "-"
SealedType.CLEAR -> "c"
}
into(indent)
into("${UMFReader.EntryType.SEAL.key}\t$typeStr\t")
if (type != SealedType.CLEAR) {
into(name!!.value.maybeEscape())
into("\t")
}
into(baseNs.name.maybeEscape())
for (ns in this.namespaces) {
if (ns in namespaces) {
into("\t")
into(ns.name.maybeEscape())
}
}
into("\n")
indent += "\t"
return super.visitSeal(delegate, type, name, baseNs, namespaces)
}

override fun visitInterface(
delegate: ClassVisitor,
type: InterfacesType,
name: InternalName,
baseNs: Namespace,
namespaces: Set<Namespace>
): InterfaceVisitor? {
val typeStr = when (type) {
InterfacesType.ADD -> "+"
InterfacesType.REMOVE -> "-"
}
into(indent)
into("${UMFReader.EntryType.INTERFACE.key}\t$typeStr\t")
into(name.value.maybeEscape())
into("\t")
into(baseNs.name.maybeEscape())
for (ns in this.namespaces) {
if (ns in namespaces) {
into("\t")
into(ns.name.maybeEscape())
}
}
into("\n")
indent += "\t"
return super.visitInterface(delegate, type, name, baseNs, namespaces)
}

override fun visitParameter(
delegate: InvokableVisitor<*>,
index: Int?,
Expand Down

0 comments on commit cdbb034

Please sign in to comment.