Skip to content

Commit 3b538e4

Browse files
author
MEHER SRUJANA MATCHA
committed
Add FileSystemProvider for jdt scheme (fixes #4038)
1 parent 18413af commit 3b538e4

1 file changed

Lines changed: 27 additions & 16 deletions

File tree

src/providerDispatcher.ts

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
import { CancellationToken, commands, DocumentSymbol, DocumentSymbolProvider, Event, ExtensionContext, Hover, HoverProvider, languages, MarkdownString, MarkedString, Position, Range, SymbolInformation, SymbolKind, TextDocument, TextDocumentContentProvider, Uri, workspace, WorkspaceSymbolProvider } from "vscode";
3+
import { CancellationToken, commands, DocumentSymbol, DocumentSymbolProvider, Event, ExtensionContext, Hover, HoverProvider, languages, MarkdownString, MarkedString, Position, Range, SymbolInformation, SymbolKind, TextDocument, TextDocumentContentProvider, Uri, workspace, WorkspaceSymbolProvider, Disposable, FileStat, FileSystemError, FileSystemProvider, FileType } from "vscode";
44
import { DocumentSymbol as clientDocumentSymbol, DocumentSymbolRequest, HoverRequest, SymbolInformation as clientSymbolInformation, WorkspaceSymbolRequest } from "vscode-languageclient";
55
import { LanguageClient } from "vscode-languageclient/node";
66
import { apiManager } from "./apiManager";
@@ -25,8 +25,8 @@ export function registerClientProviders(context: ExtensionContext, options: Prov
2525
const symbolProvider = createDocumentSymbolProvider();
2626
context.subscriptions.push(languages.registerDocumentSymbolProvider('java', symbolProvider));
2727

28-
const jdtProvider = createJDTContentProvider(options);
29-
context.subscriptions.push(workspace.registerTextDocumentContentProvider('jdt', jdtProvider));
28+
const jdtProvider = createJDTFileSystemProvider();
29+
context.subscriptions.push(workspace.registerFileSystemProvider('jdt', jdtProvider, { isCaseSensitive: true, isReadonly: true }));
3030

3131
const classProvider = createClassContentProvider(options);
3232
context.subscriptions.push(workspace.registerTextDocumentContentProvider('class', classProvider));
@@ -67,20 +67,31 @@ export class ClientHoverProvider implements HoverProvider {
6767
}
6868
}
6969

70-
function createJDTContentProvider(options: ProviderOptions): TextDocumentContentProvider {
71-
return <TextDocumentContentProvider>{
72-
onDidChange: options.contentProviderEvent,
73-
provideTextDocumentContent: async (uri: Uri, token: CancellationToken): Promise<string> => {
74-
const languageClient: LanguageClient | undefined = await getActiveLanguageClient();
75-
76-
if (!languageClient) {
77-
return '';
78-
}
70+
async function getJDTContent(uri: Uri): Promise<string> {
71+
const languageClient: LanguageClient | undefined = await getActiveLanguageClient();
72+
if (!languageClient) {
73+
return '';
74+
}
75+
return languageClient.sendRequest(ClassFileContentsRequest.type, { uri: uri.toString() }).then((v: string): string => v || '');
76+
}
7977

80-
return languageClient.sendRequest(ClassFileContentsRequest.type, { uri: uri.toString() }, token).then((v: string): string => {
81-
return v || '';
82-
});
83-
}
78+
function createJDTFileSystemProvider(): FileSystemProvider {
79+
return {
80+
onDidChangeFile: () => new Disposable(() => { }),
81+
watch: () => new Disposable(() => { }),
82+
stat: async (uri: Uri): Promise<FileStat> => {
83+
const content = await getJDTContent(uri);
84+
return { type: FileType.File, ctime: 0, mtime: 0, size: Buffer.byteLength(content, 'utf8') };
85+
},
86+
readDirectory: () => { throw FileSystemError.FileNotADirectory(); },
87+
createDirectory: () => { throw FileSystemError.NoPermissions(); },
88+
readFile: async (uri: Uri): Promise<Uint8Array> => {
89+
const content = await getJDTContent(uri);
90+
return Buffer.from(content, 'utf8');
91+
},
92+
writeFile: () => { throw FileSystemError.NoPermissions(); },
93+
delete: () => { throw FileSystemError.NoPermissions(); },
94+
rename: () => { throw FileSystemError.NoPermissions(); },
8495
};
8596
}
8697

0 commit comments

Comments
 (0)