in subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/completion/antlr4/ReflectionCompleter.groovy [648:713]
private static Collection<ReflectionCompletionCandidate> addClassFieldsAndMethods(final Class clazz,
final boolean includeStatic,
final boolean includeNonStatic,
final String prefix,
final Collection<ReflectionCompletionCandidate> rv,
final boolean renderBold) {
Field[] fields = (includeStatic && !includeNonStatic) ? clazz.fields : clazz.getDeclaredFields()
fields.each { Field fit ->
if (acceptName(fit.name, prefix)) {
int modifiers = fit.getModifiers()
if (Modifier.isPublic(modifiers) && (Modifier.isStatic(modifiers) ? includeStatic : includeNonStatic)) {
if (!clazz.isEnum()
|| !(!includeStatic && Modifier.isPublic(modifiers) && Modifier.isFinal(modifiers) && Modifier.isStatic(modifiers) && fit.type == clazz)) {
ReflectionCompletionCandidate candidate = new ReflectionCompletionCandidate(fit.name)
if (!Modifier.isStatic(modifiers)) {
if (renderBold) {
candidate.jAnsiCodes.add(Ansi.Attribute.INTENSITY_BOLD.name())
}
}
rv << candidate
}
}
}
}
Method[] methods = (includeStatic && !includeNonStatic) ? clazz.methods : clazz.getDeclaredMethods()
for (Method methIt : methods) {
String name = methIt.getName()
if (name.startsWith("super\$")) {
name = name.substring(name.find("^super\\\$.*\\\$").length())
}
int modifiers = methIt.getModifiers()
if (Modifier.isPublic(modifiers) && (Modifier.isStatic(modifiers) ? includeStatic : includeNonStatic)) {
boolean fieldnameSuggested = false
// bean fieldname can be used instead of accessor, tidies up completion candidates
// the same goes for static fields // accessors
if (name.matches(BEAN_ACCESSOR_PATTERN)) {
String fieldname = getFieldnameForAccessor(name, methIt.parameterTypes.length)
if (fieldname != null && fieldname != 'metaClass' && fieldname != 'property') {
if (acceptName(fieldname, prefix)) {
fieldnameSuggested = true
ReflectionCompletionCandidate fieldCandidate = new ReflectionCompletionCandidate(fieldname)
if (!rv.contains(fieldCandidate)) {
if (!Modifier.isStatic(modifiers) && renderBold) {
fieldCandidate.jAnsiCodes.add(Ansi.Attribute.INTENSITY_BOLD.name())
}
rv.add(fieldCandidate)
}
}
}
}
if (!fieldnameSuggested && acceptName(name, prefix)) {
ReflectionCompletionCandidate candidate = new ReflectionCompletionCandidate(name + (methIt.parameterTypes.length == 0 ? '()' : '('))
if (!Modifier.isStatic(modifiers) && renderBold) {
candidate.jAnsiCodes.add(Ansi.Attribute.INTENSITY_BOLD.name())
}
rv.add(candidate)
}
}
}
for (Class interface_ : clazz.getInterfaces()) {
addClassFieldsAndMethods(interface_, includeStatic, includeNonStatic, prefix, rv, false)
}
}