diff --git a/.changes/next-release/bugfix-7029c1d5-212c-48ac-9513-38f0beca8fa8.json b/.changes/next-release/bugfix-7029c1d5-212c-48ac-9513-38f0beca8fa8.json new file mode 100644 index 00000000000..f74a5086d47 --- /dev/null +++ b/.changes/next-release/bugfix-7029c1d5-212c-48ac-9513-38f0beca8fa8.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Fix unsupported files being shown in file picker when selecting images for adding image context in Windows" +} \ No newline at end of file diff --git a/plugins/amazonq/shared/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileChooserFilters.kt b/plugins/amazonq/shared/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileChooserFilters.kt new file mode 100644 index 00000000000..ea9e6a355ce --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src-242/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileChooserFilters.kt @@ -0,0 +1,29 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.amazonq.lsp.util + +import com.intellij.openapi.fileChooser.FileChooserDescriptor + +/** + * Applies file extension filtering to the given FileChooserDescriptor for IntelliJ Platform versions before 2024.3 (baseline < 243). + * Uses withFileFilter method which provides filtering functionality but doesn't visually filter + * files in the chooser dialog. + * + * @param descriptor The FileChooserDescriptor to apply filtering to + * @param filterName The display name for the filter (e.g., "Images") - unused in this version + * @param allowedExtensions Set of allowed file extensions (e.g., "jpg", "png") + * @return The modified FileChooserDescriptor + */ +fun applyExtensionFilter( + descriptor: FileChooserDescriptor, + @Suppress("UNUSED_PARAMETER") filterName: String, + allowedExtensions: Set, +): FileChooserDescriptor = descriptor.withFileFilter { virtualFile -> + if (virtualFile.isDirectory) { + true // Always allow directories for navigation + } else { + val extension = virtualFile.extension?.lowercase() + extension != null && allowedExtensions.contains(extension) + } +} diff --git a/plugins/amazonq/shared/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileChooserFilters.kt b/plugins/amazonq/shared/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileChooserFilters.kt new file mode 100644 index 00000000000..bf60e987ebc --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src-243+/software/aws/toolkits/jetbrains/services/amazonq/lsp/util/FileChooserFilters.kt @@ -0,0 +1,22 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.amazonq.lsp.util + +import com.intellij.openapi.fileChooser.FileChooserDescriptor + +/** + * Applies file extension filtering to the given FileChooserDescriptor for IntelliJ Platform versions 2024.3+ (baseline >= 243). + * Uses withExtensionFilter method which provides both filtering functionality and visual + * filtering in the chooser dialog. + * + * @param descriptor The FileChooserDescriptor to apply filtering to + * @param filterName The display name for the filter (e.g., "Images") + * @param allowedExtensions Set of allowed file extensions (e.g., "jpg", "png") + * @return The modified FileChooserDescriptor + */ +fun applyExtensionFilter( + descriptor: FileChooserDescriptor, + filterName: String, + allowedExtensions: Set, +): FileChooserDescriptor = descriptor.withExtensionFilter(filterName, *allowedExtensions.toTypedArray()) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt index 4b105142484..47d490cb93d 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt @@ -66,6 +66,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowS import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.LspEditorUtil import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.TelemetryParsingUtil +import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.applyExtensionFilter import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings @@ -311,15 +312,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC if (params.filters.isNotEmpty() && !params.canSelectFolders) { // Create a combined list of all allowed extensions val allowedExtensions = params.filters.values.flatten().toSet() - - withFileFilter { virtualFile -> - if (virtualFile.isDirectory) { - true // Always allow directories for navigation - } else { - val extension = virtualFile.extension?.lowercase() - extension != null && allowedExtensions.contains(extension) - } - } + applyExtensionFilter(this, "Images", allowedExtensions) } }