2020-08-21 09:47:04 +00:00
|
|
|
package net.minecraftforge.forge.tasks
|
|
|
|
|
|
|
|
import java.util.ArrayList
|
|
|
|
import java.util.TreeMap
|
|
|
|
|
|
|
|
import org.gradle.api.DefaultTask
|
|
|
|
import org.gradle.api.tasks.InputFile
|
|
|
|
import org.gradle.api.tasks.InputFiles
|
|
|
|
import org.gradle.api.tasks.TaskAction
|
|
|
|
import org.objectweb.asm.Opcodes
|
|
|
|
|
|
|
|
public class CheckSAS extends DefaultTask {
|
|
|
|
@InputFile File inheritance
|
|
|
|
@InputFiles File[] sass
|
|
|
|
|
|
|
|
@TaskAction
|
|
|
|
protected void exec() {
|
|
|
|
Util.init()
|
|
|
|
def json = inheritance.json()
|
|
|
|
|
|
|
|
sass.each { f ->
|
|
|
|
def lines = []
|
|
|
|
f.eachLine { line ->
|
2020-10-08 21:02:48 +00:00
|
|
|
if (line[0] == '\t') return //Skip any tabbed lines, those are ones we add
|
2020-08-21 09:47:04 +00:00
|
|
|
def idx = line.indexOf('#')
|
|
|
|
if (idx == 0 || line.isEmpty()) {
|
|
|
|
lines.add(line)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
def comment = idx == -1 ? null : line.substring(idx)
|
|
|
|
if (idx != -1) line = line.substring(0, idx - 1)
|
|
|
|
def (cls, desc) = (line.trim() + ' ').split(' ', -1)
|
|
|
|
cls = cls.replaceAll('\\.', '/')
|
|
|
|
desc = desc.replace('(', ' (')
|
2020-10-08 21:02:48 +00:00
|
|
|
|
|
|
|
if (json[cls] == null || (!desc.isEmpty() && (json[cls]['methods'] == null || json[cls]['methods'][desc] == null))) {
|
2020-08-21 09:47:04 +00:00
|
|
|
println('Invalid: ' + line)
|
|
|
|
return
|
|
|
|
}
|
2020-10-08 21:02:48 +00:00
|
|
|
|
|
|
|
//Class SAS
|
|
|
|
if (desc.isEmpty()) {
|
|
|
|
lines.add(cls + (comment == null ? '' : ' ' + comment))
|
|
|
|
if (json[cls]['methods'] != null)
|
|
|
|
(json[cls]['methods'] as TreeMap).each {
|
|
|
|
findChildMethods(json, cls, it.key).each { lines.add('\t' + it) }
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
//Method SAS
|
2020-08-21 09:47:04 +00:00
|
|
|
lines.add(cls + ' ' + desc.replace(' ', '') + (comment == null ? '' : ' ' + comment))
|
2020-10-08 21:02:48 +00:00
|
|
|
findChildMethods(json, cls, desc).each { lines.add('\t' + it) }
|
2020-08-21 09:47:04 +00:00
|
|
|
}
|
|
|
|
f.text = lines.join('\n')
|
|
|
|
}
|
|
|
|
}
|
2020-10-08 21:02:48 +00:00
|
|
|
|
|
|
|
protected static findChildMethods(json, cls, desc)
|
|
|
|
{
|
|
|
|
return json.values().findAll{ it.methods != null && it.methods[desc] != null && it.methods[desc].override == cls}
|
|
|
|
.collect { it.name + ' ' + desc.replace(' ', '') } as TreeSet
|
|
|
|
}
|
2020-08-21 09:47:04 +00:00
|
|
|
}
|