Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "bugfix",
"description" : "Fix unsupported files being shown in file picker when selecting images for adding image context in Windows"
}
Original file line number Diff line number Diff line change
@@ -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<String>,
): FileChooserDescriptor = descriptor.withFileFilter { virtualFile ->
if (virtualFile.isDirectory) {
true // Always allow directories for navigation
} else {
val extension = virtualFile.extension?.lowercase()
extension != null && allowedExtensions.contains(extension)
}
}
Original file line number Diff line number Diff line change
@@ -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<String>,
): FileChooserDescriptor = descriptor.withExtensionFilter(filterName, *allowedExtensions.toTypedArray())
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
}

Expand Down
Loading