diff --git a/src/extension.ts b/src/extension.ts index 612d3e0af..422b92365 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -208,7 +208,7 @@ export async function activate(context: ExtensionContext): Promise { scheme: 'untitled', language: 'java' } ], synchronize: { - configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize'], + configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize', "files.associations"], }, initializationOptions: { bundles: collectJavaExtensions(extensions.all), @@ -1061,7 +1061,7 @@ async function getTriggerFiles(): Promise { function getJavaFilePathOfTextDocument(document: TextDocument): string | undefined { if (document) { const resource = document.uri; - if (resource.scheme === 'file' && resource.fsPath.endsWith('.java')) { + if (resource.scheme === 'file' && document.languageId === "java") { return path.normalize(resource.fsPath); } } diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 668322815..259944bea 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -174,7 +174,25 @@ function getWillRenameHandler(client: LanguageClient) { } function isJavaFile(uri: Uri): boolean { - return uri.fsPath && uri.fsPath.endsWith(".java"); + if (uri.fsPath && uri.fsPath.endsWith(".java")) { + return true; + } + let result = false; + const associations = workspace.getConfiguration().get("files.associations"); + if (associations !== null) { + Object.keys(associations).forEach(pattern => { + const langId = associations[pattern]; + if (langId === 'java' && pattern.startsWith('*.') && pattern.length > 2) { + const ext = pattern.substring(2); + if (!ext.includes('?') && !ext.includes('*')) { + if (uri.fsPath && uri.fsPath.endsWith(`.${ext}`)) { + result = true; + } + } + } + }); + } + return result; } async function isFile(uri: Uri): Promise { diff --git a/src/pasteAction.ts b/src/pasteAction.ts index 4a3f83adf..d50755601 100644 --- a/src/pasteAction.ts +++ b/src/pasteAction.ts @@ -39,8 +39,8 @@ export async function registerOrganizeImportsOnPasteCommand(): Promise { }); action.then((wasApplied) => { - const fileURI = editor.document.uri.toString(); - if (wasApplied && fileURI.endsWith(".java")) { + if (wasApplied && editor.document.languageId === "java") { + const fileURI = editor.document.uri.toString(); const hasText: boolean = documentText !== null && /\S/.test(documentText); if (hasText) { // Organize imports silently to avoid surprising the user diff --git a/src/utils.ts b/src/utils.ts index 8d342b48f..a8050ce6e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -226,6 +226,8 @@ export async function getJavaConfig(javaHome: string) { const editorConfig = workspace.getConfiguration('editor'); javaConfig.format.insertSpaces = editorConfig.get('insertSpaces'); javaConfig.format.tabSize = editorConfig.get('tabSize'); + const filesConfig = workspace.getConfiguration('files'); + javaConfig.associations = filesConfig.get('associations'); const isInsider: boolean = version.includes("insider"); const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; switch (androidSupport) {