Skip to content

Commit fb342ad

Browse files
committed
Add reflection class pattern improvement
1 parent d717243 commit fb342ad

File tree

7 files changed

+57
-16
lines changed

7 files changed

+57
-16
lines changed

backends/backend-shared/src/main/java/com/github/xpenatan/gdx/teavm/backends/shared/config/TeaBuildReflectionListener.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

backends/backend-shared/src/main/java/com/github/xpenatan/gdx/teavm/backends/shared/config/compiler/TeaCompiler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.github.xpenatan.gdx.teavm.backends.shared.config.compiler;
22

33
import com.github.xpenatan.gdx.teavm.backends.shared.config.AssetFileHandle;
4-
import com.github.xpenatan.gdx.teavm.backends.shared.config.TeaBuildReflectionListener;
4+
import com.github.xpenatan.gdx.teavm.backends.shared.config.reflection.DefaultReflectionListener;
55
import java.io.File;
66
import org.teavm.tooling.TeaVMSourceFilePolicy;
77
import org.teavm.tooling.sources.SourceFileProvider;
@@ -82,11 +82,15 @@ public TeaCompiler addReflectionClass(String fullClassName) {
8282
return this;
8383
}
8484

85-
public TeaCompiler setReflectionListener(TeaBuildReflectionListener reflectionListener) {
85+
public TeaCompiler setReflectionListener(DefaultReflectionListener reflectionListener) {
8686
data.reflectionListener = reflectionListener;
8787
return this;
8888
}
8989

90+
public DefaultReflectionListener getReflectionListener() {
91+
return data.reflectionListener;
92+
}
93+
9094
public TeaCompiler setOutputName(String outputName) {
9195
data.outputName = outputName;
9296
return this;

backends/backend-shared/src/main/java/com/github/xpenatan/gdx/teavm/backends/shared/config/compiler/TeaCompilerData.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.github.xpenatan.gdx.teavm.backends.shared.config.compiler;
22

33
import com.github.xpenatan.gdx.teavm.backends.shared.config.AssetFileHandle;
4-
import com.github.xpenatan.gdx.teavm.backends.shared.config.TeaBuildReflectionListener;
4+
import com.github.xpenatan.gdx.teavm.backends.shared.config.reflection.DefaultReflectionListener;
5+
import com.github.xpenatan.gdx.teavm.backends.shared.config.reflection.TeaReflectionListener;
56
import java.io.File;
67
import java.util.ArrayList;
78
import org.teavm.tooling.TeaVMSourceFilePolicy;
@@ -25,5 +26,5 @@ public class TeaCompilerData {
2526
public int minDirectBuffersSize = 2 * (1 << 20);
2627
public int maxDirectBuffersSize = 32 * (1 << 20);
2728
public final ArrayList<String> reflectionClasses = new ArrayList<>();
28-
public TeaBuildReflectionListener reflectionListener;
29+
public DefaultReflectionListener reflectionListener = new DefaultReflectionListener();
2930
}

backends/backend-shared/src/main/java/com/github/xpenatan/gdx/teavm/backends/shared/config/plugin/TeaReflectionSupplier.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ public class TeaReflectionSupplier implements ReflectionSupplier {
1818

1919
private static ArrayList<String> clazzList = new ArrayList();
2020

21-
static {
22-
addReflectionClass("com.badlogic.gdx.scenes.scene2d");
23-
addReflectionClass("net.mgsx.gltf.data");
24-
}
25-
2621
public static void addReflectionClass(Class<?> type) {
2722
addReflectionClass(type.getName());
2823
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.github.xpenatan.gdx.teavm.backends.shared.config.reflection;
2+
3+
import java.nio.file.FileSystems;
4+
import java.nio.file.PathMatcher;
5+
import java.nio.file.Paths;
6+
import java.util.ArrayList;
7+
8+
public class DefaultReflectionListener implements TeaReflectionListener {
9+
10+
protected ArrayList<String> classpathPattern = new ArrayList();
11+
12+
public DefaultReflectionListener() {
13+
setupDefaultPatterns();
14+
}
15+
16+
protected void setupDefaultPatterns() {
17+
classpathPattern.add("com.badlogic.gdx.scenes.scene2d.**");
18+
classpathPattern.add("net.mgsx.gltf.data.**");
19+
}
20+
21+
public void addClassOrPackage(String classOrPackage) {
22+
classpathPattern.add(classOrPackage);
23+
}
24+
25+
@Override
26+
public boolean shouldEnableReflection(String fullClassName) {
27+
for(int i = 0; i < classpathPattern.size(); i++) {
28+
String pattern = classpathPattern.get(i);
29+
if(matchesPattern(fullClassName, pattern))
30+
return true;
31+
}
32+
return false;
33+
}
34+
35+
protected boolean matchesPattern(String className, String pattern) {
36+
String path = className.replace(".", "/");
37+
String globPattern = "glob:" + pattern.replace(".", "/");
38+
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(globPattern);
39+
return matcher.matches(Paths.get(path));
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.github.xpenatan.gdx.teavm.backends.shared.config.reflection;
2+
3+
public interface TeaReflectionListener {
4+
boolean shouldEnableReflection(String fullClassName);
5+
}

backends/backend-web/src/main/java/com/github/xpenatan/gdx/teavm/backends/web/config/TeaBuildConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.github.xpenatan.gdx.teavm.backends.shared.config.AssetFileHandle;
44
import com.github.xpenatan.gdx.teavm.backends.shared.config.AssetFilter;
5-
import com.github.xpenatan.gdx.teavm.backends.shared.config.TeaBuildReflectionListener;
5+
import com.github.xpenatan.gdx.teavm.backends.shared.config.reflection.DefaultReflectionListener;
66
import java.net.URL;
77
import java.util.ArrayList;
88
import org.teavm.tooling.TeaVMTargetType;
@@ -57,5 +57,5 @@ public class TeaBuildConfiguration {
5757
/**
5858
* A listener to enable a class for reflection. Note that using reflection increases the size of JavaScript/WebAssembly code.
5959
*/
60-
public TeaBuildReflectionListener reflectionListener;
60+
public DefaultReflectionListener reflectionListener = new DefaultReflectionListener();
6161
}

0 commit comments

Comments
 (0)