Merge pull request #813 from christianblos/feature/ability-extension-list
Be able to add AbilityExtensions in Bot constructor
This commit is contained in:
commit
814955c2a6
@ -35,6 +35,20 @@ public class MrBadGuy implements AbilityExtension {
|
||||
return new MrBadGuy();
|
||||
}
|
||||
|
||||
// Override creatorId
|
||||
}
|
||||
```
|
||||
|
||||
It's also possible to add extensions in the constructor by using the `addExtension()` or `addExtensions()` method:
|
||||
|
||||
```java
|
||||
public class YourAwesomeBot implements AbilityBot {
|
||||
|
||||
public YourAwesomeBot() {
|
||||
super(/* pass required args ... */);
|
||||
addExtensions(new MrGoodGuy(), new MrBadGuy());
|
||||
}
|
||||
|
||||
// Override creatorId
|
||||
}
|
||||
```
|
@ -106,6 +106,7 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability
|
||||
private final String botUsername;
|
||||
|
||||
// Ability registry
|
||||
private final List<AbilityExtension> extensions = new ArrayList<>();
|
||||
private Map<String, Ability> abilities;
|
||||
private Map<String, Stats> stats;
|
||||
|
||||
@ -295,6 +296,18 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void addExtension(AbilityExtension extension) {
|
||||
this.extensions.add(extension);
|
||||
}
|
||||
|
||||
protected void addExtensions(AbilityExtension... extensions) {
|
||||
this.extensions.addAll(Arrays.asList(extensions));
|
||||
}
|
||||
|
||||
protected void addExtensions(Collection<AbilityExtension> extensions) {
|
||||
this.extensions.addAll(extensions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers the declared abilities using method reflection. Also, replies are accumulated using the built abilities and standalone methods that return a Reply.
|
||||
* <p>
|
||||
@ -303,10 +316,10 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability
|
||||
private void registerAbilities() {
|
||||
try {
|
||||
// Collect all classes that implement AbilityExtension declared in the bot
|
||||
List<AbilityExtension> extensions = stream(getClass().getMethods())
|
||||
extensions.addAll(stream(getClass().getMethods())
|
||||
.filter(checkReturnType(AbilityExtension.class))
|
||||
.map(returnExtension(this))
|
||||
.collect(Collectors.toList());
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
// Add the bot itself as it is an AbilityExtension
|
||||
extensions.add(this);
|
||||
|
@ -33,6 +33,7 @@ class ExtensionTest {
|
||||
assertTrue(hasAbilityNamed("direct"), "Failed to find Ability in directly declared in root extension/bot");
|
||||
assertTrue(hasAbilityNamed("returningSuperClass0abc"), "Failed to find Ability in directly declared in extension returned by method returning the AbilityExtension class");
|
||||
assertTrue(hasAbilityNamed("returningSubClass0abc"), "Failed to find Ability in directly declared in extension returned by method returning the AbilityExtension subclass");
|
||||
assertTrue(hasAbilityNamed("addedInConstructor0abc"), "Failed to find Ability in directly declared in extension added in the constructor");
|
||||
}
|
||||
|
||||
private boolean hasAbilityNamed(String name) {
|
||||
@ -42,6 +43,7 @@ class ExtensionTest {
|
||||
public static class ExtensionUsingBot extends AbilityBot {
|
||||
ExtensionUsingBot() {
|
||||
super("", "", offlineInstance("testing"));
|
||||
addExtension(new AbilityBotExtension("addedInConstructor"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user