[inline-completion] IJPL-161906: make FrontendInlineCompletionHandler shared

(cherry picked from commit a14fc54fac3b56d7370fe64ea9f63a12c38f081b)

IJ-MR-147762

GitOrigin-RevId: e0140ab89f1fd9d5f75938572f53c57999a9c505
This commit is contained in:
Kirill.Karnaukhov
2024-10-28 14:25:23 +00:00
committed by intellij-monorepo-bot
parent af3d6f0506
commit 9076a2e253
12 changed files with 31 additions and 63 deletions
-1
View File
@@ -699,7 +699,6 @@
<module fileurl="file://$PROJECT_DIR$/platform/indexing-impl/intellij.platform.indexing.impl.iml" filepath="$PROJECT_DIR$/platform/indexing-impl/intellij.platform.indexing.impl.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/indexing-tests/intellij.platform.indexing.tests.iml" filepath="$PROJECT_DIR$/platform/indexing-tests/intellij.platform.indexing.tests.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/inline-completion/shared/intellij.platform.inline.completion.iml" filepath="$PROJECT_DIR$/platform/inline-completion/shared/intellij.platform.inline.completion.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/inline-completion/frontend/intellij.platform.inline.completion.frontend.iml" filepath="$PROJECT_DIR$/platform/inline-completion/frontend/intellij.platform.inline.completion.frontend.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/inspect/intellij.platform.inspect.iml" filepath="$PROJECT_DIR$/platform/inspect/intellij.platform.inspect.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/instanceContainer/intellij.platform.instanceContainer.iml" filepath="$PROJECT_DIR$/platform/instanceContainer/intellij.platform.instanceContainer.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/instanceContainer/intellij.platform.instanceContainer.tests.iml" filepath="$PROJECT_DIR$/platform/instanceContainer/intellij.platform.instanceContainer.tests.iml" />
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/" isTestSource="false" packagePrefix="com.intellij.codeInsight.inline.completion.frontend" />
<sourceFolder url="file://$MODULE_DIR$/resources/" type="java-resource" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kotlin-stdlib" level="project" />
<orderEntry type="module" module-name="intellij.platform.ide.impl" />
<orderEntry type="module" module-name="intellij.platform.inline.completion" />
<orderEntry type="module" module-name="intellij.platform.lang" />
</component>
</module>
@@ -1,11 +0,0 @@
<idea-plugin package="com.intellij.codeInsight.inline.completion.frontend">
<dependencies>
<module name="intellij.platform.inline.completion"/>
</dependencies>
<extensions defaultExtensionNs="com.intellij">
<inline.completion.handlerInitializer
implementation="com.intellij.codeInsight.inline.completion.frontend.FrontendInlineCompletionHandlerInitializer"/>
</extensions>
</idea-plugin>
@@ -1,20 +0,0 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.inline.completion.frontend
import com.intellij.codeInsight.inline.completion.InlineCompletionHandler
import com.intellij.codeInsight.inline.completion.InlineCompletionHandlerInitializer
import com.intellij.codeInsight.inline.completion.InlineCompletionRemDevUtils
import com.intellij.codeWithMe.ClientId
import com.intellij.codeWithMe.ClientId.Companion.isLocal
import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Editor
import kotlinx.coroutines.CoroutineScope
internal class FrontendInlineCompletionHandlerInitializer : InlineCompletionHandlerInitializer {
override fun initialize(editor: Editor, scope: CoroutineScope, disposable: Disposable): InlineCompletionHandler? {
if (!ClientId.currentOrNull.isLocal && InlineCompletionRemDevUtils.isRhizomeUsed()) {
return null
}
return FrontendInlineCompletionHandler(scope, editor, disposable)
}
}
@@ -1,5 +1,10 @@
<idea-plugin package="com.intellij.codeInsight.inline.completion">
<extensions defaultExtensionNs="com.intellij">
<inline.completion.handlerInitializer
order="last"
implementation="com.intellij.codeInsight.inline.completion.InlineCompletionHandlerInitializerImpl"/>
<registryKey key="inline.completion.rem.dev.use.rhizome"
description="Use Rhizome DB for inline completion implementation in RemDev"
restartRequired="true"
@@ -10,7 +15,6 @@
<extensionPoint
qualifiedName="com.intellij.inline.completion.shortcutHintListener"
interface="com.intellij.codeInsight.inline.completion.shortcut.InlineCompletionShortcutHintListener"
dynamic="true"
/>
dynamic="true"/>
</extensionPoints>
</idea-plugin>
@@ -1,18 +1,19 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.inline.completion.frontend
package com.intellij.codeInsight.inline.completion
import com.intellij.codeInsight.inline.completion.*
import com.intellij.codeInsight.inline.completion.frontend.tooltip.onboarding.InlineCompletionOnboardingListener
import com.intellij.codeInsight.inline.completion.logs.InlineCompletionUsageTracker.ShownEvents.FinishType
import com.intellij.codeInsight.inline.completion.onboarding.InlineCompletionOnboardingListener
import com.intellij.codeInsight.inline.completion.session.InlineCompletionContext
import com.intellij.codeInsight.inline.completion.session.InlineCompletionInvalidationListener
import com.intellij.codeInsight.inline.completion.session.InlineCompletionSession
import com.intellij.codeInsight.inline.completion.session.InlineCompletionSessionManager
import com.intellij.codeInsight.inline.completion.suggestion.InlineCompletionSuggestionUpdateManager
import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Editor
import com.intellij.util.EventDispatcher
import kotlinx.coroutines.CoroutineScope
internal class FrontendInlineCompletionHandler(
internal class InlineCompletionHandlerImpl(
scope: CoroutineScope,
editor: Editor,
parentDisposable: Disposable
@@ -23,6 +24,10 @@ internal class FrontendInlineCompletionHandler(
InlineCompletionOnboardingListener.createIfOnboarding(editor)?.let(::addEventListener)
}
// Fighting with 'AccessError' of protected method
private val myInvalidationListeners: EventDispatcher<InlineCompletionInvalidationListener>
get() = invalidationListeners
override fun startSessionOrNull(request: InlineCompletionRequest, provider: InlineCompletionProvider): InlineCompletionSession? {
return sessionManager.createSession(provider, request, parentDisposable, specificId = null)
}
@@ -41,10 +46,10 @@ internal class FrontendInlineCompletionHandler(
// TODO share with backend
when (val reason = invalidatedResult?.reason) {
is UpdateSessionResult.Invalidated.Reason.Event -> {
invalidationListeners.multicaster.onInvalidatedByEvent(reason.event)
myInvalidationListeners.multicaster.onInvalidatedByEvent(reason.event)
}
UpdateSessionResult.Invalidated.Reason.UnclassifiedDocumentChange -> {
invalidationListeners.multicaster.onInvalidatedByUnclassifiedDocumentChange()
myInvalidationListeners.multicaster.onInvalidatedByUnclassifiedDocumentChange()
}
null -> Unit
}
@@ -0,0 +1,12 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.inline.completion
import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Editor
import kotlinx.coroutines.CoroutineScope
internal class InlineCompletionHandlerInitializerImpl : InlineCompletionHandlerInitializer {
override fun initialize(editor: Editor, scope: CoroutineScope, disposable: Disposable): InlineCompletionHandler {
return InlineCompletionHandlerImpl(scope, editor, disposable)
}
}
@@ -1,10 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.inline.completion.frontend
package com.intellij.codeInsight.inline.completion
import com.intellij.codeInsight.hint.HintManager
import com.intellij.codeInsight.inline.completion.InlineCompletionEvent
import com.intellij.codeInsight.inline.completion.InlineCompletionEventAdapter
import com.intellij.codeInsight.inline.completion.InlineCompletionEventType
import com.intellij.codeInsight.inline.completion.logs.InlineCompletionUsageTracker
import com.intellij.codeInsight.inline.completion.session.InlineCompletionSession
import com.intellij.lang.LangBundle
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.inline.completion.frontend.tooltip.onboarding
package com.intellij.codeInsight.inline.completion.onboarding
import com.intellij.codeInsight.inline.completion.InlineCompletionEventAdapter
import com.intellij.codeInsight.inline.completion.InlineCompletionEventType
@@ -8,6 +8,5 @@
<orderEntry type="module" module-name="intellij.platform.main" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.platform.navbar.frontend" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.platform.debugger.impl.frontend" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.platform.inline.completion.frontend" scope="RUNTIME" />
</component>
</module>
@@ -24,6 +24,5 @@
<module name="intellij.platform.frontend"/>
<module name="intellij.platform.inline.completion"/>
<module name="intellij.platform.inline.completion.frontend"/>
</content>
</idea-plugin>