GTW-4830 Better JCEF support

create CefMessageRouter instances using JBCefApp factory method, to make sure the code will work in rem-dev environment

GitOrigin-RevId: a6860c59dfd62d9c15ddf98694fed9f3e30ebce7
This commit is contained in:
Dmitry Batrak
2024-06-21 16:50:25 +03:00
committed by intellij-monorepo-bot
parent 8ec6736e20
commit 94bdd1a37f
3 changed files with 15 additions and 1 deletions

View File

@@ -1038,6 +1038,18 @@
<constraint name="n" within="" contains="" />
<constraint name="__context__" script="&quot;import com.intellij.psi.*&#10;import com.intellij.psi.search.GlobalSearchScope&#10;import com.intellij.psi.util.PsiUtil&#10;&#10;def stringUtil = JavaPsiFacade.getInstance(e.getProject()).findClass(&quot;com.intellij.openapi.util.text.StringUtil&quot;, GlobalSearchScope.allScope(e.getProject()));&#10;def strVirtualFile = PsiUtil.getVirtualFile(stringUtil);&#10;&#10;e instanceof PsiLiteralExpression &amp;&amp;&#10;n instanceof PsiLiteralExpression &amp;&amp;&#10;((PsiLiteralExpression)e).getValue() instanceof String &amp;&amp;&#10;((PsiLiteralExpression)n).getValue() instanceof Integer &amp;&amp;&#10;((String)((PsiLiteralExpression)e).getValue()).length() ==&#10;((Integer)((PsiLiteralExpression)n).getValue()).intValue() &amp;&amp;&#10;e.getParent().getParent().getParent() instanceof PsiIfStatement &amp;&amp;&#10;((PsiIfStatement)e.getParent().getParent().getParent()).getElseBranch() == null &amp;&amp; &#10;strVirtualFile != null &amp;&amp; &#10;e.getResolveScope().contains(strVirtualFile)&quot;" target="true" within="" contains="" />
</replaceConfiguration>
<searchConfiguration name="CefMessageRouter.create" description="Instances of CefMessagerRouter created directly are not supported on the backend in remote development. Use JBCefApp.createMessageRouter or migrate to JBCefJSQuery. " problemDescriptor="Use JBCefApp.createMessageRouter or migrate to JBCefJSQuery." text="$Instance$.$MethodCall$($Parameter$)" recursive="true" caseInsensitive="true" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="Instance" regexp="CefMessageRouter" within="" contains="" />
<constraint name="MethodCall" regexp="create" within="" contains="" />
<constraint name="Parameter" minCount="0" maxCount="2147483647" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="CefMessageRouter.create" text="$Before$.$MethodCall$($Parameter$)" recursive="true" caseInsensitive="true" type="Kotlin" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="Before" regexp="CefMessageRouter" within="" contains="" />
<constraint name="MethodCall" regexp="create" within="" contains="" />
<constraint name="Parameter" minCount="0" maxCount="2147483647" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="Comparing Swift Types without context" description="Whether two types are equal depends on the context" suppressId="swift.type.equals" problemDescriptor="Use equalsInContext" text="$ref1$.equals($ref2$)" recursive="true" caseInsensitive="true" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="ref2" nameOfExprType="com\.jetbrains\.swift\.psi\.types\.SwiftType" exprTypeWithinHierarchy="true" within="" contains="" />

View File

@@ -387,6 +387,7 @@ public final class JBCefApp {
if (myDelegate != null) {
return myDelegate.createMessageRouter(config);
}
//noinspection SSBasedInspection
return CefMessageRouter.create(config);
}

View File

@@ -21,6 +21,7 @@ import com.intellij.openapi.wm.StatusBar
import com.intellij.platform.util.coroutines.childScope
import com.intellij.testFramework.LightVirtualFile
import com.intellij.ui.components.JBLoadingPanel
import com.intellij.ui.jcef.JBCefApp
import com.intellij.ui.jcef.JBCefBrowserBase.ErrorPage
import com.intellij.ui.jcef.JCEFHtmlPanel
import com.intellij.util.Alarm
@@ -102,7 +103,7 @@ internal class HTMLFileEditor(private val project: Project, private val file: Li
val queryHandler = request.queryHandler
if (queryHandler != null) {
val config = CefMessageRouter.CefMessageRouterConfig(HTMLEditorProvider.JS_FUNCTION_NAME, "${HTMLEditorProvider.JS_FUNCTION_NAME}Cancel")
val jsRouter = CefMessageRouter.create(config)
val jsRouter = JBCefApp.getInstance().createMessageRouter(config)
jsRouter.addHandler(object : CefMessageRouterHandlerAdapter() {
override fun onQuery(browser: CefBrowser, frame: CefFrame, id: Long, request: String?, persistent: Boolean, callback: CefQueryCallback): Boolean {
htmlTabScope.launch {