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
@ -38,3 +38,17 @@ public class MrBadGuy implements AbilityExtension {
|
|||||||
// Override creatorId
|
// 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;
|
private final String botUsername;
|
||||||
|
|
||||||
// Ability registry
|
// Ability registry
|
||||||
|
private final List<AbilityExtension> extensions = new ArrayList<>();
|
||||||
private Map<String, Ability> abilities;
|
private Map<String, Ability> abilities;
|
||||||
private Map<String, Stats> stats;
|
private Map<String, Stats> stats;
|
||||||
|
|
||||||
@ -295,6 +296,18 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability
|
|||||||
return false;
|
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.
|
* Registers the declared abilities using method reflection. Also, replies are accumulated using the built abilities and standalone methods that return a Reply.
|
||||||
* <p>
|
* <p>
|
||||||
@ -303,10 +316,10 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability
|
|||||||
private void registerAbilities() {
|
private void registerAbilities() {
|
||||||
try {
|
try {
|
||||||
// Collect all classes that implement AbilityExtension declared in the bot
|
// 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))
|
.filter(checkReturnType(AbilityExtension.class))
|
||||||
.map(returnExtension(this))
|
.map(returnExtension(this))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
// Add the bot itself as it is an AbilityExtension
|
// Add the bot itself as it is an AbilityExtension
|
||||||
extensions.add(this);
|
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("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("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("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) {
|
private boolean hasAbilityNamed(String name) {
|
||||||
@ -42,6 +43,7 @@ class ExtensionTest {
|
|||||||
public static class ExtensionUsingBot extends AbilityBot {
|
public static class ExtensionUsingBot extends AbilityBot {
|
||||||
ExtensionUsingBot() {
|
ExtensionUsingBot() {
|
||||||
super("", "", offlineInstance("testing"));
|
super("", "", offlineInstance("testing"));
|
||||||
|
addExtension(new AbilityBotExtension("addedInConstructor"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user