diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index c41e0848f..28f85aaf8 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -43,7 +43,7 @@ jobs: java-version: ${{ matrix.java }} - name: Build - run: mvn -q install -DskipTests + run: mvn install -DskipTests - name: Javadoc run: mvn -q "javadoc:aggregate" diff --git a/boot-agent-test/src/test/java/org/netbeans/html/bootagent/KOFx.java b/boot-agent-test/src/test/java/org/netbeans/html/bootagent/KOFx.java index 60bc3f556..558dbb044 100644 --- a/boot-agent-test/src/test/java/org/netbeans/html/bootagent/KOFx.java +++ b/boot-agent-test/src/test/java/org/netbeans/html/bootagent/KOFx.java @@ -65,7 +65,7 @@ public synchronized void run() { boolean notify = true; try (var ctx = Fn.activate(p)) { if (inst == null) { - inst = m.getDeclaringClass().newInstance(); + inst = m.getDeclaringClass().getConstructor().newInstance(); } result = m.invoke(inst); if (result == null) { diff --git a/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java index 12c73a298..0856d6e89 100644 --- a/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java @@ -137,6 +137,7 @@ public void start(Stage primaryStage) throws Exception { start(primaryStage, this.getParameters().getRaw().get(0)); } + @SuppressWarnings("unchecked") final void start(Stage primaryStage, String callee) { BorderPane r = new BorderPane(); Object[] arr = findInitialSize(callee); diff --git a/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXGCPresenter.java b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXGCPresenter.java index a816725e2..a265e4ed3 100644 --- a/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXGCPresenter.java +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXGCPresenter.java @@ -101,8 +101,7 @@ private static void assertGC(Reference ref) { } try { - System.gc(); - System.runFinalization(); + forceGC(); } catch (Error err) { LOG.log(Level.INFO, "Problems during GCing attempt of " + ref.get(), err); } @@ -111,4 +110,10 @@ private static void assertGC(Reference ref) { LOG.log(Level.FINE, "Good: No GC of {1} for {0} ms.", new Object[]{took, ref.get()}); } + @SuppressWarnings("deprecation") + private static void forceGC() { + System.gc(); + System.runFinalization(); + } + } diff --git a/boot-fx/src/test/java/org/netbeans/html/boot/fx/KOFx.java b/boot-fx/src/test/java/org/netbeans/html/boot/fx/KOFx.java index 189f0e70b..85578b37e 100644 --- a/boot-fx/src/test/java/org/netbeans/html/boot/fx/KOFx.java +++ b/boot-fx/src/test/java/org/netbeans/html/boot/fx/KOFx.java @@ -76,7 +76,7 @@ public synchronized void run() { try (var ctx = Fn.activate(p)) { assert ctx != null; if (inst == null) { - inst = m.getDeclaringClass().newInstance(); + inst = m.getDeclaringClass().getConstructor().newInstance(); } result = m.invoke(inst); if (result == null) { diff --git a/boot-script/src/test/java/net/java/html/boot/script/KOCase.java b/boot-script/src/test/java/net/java/html/boot/script/KOCase.java index 3f67ddaee..9cf30eb4a 100644 --- a/boot-script/src/test/java/net/java/html/boot/script/KOCase.java +++ b/boot-script/src/test/java/net/java/html/boot/script/KOCase.java @@ -75,7 +75,7 @@ public synchronized void run() { try (Closeable a = Fn.activate(p)) { assert a != null; if (inst == null) { - inst = m.getDeclaringClass().newInstance(); + inst = m.getDeclaringClass().getConstructor().newInstance(); } result = m.invoke(inst); if (result == null) { diff --git a/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java index 409839a59..c3aca6512 100644 --- a/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java +++ b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java @@ -23,7 +23,6 @@ import java.lang.reflect.Method; import net.java.html.js.JavaScriptBody; import org.netbeans.html.boot.spi.Fn; -import org.netbeans.html.boot.impl.FnContext; import org.testng.IHookCallBack; import org.testng.IHookable; import org.testng.ITest; @@ -55,7 +54,7 @@ public String getTestName() { public synchronized void executeTest() throws Throwable { skipAsyncJavaTestWhenNoPromise(); // BEGIN: net.java.html.boot.script.ScriptEngineCase#run - Object instance = method.getDeclaringClass().newInstance();; + Object instance = method.getDeclaringClass().getConstructor().newInstance(); for (int round = 0;; round++) { try (var ctx = Fn.activate(p)) { assert ctx != null; diff --git a/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java b/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java index 2b39d661b..041fb7094 100644 --- a/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java +++ b/boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java @@ -270,7 +270,7 @@ private boolean generateBody(boolean hasCode) { super.visitMethodInsn( Opcodes.INVOKESTATIC, "org/netbeans/html/boot/spi/Fn", "isValid", - "(Lorg/netbeans/html/boot/spi/Fn;)Z" + "(Lorg/netbeans/html/boot/spi/Fn;)Z", false ); Label ifNotNull = new Label(); super.visitJumpInsn(Opcodes.IFNE, ifNotNull); @@ -294,7 +294,8 @@ private boolean generateBody(boolean hasCode) { } super.visitMethodInsn(Opcodes.INVOKESTATIC, "org/netbeans/html/boot/spi/Fn", "define", - "(Ljava/lang/Class;ZLjava/lang/String;[Ljava/lang/String;)Lorg/netbeans/html/boot/spi/Fn;" + "(Ljava/lang/Class;ZLjava/lang/String;[Ljava/lang/String;)Lorg/netbeans/html/boot/spi/Fn;", + false ); Label noPresenter = new Label(); super.visitInsn(Opcodes.DUP); @@ -309,7 +310,8 @@ private boolean generateBody(boolean hasCode) { super.visitLdcInsn(resource); super.visitMethodInsn(Opcodes.INVOKESTATIC, "org/netbeans/html/boot/spi/Fn", "preload", - "(Lorg/netbeans/html/boot/spi/Fn;Ljava/lang/Class;Ljava/lang/String;)Lorg/netbeans/html/boot/spi/Fn;" + "(Lorg/netbeans/html/boot/spi/Fn;Ljava/lang/Class;Ljava/lang/String;)Lorg/netbeans/html/boot/spi/Fn;", + false ); } super.visitInsn(Opcodes.DUP); @@ -387,7 +389,7 @@ public void visitBaseType(char descriptor) { throw new IllegalStateException(t.toString()); } FindInMethod.super.visitMethodInsn(Opcodes.INVOKESTATIC, - factory, "valueOf", "(" + descriptor + ")L" + factory + ";" + factory, "valueOf", "(" + descriptor + ")L" + factory + ";", false ); FindInMethod.super.visitInsn(Opcodes.AASTORE); } @@ -444,13 +446,13 @@ private void loadObject() { int lastSlash = FindInClass.this.name.lastIndexOf('/'); String jsCallbacks = FindInClass.this.name.substring(0, lastSlash + 1) + "$JsCallbacks$"; FindInMethod.super.visitFieldInsn(Opcodes.GETSTATIC, jsCallbacks, "VM", "L" + jsCallbacks + ";"); - FindInMethod.super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, jsCallbacks, "current", "()L" + jsCallbacks + ";"); + FindInMethod.super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, jsCallbacks, "current", "()L" + jsCallbacks + ";", false); FindInMethod.super.visitInsn(Opcodes.AASTORE); } if (!fia.asyncJavaScript()) { super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, - "org/netbeans/html/boot/spi/Fn", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" + "org/netbeans/html/boot/spi/Fn", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false ); switch (sv.returnType.getSort()) { case Type.VOID: @@ -467,7 +469,7 @@ private void loadObject() { super.visitJumpInsn(Opcodes.IFNULL, handleNullValue); super.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Boolean"); super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, - "java/lang/Boolean", "booleanValue", "()Z" + "java/lang/Boolean", "booleanValue", "()Z", false ); super.visitInsn(Opcodes.IRETURN); super.visitLabel(handleNullValue); @@ -478,13 +480,13 @@ private void loadObject() { default: super.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Number"); super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, - "java/lang/Number", sv.returnType.getClassName() + "Value", "()" + sv.returnType.getDescriptor() + "java/lang/Number", sv.returnType.getClassName() + "Value", "()" + sv.returnType.getDescriptor(), false ); super.visitInsn(sv.returnType.getOpcode(Opcodes.IRETURN)); } } else { super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, - "org/netbeans/html/boot/spi/Fn", "invokeLater", "(Ljava/lang/Object;[Ljava/lang/Object;)V" + "org/netbeans/html/boot/spi/Fn", "invokeLater", "(Ljava/lang/Object;[Ljava/lang/Object;)V", false ); super.visitInsn(Opcodes.RETURN); } @@ -496,7 +498,7 @@ private void loadObject() { super.visitInsn(Opcodes.DUP); super.visitLdcInsn("No presenter active. Use BrwsrCtx.execute!"); super.visitMethodInsn(Opcodes.INVOKESPECIAL, - "java/lang/IllegalStateException", "", "(Ljava/lang/String;)V" + "java/lang/IllegalStateException", "", "(Ljava/lang/String;)V", false ); this.visitInsn(Opcodes.ATHROW); } diff --git a/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java b/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java index f8a7cdbb4..c6cee062a 100644 --- a/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java @@ -73,6 +73,7 @@ public final class JavaScriptProcesor extends AbstractProcessor { public JavaScriptProcesor() { } + @SuppressWarnings("deprecation") @Override public Set getSupportedAnnotationTypes() { Set set = new HashSet<>(); @@ -152,6 +153,19 @@ public boolean process(Set annotations, RoundEnvironment checkJavaScriptBody(r, e, msg); } + processGroup(roundEnv, msg); + + generateCallbackClass(javacalls); + javacalls.clear(); + if (roundEnv.processingOver()) { + generateJavaScriptBodyList(bodies); + bodies.clear(); + } + return true; + } + + @SuppressWarnings("deprecation") + private void processGroup(RoundEnvironment roundEnv, final Messager msg) { for (Element e : roundEnv.getElementsAnnotatedWith(JavaScriptResource.Group.class)) { JavaScriptResource.Group g = e.getAnnotation(JavaScriptResource.Group.class); if (g == null) { @@ -161,13 +175,6 @@ public boolean process(Set annotations, RoundEnvironment checkJavaScriptBody(r, e, msg); } } - - if (roundEnv.processingOver()) { - generateCallbackClass(javacalls); - generateJavaScriptBodyList(bodies); - javacalls.clear(); - } - return true; } private void checkJavaScriptBody(JavaScriptResource r, Element e, final Messager msg) { @@ -528,7 +535,7 @@ private void generateCallbackClass(Map> pr Map map = pkgEn.getValue(); StringBuilder source = new StringBuilder(); source.append("package ").append(pkgName).append(";\n"); - source.append("@java.lang.SuppressWarnings(\"all\")\n"); + source.append("@java.lang.SuppressWarnings({\"unchecked\", \"all\"})\n"); source.append("public final class $JsCallbacks$ {\n"); source.append(" static final $JsCallbacks$ VM = new $JsCallbacks$(null);\n"); source.append(" private final org.netbeans.html.boot.spi.Fn.Ref ref;\n"); diff --git a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java index 04ca4621b..79ca757fe 100644 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java @@ -76,7 +76,7 @@ public void assertClassDefined() { @Test public void instanceMethod() throws Throwable { Method plus = methodClass.getMethod("plusInst", int.class); - java.lang.Object inst = methodClass.newInstance(); + java.lang.Object inst = methodClass.getConstructor().newInstance(); try { assertEquals(plus.invoke(inst, 10), 10); } catch (InvocationTargetException ex) { @@ -94,7 +94,7 @@ public void assertClassDefined() { } @Test public void getThis() throws Throwable { - java.lang.Object th = methodClass.newInstance(); + java.lang.Object th = methodClass.getConstructor().newInstance(); Method st = methodClass.getMethod("getThis"); try { assertEquals(st.invoke(th), th); @@ -154,7 +154,7 @@ public void run() { @Test public void callJavaScriptMethodOnOwnClass() throws Throwable { try { - java.lang.Object thiz = methodClass.newInstance(); + java.lang.Object thiz = methodClass.getConstructor().newInstance(); Method st = methodClass.getMethod("returnYourSelf", methodClass); assertEquals(st.invoke(null, thiz), thiz, "Returns this"); } catch (InvocationTargetException ex) { @@ -172,6 +172,7 @@ public void run() { assertEquals(st.invoke(null, "42"), 42, "Meaning of JavaScript?"); } + @SuppressWarnings("unchecked") @Test public void passEnum() throws Throwable { Class enmClazz = methodClass.getDeclaredClasses()[0]; assertTrue(Enum.class.isAssignableFrom(enmClazz), "It is an enum: " + enmClazz); @@ -199,7 +200,7 @@ public void run() { @Test public void recordError() throws Throwable { Method st = methodClass.getMethod("recordError", java.lang.Object.class); - assertEquals(st.invoke(methodClass.newInstance(), "Hello"), "Hello", "The same parameter returned"); + assertEquals(st.invoke(methodClass.getConstructor().newInstance(), "Hello"), "Hello", "The same parameter returned"); } @Test public void plusOrMul() throws Throwable { diff --git a/browser/src/main/java/org/netbeans/html/presenters/browser/Browser.java b/browser/src/main/java/org/netbeans/html/presenters/browser/Browser.java index 13f7ece51..8ad888ea5 100644 --- a/browser/src/main/java/org/netbeans/html/presenters/browser/Browser.java +++ b/browser/src/main/java/org/netbeans/html/presenters/browser/Browser.java @@ -204,6 +204,7 @@ public final void displayPage(URL page, Runnable onPageLoad) { } } + @SuppressWarnings("unchecked") static T raise(Class aClass, Exception ex) throws T { throw (T)ex; } @@ -357,7 +358,7 @@ public void service(HttpServer serv String prefix = "http://" + server.getServerName(rqst) + ":" + server.getServerPort(rqst) + "/"; Writer w = server.getWriter(rspns); server.setContentType(rspns, "text/html"); - final Command cmd = new Command(server, Browser.this, prefix); + final Command cmd = new Command<>(server, Browser.this, prefix); try { is = new InputStreamReader(page.openStream()); } catch (IOException ex) { @@ -403,7 +404,7 @@ public void service(HttpServer serv w.close(); } else if (path.equals("/command.js")) { String id = server.getParameter(rqst, "id"); - Command c = SESSIONS.get(id); + Command c = findCommand(id); if (c == null) { server.getWriter(rspns).write("No command for " + id); server.setStatus(rspns, 404); @@ -461,6 +462,11 @@ public void service(HttpServer serv } } + @SuppressWarnings("unchecked") + private Command findCommand(String id) { + return SESSIONS.get(id); + } + private void emitScript(Writer w, String prefix, String id) throws IOException { w.write("