@@ -28,10 +28,13 @@ export function registerClientProviders(context: ExtensionContext, options: Prov
28
28
const jdtProvider = createJDTContentProvider ( options ) ;
29
29
context . subscriptions . push ( workspace . registerTextDocumentContentProvider ( 'jdt' , jdtProvider ) ) ;
30
30
31
+ const classProvider = createClassContentProvider ( options ) ;
32
+ context . subscriptions . push ( workspace . registerTextDocumentContentProvider ( 'class' , classProvider ) ) ;
33
+
31
34
overwriteWorkspaceSymbolProvider ( context ) ;
32
35
33
36
return {
34
- handles : [ hoverProvider , symbolProvider , jdtProvider ]
37
+ handles : [ hoverProvider , symbolProvider , jdtProvider , classProvider ]
35
38
} ;
36
39
}
37
40
@@ -81,6 +84,27 @@ function createJDTContentProvider(options: ProviderOptions): TextDocumentContent
81
84
} ;
82
85
}
83
86
87
+ function createClassContentProvider ( options : ProviderOptions ) : TextDocumentContentProvider {
88
+ return < TextDocumentContentProvider > {
89
+ onDidChange : options . contentProviderEvent ,
90
+ provideTextDocumentContent : async ( uri : Uri , token : CancellationToken ) : Promise < string > => {
91
+ const languageClient : LanguageClient | undefined = await getActiveLanguageClient ( ) ;
92
+
93
+ if ( ! languageClient ) {
94
+ return '' ;
95
+ }
96
+ const originalUri = uri . toString ( ) . replace ( / ^ c l a s s / , "file" ) ;
97
+ const decompiledContent : string = await commands . executeCommand ( Commands . EXECUTE_WORKSPACE_COMMAND , Commands . GET_DECOMPILED_SOURCE , originalUri ) ;
98
+ if ( ! decompiledContent ) {
99
+ console . log ( `Error while getting decompiled source : ${ originalUri } ` ) ;
100
+ return "Error while getting decompiled source." ;
101
+ } else {
102
+ return decompiledContent ;
103
+ }
104
+ }
105
+ } ;
106
+ }
107
+
84
108
function createDocumentSymbolProvider ( ) : DocumentSymbolProvider {
85
109
return < DocumentSymbolProvider > {
86
110
provideDocumentSymbols : async ( document : TextDocument , token : CancellationToken ) : Promise < SymbolInformation [ ] | DocumentSymbol [ ] > => {
@@ -109,7 +133,7 @@ function createDocumentSymbolProvider(): DocumentSymbolProvider {
109
133
110
134
const START_OF_DOCUMENT = new Range ( new Position ( 0 , 0 ) , new Position ( 0 , 0 ) ) ;
111
135
112
- function createWorkspaceSymbolProvider ( existingWorkspaceSymbolProvider : WorkspaceSymbolProvider ) : WorkspaceSymbolProvider {
136
+ function createWorkspaceSymbolProvider ( existingWorkspaceSymbolProvider : WorkspaceSymbolProvider ) : WorkspaceSymbolProvider {
113
137
return {
114
138
provideWorkspaceSymbols : async ( query : string , token : CancellationToken ) => {
115
139
// This is a workaround until vscode add support for qualified symbol search which is tracked by
@@ -159,9 +183,9 @@ function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: Workspac
159
183
}
160
184
161
185
function overwriteWorkspaceSymbolProvider ( context : ExtensionContext ) : void {
162
- const disposable = apiManager . getApiInstance ( ) . onDidServerModeChange ( async ( mode ) => {
186
+ const disposable = apiManager . getApiInstance ( ) . onDidServerModeChange ( async ( mode ) => {
163
187
if ( mode === ServerMode . standard ) {
164
- const feature = ( await getActiveLanguageClient ( ) ) . getFeature ( WorkspaceSymbolRequest . method ) ;
188
+ const feature = ( await getActiveLanguageClient ( ) ) . getFeature ( WorkspaceSymbolRequest . method ) ;
165
189
const providers = feature . getProviders ( ) ;
166
190
if ( providers && providers . length > 0 ) {
167
191
feature . dispose ( ) ;
@@ -186,7 +210,7 @@ const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\
186
210
* @returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI
187
211
*/
188
212
function fixJdtSchemeHoverLinks ( hover : Hover ) : Hover {
189
- const newContents : ( MarkedString | MarkdownString ) [ ] = [ ] ;
213
+ const newContents : ( MarkedString | MarkdownString ) [ ] = [ ] ;
190
214
for ( const content of hover . contents ) {
191
215
if ( content instanceof MarkdownString ) {
192
216
const newContent : string = ( < MarkdownString > content ) . value . replace ( REPLACE_JDT_LINKS_PATTERN , ( _substring , group1 , group2 ) => {
0 commit comments