Я анализирую сценарий groovy через Java, используя отражение, чтобы получить методы из сценария. Для моего проекта мне нужны все методы, которые не являются синтетическими c и publi c.
GroovyScriptEngine groovyScriptEngine = new GroovyScriptEngine(scriptFile.getAbsolutePath());
Class<GroovyObject> scriptClass = groovyScriptEngine.loadScriptByName(scriptFile.getName());
// some code
GroovyObject groovyObject = scriptClass.getConstructor().newInstance();
if (groovyObject != null) {
Method[] declaredMethods = groovyObject.getClass().getDeclaredMethods();
return Arrays.stream(declaredMethods)
.filter(m -> !m.isSynthetic() && Modifier.isPublic(m.getModifiers()))
.collect(Collectors.toList());
}
Для обычного groovy класса это возвращает все методы получения, установки и публикации c пользовательские методы.
Например:
class MyGroovyClass {
def int number = 1
int add(int anotherNumber) {
return number + anotherNumber
}
}
Анализ класса groovy возвращает getNumber, setNumber, addNumber. Для пустого groovy класса (без полей, без объявленных методов) это возвращает пустой список.
Но для пустого сценария (= полностью пустой файл) это возвращает методы "run "and" main ".
Почему получение и фильтрация (для не синтетических c и publi c) методов из пустого сценария groovy возвращают" run "и" main "? Как я могу отфильтровать эти два метода? (Или я могу поймать это дело раньше?)