Chrome DevTools no longer supports displayName, use name instead
Adds `name` get function to each function object when this flag is
enabled, following the guidance in
https://bugs.chromium.org/p/chromium/issues/detail?id=1178257. The
displayName property is still set for now for backwards compatibility,
and by default neither of these are set, but are hidden behind the
-XmethodNameDisplayMode flag.
Bug: #9735
Change-Id: I1f963607926e111cb6c67a2b2de0de9bbb3a12d3
Bug-Link: https://github.com/gwtproject/gwt/issues/9735
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index 1eebb9d..6647795 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -2338,8 +2338,8 @@
addMethodDefinitionStatement(method, methodDefinitionStatement);
if (shouldEmitDisplayNames()) {
- JsExprStmt displayNameAssignment = outputDisplayName(functionNameRef, method);
- addMethodDefinitionStatement(method, displayNameAssignment);
+ addMethodDefinitionStatement(method, outputDisplayName(functionNameRef, method));
+ addMethodDefinitionStatement(method, outputFunctionNameProperty(functionNameRef, method));
}
}
@@ -2359,6 +2359,21 @@
return createAssignment(displayName, displayMethodName).makeStmt();
}
+ private JsExprStmt outputFunctionNameProperty(JsNameRef function, JMethod method) {
+ String displayStringName = getDisplayName(method);
+ SourceInfo sourceInfo = function.getSourceInfo();
+ JsStringLiteral displayMethodName =
+ new JsStringLiteral(sourceInfo, displayStringName);
+ JsObjectLiteral props = JsObjectLiteral.builder(sourceInfo)
+ .add(new JsStringLiteral(sourceInfo, "name"), JsObjectLiteral.builder(sourceInfo)
+ .add("value", displayMethodName)
+ .build())
+ .build();
+ JsExpression[] args = {function, props};
+ return constructInvocation(sourceInfo, RuntimeConstants.RUNTIME_DEFINE_PROPERTIES, args)
+ .makeStmt();
+ }
+
private boolean shouldEmitDisplayNames() {
return methodNameMappingMode != OptionMethodNameDisplayMode.Mode.NONE;
}