Skip to content

Commit

Permalink
Fixed the wrong filter of class and object. Objects now can be loaded.
Browse files Browse the repository at this point in the history
Close #21
  • Loading branch information
Kotori316 committed Aug 5, 2022
1 parent 51e9dd8 commit 258871c
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 7 deletions.
8 changes: 4 additions & 4 deletions src/main/java/com/kotori316/scala_lib/ModClassData.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public interface ModClassData {
Expand All @@ -20,9 +19,10 @@ static <T extends ModClassData> List<T> findInstance(Collection<T> targets) {
if (ts.size() == 1) {
return ts.get(0);
} else {
var classData = ts.stream().filter(Predicate.not(ModClassData::isScalaObj)).toList();
if (classData.size() == 1) {
return classData.get(0);
var objectData = ts.stream().filter(ModClassData::isScalaObj).toList();
if (objectData.size() == 1) {
// Ignore anything but a Scala Object.
return objectData.get(0);
} else {
throw new RuntimeException("Exception in loading mods. %s".formatted(targets));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,15 @@ public String name() {
@Override
public Consumer<ModFileScanData> getFileVisitor() {
return scanData -> {
var targets = scanData.getAnnotations().stream()
var annotatedClasses = scanData.getAnnotations().stream()
.filter(t -> t.annotationType().equals(MODANNOTATION))
.map(data -> {
var className = data.clazz().getClassName();
var id = (String) data.annotationData().get("value");
return new ScalaLanguageTarget(className, id);
}).toList();
var map = ModClassData.findInstance(targets).stream()
var targets = ModClassData.findInstance(annotatedClasses);
var map = targets.stream()
.peek(a -> LOGGER.debug(SCAN, "Found @Mod class {} with id {}", a.className(), a.modID()))
.collect(Collectors.toMap(ModClassData::modID, Function.identity()));
scanData.addLanguageLoader(map);
Expand Down
31 changes: 30 additions & 1 deletion src/test/java/com/kotori316/scala_lib/ModClassDataTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,43 @@ void twoModId() {
assertEquals(targets, result);
}

@Test
void threeModIdWithObject() {
var targets = Set.of(
new ModClassDataImpl("com.kotori316.test.Mod1$", "test1"),
new ModClassDataImpl("com.kotori316.test.Mod1", "test1"),
new ModClassDataImpl("com.kotori316.test.Mod2", "test2"),
new ModClassDataImpl("com.kotori316.test.Mod3$", "test3"),
new ModClassDataImpl("com.kotori316.test.Mod3", "test3"),
new ModClassDataImpl("com.kotori316.test.Mod3_1", "test3")
);
var result = Set.copyOf(assertDoesNotThrow(() -> ModClassData.findInstance(targets)));
assertEquals(Set.of(
new ModClassDataImpl("com.kotori316.test.Mod1$", "test1"),
new ModClassDataImpl("com.kotori316.test.Mod2", "test2"),
new ModClassDataImpl("com.kotori316.test.Mod3$", "test3")
), result);
}

@Test
void classAndObj() {
var targets = Set.of(
new ModClassDataImpl("com.kotori316.test.Mod1$", "test1"),
new ModClassDataImpl("com.kotori316.test.Mod1", "test1")
);
var result = Set.copyOf(assertDoesNotThrow(() -> ModClassData.findInstance(targets)));
assertEquals(Set.of(new ModClassDataImpl("com.kotori316.test.Mod1", "test1")), result);
assertEquals(Set.of(new ModClassDataImpl("com.kotori316.test.Mod1$", "test1")), result);
}

@Test
void classAndObj2() {
var targets = Set.of(
new ModClassDataImpl("com.kotori316.test.Mod1$", "test1"),
new ModClassDataImpl("com.kotori316.test.Mod1", "test1"),
new ModClassDataImpl("com.kotori316.test.Mod1_other", "test1")
);
var result = Set.copyOf(assertDoesNotThrow(() -> ModClassData.findInstance(targets)));
assertEquals(Set.of(new ModClassDataImpl("com.kotori316.test.Mod1$", "test1")), result);
}

@Test
Expand Down

0 comments on commit 258871c

Please sign in to comment.