getAllConcreteMembers method
Returns a map of all concrete instance members (methods, getters, setters)
available on this class, including those inherited via the extends chain.
Key: member name, Value: the concrete InterpretedFunction.
Implementation
Map<String, InterpretedFunction> getAllConcreteMembers() {
final concreteMembers = <String, InterpretedFunction>{};
InterpretedClass? current = this;
while (current != null) {
// G-DOV-6/7 FIX: Also include concrete members from mixins at each level
for (final mixin in current.mixins) {
mixin.methods.forEach((name, func) {
if (!func.isAbstract) {
concreteMembers.putIfAbsent(name, () => func);
}
});
mixin.getters.forEach((name, func) {
if (!func.isAbstract) {
concreteMembers.putIfAbsent(name, () => func);
}
});
mixin.setters.forEach((name, func) {
if (!func.isAbstract) {
concreteMembers.putIfAbsent(name, () => func);
}
});
}
// Add concrete members from the current class, avoiding overwrites from subclasses
current.methods.forEach((name, func) {
if (!func.isAbstract) {
concreteMembers.putIfAbsent(name, () => func);
}
});
current.getters.forEach((name, func) {
if (!func.isAbstract) {
concreteMembers.putIfAbsent(name, () => func);
}
});
current.setters.forEach((name, func) {
if (!func.isAbstract) {
concreteMembers.putIfAbsent(name, () => func);
}
});
current = current.superclass;
}
return concreteMembers;
}