You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jt...@apache.org on 2022/05/08 19:39:14 UTC
[netbeans-html4j] branch master updated: Enforce binary name for inner classes in the @JavaScriptBody callbacks
This is an automated email from the ASF dual-hosted git repository.
jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git
The following commit(s) were added to refs/heads/master by this push:
new 333650b3 Enforce binary name for inner classes in the @JavaScriptBody callbacks
333650b3 is described below
commit 333650b3fbaa3cdbec083f974816e8ae06852ffb
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Sun May 8 21:39:02 2022 +0200
Enforce binary name for inner classes in the @JavaScriptBody callbacks
---
.../html/boot/impl/JavaScriptProcesor.java | 41 ++++++++++++++++++++--
.../java/net/java/html/js/tests/AsyncJava.java | 2 +-
2 files changed, 40 insertions(+), 3 deletions(-)
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 08157278..f8a7cdbb 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
@@ -302,7 +302,7 @@ public final class JavaScriptProcesor extends AbstractProcessor {
} else if (preId == ':') {
int lastAt = userText.lastIndexOf('@', preIdentifierAt + 1);
String maybeClassName = userText.substring(lastAt + 1, preIdentifierAt - 1);
- TypeElement maybeClass = processingEnv.getElementUtils().getTypeElement(maybeClassName);
+ TypeElement maybeClass = findClass(maybeClassName);
String instanceName = null;
if (lastAt > 0 && userText.charAt(lastAt - 1) == '.') {
instanceName = endsWithIdentifier(userText, lastAt - 1);
@@ -358,6 +358,37 @@ public final class JavaScriptProcesor extends AbstractProcessor {
return Collections.emptyList();
}
+ final TypeElement findClass(String classname) {
+ if (classname == null) {
+ return null;
+ }
+ TypeElement clazz = processingEnv.getElementUtils().getTypeElement(classname);
+ if (clazz != null) {
+ return clazz;
+ }
+ int dolar = classname.indexOf('$');
+ if (dolar == -1) {
+ return null;
+ }
+ final String parentName = classname.substring(0, dolar);
+ TypeElement parent = processingEnv.getElementUtils().getTypeElement(parentName);
+ if (parent != null) {
+ String rest = classname.substring(dolar + 1);
+ for (Element e : parent.getEnclosedElements()) {
+ if (!e.getKind().isClass() && !e.getKind().isInterface()) {
+ continue;
+ }
+ if (rest.equals(e.getSimpleName().toString())) {
+ clazz = (TypeElement) e;
+ break;
+ }
+ }
+ }
+ String binaryClassName = classname.replace('$', '.');
+ clazz = processingEnv.getElementUtils().getTypeElement(binaryClassName);
+ return clazz;
+ }
+
final void wrongArrayError(TypeMirror paramType, Element method) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Don't use " + paramType + " array. Use Object[].", method);
}
@@ -385,13 +416,19 @@ public final class JavaScriptProcesor extends AbstractProcessor {
@Override
protected CharSequence callMethod(String ident, boolean promise, String fqn, String method, String params) {
- final TypeElement type = processingEnv.getElementUtils().getTypeElement(fqn);
+ final TypeElement type = findClass(fqn);
if (type == null) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
"Callback to non-existing class " + fqn, e
);
return "";
}
+ String binName = processingEnv.getElementUtils().getBinaryName(type).toString();
+ if (!fqn.equals(binName)) {
+ processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
+ "Use binary classname " + binName + " in the callback", e);
+ }
+
ExecutableElement found = null;
String paramTypes = null;
StringBuilder foundParams = new StringBuilder();
diff --git a/json-tck/src/main/java/net/java/html/js/tests/AsyncJava.java b/json-tck/src/main/java/net/java/html/js/tests/AsyncJava.java
index 76e9cad7..42792318 100644
--- a/json-tck/src/main/java/net/java/html/js/tests/AsyncJava.java
+++ b/json-tck/src/main/java/net/java/html/js/tests/AsyncJava.java
@@ -28,7 +28,7 @@ public class AsyncJava {
var result = {
x : -1
};
- var facN = fac.@net.java.html.js.tests.AsyncJava.Fac::fac(I)(n);
+ var facN = fac.@net.java.html.js.tests.AsyncJava$Fac::fac(I)(n);
facN.then(function (res) {
result.x = res;
done.@java.lang.Runnable::run()();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists