Skip to content

Commit e66846c

Browse files
authored
Split out CodeWhisperer and core extension declarations (#4183)
1 parent f88a3fd commit e66846c

File tree

300 files changed

+941
-853
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

300 files changed

+941
-853
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ if (idea.project != null) { // may be null during script compilation
6969
settings {
7070
taskTriggers {
7171
afterSync(":plugin-core:sdk-codegen:generateSdks")
72-
afterSync(":plugin-toolkit:jetbrains-core:generateTelemetry")
72+
afterSync(":plugin-core:jetbrains-community:generateTelemetry")
7373
}
7474
}
7575
}

buildSrc/src/main/kotlin/toolkit-detekt.gradle.kts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,22 +41,4 @@ tasks.withType<Detekt> {
4141
tasks.withType<DetektCreateBaselineTask> {
4242
// weird issue where the baseline tasks can't find the source code
4343
source.plus(projectDir)
44-
45-
// hack around https://github.com/detekt/detekt/issues/6167
46-
doLast {
47-
Class.forName("io.gitlab.arturbosch.detekt.invoke.DetektInvoker").kotlin.let { detektInvoker ->
48-
val invokerInstance = detektInvoker.companionObject!!.memberFunctions.find { it.name == "create" }!!.call(detektInvoker.companionObjectInstance, false)
49-
val invokeCliMethod = detektInvoker.memberFunctions.find { it.name == "invokeCli" }
50-
val jdkHomeArgumentClass = Class.forName("io.gitlab.arturbosch.detekt.invoke.JdkHomeArgument").kotlin
51-
val jdkHomeArgument = jdkHomeArgumentClass.constructors.first().call(jdkHome)
52-
val jdkHomeArgs = jdkHomeArgumentClass.memberFunctions.find { it.name == "toArgument" }!!.call(jdkHomeArgument) as List<String>
53-
val taskArgs = this::class.memberProperties.find { it.name == "arguments" }!!.call(this) as List<String>
54-
55-
val cliArgs = taskArgs + jdkHomeArgs
56-
val ignoreFailures = ignoreFailures.getOrElse(false)
57-
val classpath = detektClasspath.plus(pluginClasspath)
58-
val taskName = name
59-
invokeCliMethod!!.call(invokerInstance, cliArgs, classpath, taskName, ignoreFailures)
60-
}
61-
}
6244
}

buildSrc/src/main/kotlin/toolkit-intellij-subplugin.gradle.kts

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -185,36 +185,22 @@ tasks.runIde {
185185
}
186186
}
187187

188-
configurations.instrumentedJar.configure {
189-
// when the "instrumentedJar" configuration is selected, gradle is unable to resolve configurations needed by jacoco
190-
// to calculate coverage, so we declare these as seconary artifacts on the primary "instrumentedJar" implicit variant
188+
// rewrite `runtimeElements` to use the `instrumentedJar` variant
189+
// there should never be a reason to use the default artifact at runtime, but `testFixturesRuntimeElements` pulls in `runtimeElements`
190+
// which is causing conflict between the `runtimeElements` and `instrumentedJar` variants
191+
// additionally more cleanly solves another headache from the IDE defaulting to instrumented classes while navigating between modules
192+
configurations.runtimeElements {
193+
// remove the default artifact and replace with the instrumented jar
194+
outgoing.artifacts.clear()
195+
outgoing.artifacts(configurations.instrumentedJar.map { it.artifacts })
196+
197+
// replace default classes with instrumented classes
191198
outgoing.variants {
192-
create("instrumentedClasses") {
193-
attributes {
194-
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
195-
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
196-
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL))
197-
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.CLASSES))
198-
}
199-
199+
get("classes").apply {
200+
artifacts.clear()
200201
artifact(tasks.instrumentCode) {
201202
type = ArtifactTypeDefinition.JVM_CLASS_DIRECTORY
202203
}
203204
}
204-
205-
listOf("coverageDataElements", "mainSourceElements").forEach { implicitVariant ->
206-
val configuration = configurations.getByName(implicitVariant)
207-
create(implicitVariant) {
208-
attributes {
209-
configuration.attributes.keySet().forEach {
210-
attribute(it as Attribute<Any>, configuration.attributes.getAttribute(it)!!)
211-
}
212-
}
213-
214-
configuration.artifacts.forEach {
215-
artifact(it)
216-
}
217-
}
218-
}
219205
}
220206
}

buildSrc/src/main/kotlin/toolkit-testing.gradle.kts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import software.aws.toolkits.gradle.ciOnly
55

66
plugins {
77
id("java") // Needed for referencing "implementation" configuration
8+
id("java-test-fixtures")
89
id("jacoco")
910
id("org.gradle.test-retry")
1011
id("com.adarshr.test-logger")
@@ -13,17 +14,25 @@ plugins {
1314
// TODO: https://github.com/gradle/gradle/issues/15383
1415
val versionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
1516
dependencies {
16-
testImplementation(versionCatalog.findBundle("mockito").get())
17-
testImplementation(versionCatalog.findLibrary("assertj").get())
17+
testFixturesApi(versionCatalog.findBundle("mockito").get())
18+
testFixturesApi(versionCatalog.findLibrary("assertj").get())
1819

1920
// Everything uses junit4/5 except rider, which uses TestNG
20-
testImplementation(platform(versionCatalog.findLibrary("junit5-bom").get()))
21-
testImplementation(versionCatalog.findLibrary("junit5-jupiterApi").get())
21+
testFixturesApi(platform(versionCatalog.findLibrary("junit5-bom").get()))
22+
testFixturesApi(versionCatalog.findLibrary("junit5-jupiterApi").get())
2223

2324
testRuntimeOnly(versionCatalog.findLibrary("junit5-jupiterEngine").get())
2425
testRuntimeOnly(versionCatalog.findLibrary("junit5-jupiterVintage").get())
2526
}
2627

28+
sourceSets {
29+
testFixtures {
30+
java.setSrcDirs(
31+
listOf("tstFixtures")
32+
)
33+
}
34+
}
35+
2736
jacoco {
2837
// need to probe resolved dependencies directly if moved to rich version declaration
2938
toolVersion = versionCatalog.findVersion("jacoco").get().toString()

gradle/libs.versions.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[versions]
2-
apacheCommons = "2.8.0"
2+
apache-commons-collections = "4.4"
3+
apache-commons-io = "2.8.0"
34
assertJ = "3.20.2" # Upgrading leads to SAM errors: https://youtrack.jetbrains.com/issue/KT-17765
45
# match with <root>/settings.gradle.kts
56
awsSdk = "2.20.111"
@@ -64,7 +65,8 @@ aws-sso = { module = "software.amazon.awssdk:sso", version.ref = "awsSdk" }
6465
aws-ssooidc = { module = "software.amazon.awssdk:ssooidc", version.ref = "awsSdk" }
6566
aws-sts = { module = "software.amazon.awssdk:sts", version.ref = "awsSdk" }
6667
commonmark = { module = "org.commonmark:commonmark", version.ref = "commonmark" }
67-
commons-io = { module = "commons-io:commons-io", version.ref = "apacheCommons" }
68+
commons-collections = { module = "org.apache.commons:commons-collections4", version.ref = "apache-commons-collections" }
69+
commons-io = { module = "commons-io:commons-io", version.ref = "apache-commons-io" }
6870
detekt-api = { module = "io.gitlab.arturbosch.detekt:detekt-api", version.ref = "detekt" }
6971
detekt-formattingRules = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" }
7072
detekt-test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version.ref = "detekt" }

plugins/amazonq/build.gradle.kts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ val publishChannel: String by project
1717
intellij {
1818
version.set(ideProfile.community.version())
1919
localPath.set(ideProfile.community.localPath())
20+
plugins.set(
21+
listOf(
22+
project(":plugin-core")
23+
)
24+
)
2025

2126
updateSinceUntilBuild.set(false)
2227
instrumentCode.set(false)
@@ -36,3 +41,19 @@ configurations {
3641
exclude(group = "org.jetbrains.kotlinx")
3742
}
3843
}
44+
45+
val moduleOnlyJar = tasks.create<Jar>("moduleOnlyJar") {
46+
archiveClassifier.set("module-only")
47+
// empty jar
48+
}
49+
50+
val moduleOnlyJars by configurations.creating {
51+
isCanBeConsumed = true
52+
isCanBeResolved = false
53+
// If you want this configuration to share the same dependencies, otherwise omit this line
54+
extendsFrom(configurations["implementation"], configurations["runtimeOnly"])
55+
}
56+
57+
artifacts {
58+
add("moduleOnlyJars", moduleOnlyJar)
59+
}

plugins/amazonq/codewhisperer/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ plugins {
66
}
77

88
dependencies {
9-
implementation(project(":plugin-amazonq:codewhisperer:jetbrains-community", "instrumentedJar"))
10-
implementation(project(":plugin-amazonq:codewhisperer:jetbrains-ultimate", "instrumentedJar"))
9+
implementation(project(":plugin-amazonq:codewhisperer:jetbrains-community"))
10+
implementation(project(":plugin-amazonq:codewhisperer:jetbrains-ultimate"))
1111
}

plugins/amazonq/codewhisperer/jetbrains-community/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@ intellijToolkit {
1212
}
1313

1414
dependencies {
15-
compileOnly(project(":plugin-amazonq:shared:jetbrains-community"))
15+
implementation(project(":plugin-amazonq:shared:jetbrains-community"))
16+
17+
compileOnly(project(":plugin-core:jetbrains-community"))
1618
}

plugins/amazonq/codewhisperer/jetbrains-community/resources/META-INF/plugin-codewhisperer.xml

Lines changed: 115 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,120 @@
22
<!-- SPDX-License-Identifier: Apache-2.0 -->
33

44
<idea-plugin>
5-
<actions>
6-
<action class="Hello" id="q.hello" />
5+
<applicationListeners>
6+
<listener class="software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererUIChangeListener"
7+
topic="software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererPopupStateChangeListener"/>
8+
<listener class="software.aws.toolkits.jetbrains.services.codewhisperer.toolwindow.CodeWhispererCodeReferenceActionListener"
9+
topic="software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererUserActionListener"/>
10+
</applicationListeners>
11+
12+
<projectListeners>
13+
<listener class="software.aws.toolkits.jetbrains.services.codewhisperer.startup.CodeWhispererProjectStartupSettingsListener"
14+
topic="com.intellij.openapi.wm.ex.ToolWindowManagerListener"/>
15+
<listener class="software.aws.toolkits.jetbrains.services.codewhisperer.startup.CodeWhispererProjectStartupSettingsListener"
16+
topic="software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener"/>
17+
<listener class="software.aws.toolkits.jetbrains.services.codewhisperer.startup.CodeWhispererProjectStartupSettingsListener"
18+
topic="software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener"/>
19+
<listener class="software.aws.toolkits.jetbrains.services.codewhisperer.startup.CodeWhispererProjectStartupSettingsListener"
20+
topic="software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererCustomizationListener"/>
21+
</projectListeners>
22+
23+
<extensionPoints>
24+
<extensionPoint qualifiedName="aws.toolkit.codewhisperer.programmingLanguage" interface="software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage" dynamic="true"/>
25+
<extensionPoint qualifiedName="aws.toolkit.codewhisperer.classResolver" interface="software.aws.toolkits.jetbrains.services.codewhisperer.language.classresolver.CodeWhispererClassResolver" dynamic="true"/>
26+
<extensionPoint qualifiedName="aws.toolkit.codewhisperer.importAdder" interface="software.aws.toolkits.jetbrains.services.codewhisperer.importadder.CodeWhispererImportAdder" dynamic="true"/>
27+
</extensionPoints>
28+
29+
<extensions defaultExtensionNs="com.intellij">
30+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.settings.CodeWhispererSettings"/>
31+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager"/>
32+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererLanguageManager"/>
33+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererInvocationStatus"/>
34+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService"/>
35+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererRecommendationManager"/>
36+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererPopupManager"/>
37+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorManager"/>
38+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererTelemetryService"/>
39+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.inlay.CodeWhispererInlayManager"/>
40+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererLicenseInfoManager"/>
41+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererAutoTriggerService"/>
42+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererUserGroupSettings"/>
43+
<applicationService serviceInterface="software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator"
44+
serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.customization.DefaultCodeWhispererModelConfigurator"/>
45+
<applicationService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererFeatureConfigService"/>
46+
47+
<projectService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.toolwindow.CodeWhispererCodeReferenceManager"/>
48+
<projectService serviceInterface="software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor"
49+
serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptorImpl"
50+
testServiceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.credentials.MockCodeWhispererClientAdaptor"/>
51+
<projectService serviceInterface="software.aws.toolkits.jetbrains.services.codewhisperer.util.FileContextProvider"
52+
serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.util.DefaultCodeWhispererFileContextProvider"/>
53+
<projectService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.learn.LearnCodeWhispererManager"/>
54+
<projectService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererUserModificationTracker"/>
55+
<projectService serviceImplementation="software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanManager"/>
56+
<projectService serviceImplementation="software.aws.toolkits.jetbrains.core.explorer.cwqTab.CodewhispererQToolWindow"/>
57+
58+
<statusBarWidgetFactory id="aws.codewhisperer"
59+
implementation="software.aws.toolkits.jetbrains.services.codewhisperer.status.CodeWhispererStatusBarWidgetFactory"/>
60+
61+
<postStartupActivity implementation="software.aws.toolkits.jetbrains.services.codewhisperer.startup.CodeWhispererProjectStartupActivity"/>
62+
63+
<toolWindow id="aws.codewhisperer.codereference" anchor="bottom" doNotActivateOnStart="true" canCloseContents="true"
64+
factoryClass="software.aws.toolkits.jetbrains.services.codewhisperer.toolwindow.CodeWhispererCodeReferenceToolWindowFactory"
65+
icon="AllIcons.Actions.Preview"/>
66+
67+
<projectConfigurable
68+
parentId="aws"
69+
id="aws.codewhisperer"
70+
bundle="software.aws.toolkits.resources.MessagesBundle"
71+
key="aws.settings.codewhisperer.configurable.title"
72+
instance="software.aws.toolkits.jetbrains.services.codewhisperer.settings.CodeWhispererConfigurable"
73+
/>
74+
75+
<typedHandler implementation="software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererTypedHandler"/>
76+
<editorFactoryListener implementation="software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorListener"/>
77+
<editorActionHandler action="EditorEnter" implementationClass="software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEnterHandler"
78+
order="first, before editorEnter"/>
79+
<actionPromoter order="last" implementation="software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererActionPromoter"/>
80+
<fileEditorProvider implementation="software.aws.toolkits.jetbrains.services.codewhisperer.learn.LearnCodeWhispererEditorProvider"/>
81+
82+
</extensions>
83+
84+
<extensions defaultExtensionNs="aws.toolkit">
85+
<connection.pinned.feature implementation="software.aws.toolkits.jetbrains.core.credentials.pinning.CodeWhispererConnection"/>
86+
<sdk.clientCustomizer implementation="software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererEndpointCustomizer"/>
87+
</extensions>
88+
89+
<extensions defaultExtensionNs="aws.toolkit.codewhisperer">
90+
<!-- TODO: c/c++ extensions should live its own module instead of jetbrains-core -->
91+
<programmingLanguage implementation="software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererC"/>
92+
<programmingLanguage implementation="software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererCpp"/>
93+
<importAdder implementation="software.aws.toolkits.jetbrains.services.codewhisperer.importadder.CodeWhispererFallbackImportAdder"/>
94+
</extensions>
95+
96+
<actions resource-bundle="software.aws.toolkits.resources.AmazonQBundle">
97+
<group id="aws.toolkit.explorer.codewhisperer" popup="true" compact="true">
98+
<action id="codewhisperer.settings"
99+
class="software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererShowSettingsAction"/>
100+
<separator/>
101+
<action id="codewhisperer.whatIs"
102+
class="software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererWhatIsAction"/>
103+
</group>
104+
105+
<action class="software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererRecommendationAction"
106+
text="Show Code Suggestions">
107+
<keyboard-shortcut keymap="$default" first-keystroke="alt C"/>
108+
</action>
109+
<group id="aws.toolkit.codewhisperer.toolbar.security">
110+
<action
111+
id="codewhisperer.toolbar.security.scan"
112+
class="software.aws.toolkits.jetbrains.services.codewhisperer.codescan.actions.CodeWhispererCodeScanRunAction"/>
113+
<action
114+
id="codewhisperer.toolbar.security.stopscan"
115+
class="software.aws.toolkits.jetbrains.services.codewhisperer.codescan.actions.CodeWhispererStopCodeScanAction"/>
116+
</group>
117+
118+
<group id="aws.toolkit.jetbrains.core.services.codewhisperer.suggestions"
119+
class="software.aws.toolkits.jetbrains.services.codewhisperer.explorer.QStatusBarLoggedInActionGroup" />
7120
</actions>
8121
</idea-plugin>

plugins/amazonq/codewhisperer/jetbrains-ultimate/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,7 @@ intellijToolkit {
1313

1414
dependencies {
1515
compileOnly(project(":plugin-amazonq:codewhisperer:jetbrains-community"))
16+
compileOnly(project(":plugin-amazonq:shared:jetbrains-ultimate"))
17+
18+
compileOnly(project(":plugin-core:jetbrains-ultimate"))
1619
}

0 commit comments

Comments
 (0)