Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ import org.eclipse.lsp4j.jsonrpc.services.JsonNotification
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
import org.eclipse.lsp4j.services.LanguageServer
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture

/**
* Remote interface exposed by the Amazon Q language server
*/
@Suppress("unused")
interface AmazonQLanguageServer : LanguageServer {
@JsonNotification("aws/syncModuleDependencies")
fun syncModuleDependencies(params: SyncModuleDependenciesParams): CompletableFuture<Unit>
@JsonNotification("aws/didChangeDependencyPaths")
fun didChangeDependencyPaths(params: DidChangeDependencyPathsParams): CompletableFuture<Unit>

@JsonRequest("aws/credentials/token/update")
fun updateTokenCredentials(payload: UpdateCredentialsPayload): CompletableFuture<ResponseMessage>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import com.intellij.openapi.roots.ModuleRootListener
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.ModuleDependencyProvider.Companion.EP_NAME
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture

class DefaultModuleDependenciesService(
Expand All @@ -34,16 +34,16 @@
syncAllModules()
}

override fun syncModuleDependencies(params: SyncModuleDependenciesParams): CompletableFuture<Unit> =
override fun didChangeDependencyPaths(params: DidChangeDependencyPathsParams): CompletableFuture<Unit> =
AmazonQLspService.executeIfRunning(project) { languageServer ->
languageServer.syncModuleDependencies(params)
languageServer.didChangeDependencyPaths(params)

Check warning on line 39 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/DefaultModuleDependenciesService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/DefaultModuleDependenciesService.kt#L39

Added line #L39 was not covered by tests
}?.toCompletableFuture() ?: CompletableFuture.failedFuture(IllegalStateException("LSP Server not running"))

private fun syncAllModules() {
ModuleManager.getInstance(project).modules.forEach { module ->
EP_NAME.forEachExtensionSafe {
if (it.isApplicable(module)) {
syncModuleDependencies(it.createParams(module))
didChangeDependencyPaths(it.createParams(module))

Check warning on line 46 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/DefaultModuleDependenciesService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/DefaultModuleDependenciesService.kt#L46

Added line #L46 was not covered by tests
return@forEachExtensionSafe
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

package software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies

import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture

interface ModuleDependenciesService {
fun syncModuleDependencies(params: SyncModuleDependenciesParams): CompletableFuture<Unit>
fun didChangeDependencyPaths(params: DidChangeDependencyPathsParams): CompletableFuture<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies

import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.module.Module
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams

interface ModuleDependencyProvider {
companion object {
val EP_NAME = ExtensionPointName<ModuleDependencyProvider>("software.aws.toolkits.jetbrains.moduleDependencyProvider")
}

fun isApplicable(module: Module): Boolean
fun createParams(module: Module): SyncModuleDependenciesParams
fun createParams(module: Module): DidChangeDependencyPathsParams
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.vfs.VfsUtil
import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.ModuleDependencyProvider
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams

internal class JavaModuleDependencyProvider : ModuleDependencyProvider {
override fun isApplicable(module: Module): Boolean =
ModuleRootManager.getInstance(module).sdk?.sdkType is JavaSdkType

override fun createParams(module: Module): SyncModuleDependenciesParams {
override fun createParams(module: Module): DidChangeDependencyPathsParams {
val sourceRoots = getSourceRoots(module)
val dependencies = mutableListOf<String>()

Expand All @@ -26,7 +26,7 @@
true
}

return SyncModuleDependenciesParams(
return DidChangeDependencyPathsParams(

Check warning on line 29 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/providers/JavaModuleDependencyProvider.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/providers/JavaModuleDependencyProvider.kt#L29

Added line #L29 was not covered by tests
moduleName = module.name,
programmingLanguage = "Java",
files = sourceRoots,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
import com.jetbrains.python.packaging.management.PythonPackageManager
import com.jetbrains.python.sdk.PythonSdkUtil
import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.ModuleDependencyProvider
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams

internal class PythonModuleDependencyProvider : ModuleDependencyProvider {
override fun isApplicable(module: Module): Boolean =
PythonSdkUtil.findPythonSdk(module) != null

override fun createParams(module: Module): SyncModuleDependenciesParams {
override fun createParams(module: Module): DidChangeDependencyPathsParams {
val sourceRoots = getSourceRoots(module)
val dependencies = mutableListOf<String>()

Expand All @@ -25,7 +25,7 @@
}
}

return SyncModuleDependenciesParams(
return DidChangeDependencyPathsParams(

Check warning on line 28 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/providers/PythonModuleDependencyProvider.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/providers/PythonModuleDependencyProvider.kt#L28

Added line #L28 was not covered by tests
moduleName = module.name,
programmingLanguage = "Python",
files = sourceRoots,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@

package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies

class SyncModuleDependenciesParams(
class DidChangeDependencyPathsParams(

Check warning on line 6 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/dependencies/DidChangeDependencyPathsParams.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/dependencies/DidChangeDependencyPathsParams.kt#L6

Added line #L6 was not covered by tests
val moduleName: String,

Check warning on line 7 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/dependencies/DidChangeDependencyPathsParams.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Property "moduleName" is never used
val programmingLanguage: String,
val files: List<String>,
val dirs: List<String>,

Check warning on line 10 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/dependencies/DidChangeDependencyPathsParams.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Property "dirs" is never used
val includePatterns: List<String>,

Check warning on line 11 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/dependencies/DidChangeDependencyPathsParams.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Property "includePatterns" is never used
val excludePatterns: List<String>,

Check warning on line 12 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/dependencies/DidChangeDependencyPathsParams.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Property "excludePatterns" is never used
)
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Test
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.ModuleDependencyProvider.Companion.EP_NAME
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.SyncModuleDependenciesParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture
import java.util.function.Consumer

Expand All @@ -45,7 +45,7 @@ class DefaultModuleDependenciesServiceTest {
mockDependencyProvider = mockk<ModuleDependencyProvider>()
mockLanguageServer = mockk()

every { mockLanguageServer.syncModuleDependencies(any()) } returns CompletableFuture<Unit>()
every { mockLanguageServer.didChangeDependencyPaths(any()) } returns CompletableFuture<Unit>()

// Mock Application
mockApplication = mockk()
Expand Down Expand Up @@ -89,7 +89,7 @@ class DefaultModuleDependenciesServiceTest {
fun `test initial sync on construction`() {
// Arrange
val module = mockk<Module>()
val params = SyncModuleDependenciesParams(
val params = DidChangeDependencyPathsParams(
moduleName = "testModule",
programmingLanguage = "Java",
files = listOf("src/main"),
Expand All @@ -104,23 +104,23 @@ class DefaultModuleDependenciesServiceTest {

sut = DefaultModuleDependenciesService(project, mockk())

verify { mockLanguageServer.syncModuleDependencies(params) }
verify { mockLanguageServer.didChangeDependencyPaths(params) }
}

@Test
fun `test rootsChanged with multiple modules`() {
// Arrange
val module1 = mockk<Module>()
val module2 = mockk<Module>()
val params1 = SyncModuleDependenciesParams(
val params1 = DidChangeDependencyPathsParams(
moduleName = "module1",
programmingLanguage = "Java",
files = listOf("src/main1"),
dirs = listOf("lib1"),
includePatterns = emptyList(),
excludePatterns = emptyList()
)
val params2 = SyncModuleDependenciesParams(
val params2 = DidChangeDependencyPathsParams(
moduleName = "module2",
programmingLanguage = "Java",
files = listOf("src/main2"),
Expand All @@ -139,8 +139,8 @@ class DefaultModuleDependenciesServiceTest {
sut = DefaultModuleDependenciesService(project, mockk())

// Verify both modules were synced
verify { mockLanguageServer.syncModuleDependencies(params1) }
verify { mockLanguageServer.syncModuleDependencies(params2) }
verify { mockLanguageServer.didChangeDependencyPaths(params1) }
verify { mockLanguageServer.didChangeDependencyPaths(params2) }
}

@Test
Expand All @@ -161,14 +161,14 @@ class DefaultModuleDependenciesServiceTest {
sut = DefaultModuleDependenciesService(project, mockk())

// Verify no sync occurred
verify(exactly = 0) { mockLanguageServer.syncModuleDependencies(any()) }
verify(exactly = 0) { mockLanguageServer.didChangeDependencyPaths(any()) }
}

@Test
fun `test rootsChanged withFileTypesChange`() {
// Arrange
val module = mockk<Module>()
val params = SyncModuleDependenciesParams(
val params = DidChangeDependencyPathsParams(
moduleName = "testModule",
programmingLanguage = "Java",
files = listOf("src/main"),
Expand All @@ -186,14 +186,14 @@ class DefaultModuleDependenciesServiceTest {
sut.rootsChanged(event)

// Verify sync occurred once - once on init and rootsChange ignores
verify(exactly = 1) { mockLanguageServer.syncModuleDependencies(params) }
verify(exactly = 1) { mockLanguageServer.didChangeDependencyPaths(params) }
}

@Test
fun `test rootsChanged after module changes`() {
// Arrange
val module = mockk<Module>()
val params = SyncModuleDependenciesParams(
val params = DidChangeDependencyPathsParams(
moduleName = "testModule",
programmingLanguage = "Java",
files = listOf("src/main"),
Expand All @@ -214,10 +214,10 @@ class DefaultModuleDependenciesServiceTest {
sut.rootsChanged(event)

// Verify sync occurred twice - once on init and once after rootsChanged
verify(exactly = 2) { mockLanguageServer.syncModuleDependencies(params) }
verify(exactly = 2) { mockLanguageServer.didChangeDependencyPaths(params) }
}

private fun prepDependencyProvider(moduleParamPairs: List<Pair<Module, SyncModuleDependenciesParams>>) {
private fun prepDependencyProvider(moduleParamPairs: List<Pair<Module, DidChangeDependencyPathsParams>>) {
every { mockModuleManager.modules } returns moduleParamPairs.map { it.first }.toTypedArray()

every {
Expand Down
Loading