diff --git a/html4j/src/main/java/org/teavm/html4j/HTML4JPlugin.java b/html4j/src/main/java/org/teavm/html4j/HTML4JPlugin.java
index 1530d308d..118a3ab80 100644
--- a/html4j/src/main/java/org/teavm/html4j/HTML4JPlugin.java
+++ b/html4j/src/main/java/org/teavm/html4j/HTML4JPlugin.java
@@ -29,5 +29,6 @@ public class HTML4JPlugin implements TeaVMPlugin {
host.add(new JavaScriptBodyTransformer());
host.add(new JCLHacks());
host.add(new JavaScriptResourceInterceptor());
+ host.add(new ResourcesInterceptor());
}
}
diff --git a/html4j/src/main/java/org/teavm/html4j/ResourcesInterceptor.java b/html4j/src/main/java/org/teavm/html4j/ResourcesInterceptor.java
new file mode 100644
index 000000000..6c7cc0715
--- /dev/null
+++ b/html4j/src/main/java/org/teavm/html4j/ResourcesInterceptor.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2014 Alexey Andreev.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.teavm.html4j;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Base64;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.commons.io.IOUtils;
+import org.teavm.codegen.SourceWriter;
+import org.teavm.javascript.RenderingContext;
+import org.teavm.vm.BuildTarget;
+import org.teavm.vm.spi.AbstractRendererListener;
+
+/**
+ *
+ * @author Jaroslav Tulach
+ */
+public class ResourcesInterceptor extends AbstractRendererListener {
+ private final Set processed = new HashSet<>();
+ @Override
+ public void begin(RenderingContext context, BuildTarget buildTarget) throws IOException {
+ boolean hasOneResource = false;
+ for (String className : context.getClassSource().getClassNames()) {
+ final int lastDot = className.lastIndexOf('.');
+ if (lastDot == -1) {
+ continue;
+ }
+ String packageName = className.substring(0, lastDot);
+ String resourceName = packageName.replace('.', '/') + "/" + "jvm.txt";
+ try (InputStream input = context.getClassLoader().getResourceAsStream(resourceName)) {
+ if (input == null || !processed.add(resourceName)) {
+ continue;
+ }
+ ByteArrayOutputStream arr = new ByteArrayOutputStream();
+ IOUtils.copy(input, arr);
+ String base64 = Base64.getEncoder().encodeToString(arr.toByteArray());
+ input.close();
+ final SourceWriter w = context.getWriter();
+ w.append("// Resource " + resourceName + " included by " + className).newLine();
+ w.append("if (!window.teaVMResources) window.teaVMResources = {};").newLine();
+ w.append("window.teaVMResources['" + resourceName + "'] = '");
+ w.append(base64).append("';").newLine().newLine();
+ }
+ hasOneResource = true;
+ }
+ if (hasOneResource) {
+ context.getWriter().append("// TeaVM generated classes").newLine();
+ }
+ }
+}