@@ -28,10 +28,13 @@ export function registerClientProviders(context: ExtensionContext, options: Prov
2828 const jdtProvider = createJDTContentProvider ( options ) ;
2929 context . subscriptions . push ( workspace . registerTextDocumentContentProvider ( 'jdt' , jdtProvider ) ) ;
3030
31+ const classProvider = createClassContentProvider ( options ) ;
32+ context . subscriptions . push ( workspace . registerTextDocumentContentProvider ( 'class' , classProvider ) ) ;
33+
3134 overwriteWorkspaceSymbolProvider ( context ) ;
3235
3336 return {
34- handles : [ hoverProvider , symbolProvider , jdtProvider ]
37+ handles : [ hoverProvider , symbolProvider , jdtProvider , classProvider ]
3538 } ;
3639}
3740
@@ -81,6 +84,27 @@ function createJDTContentProvider(options: ProviderOptions): TextDocumentContent
8184 } ;
8285}
8386
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+
84108function createDocumentSymbolProvider ( ) : DocumentSymbolProvider {
85109 return < DocumentSymbolProvider > {
86110 provideDocumentSymbols : async ( document : TextDocument , token : CancellationToken ) : Promise < SymbolInformation [ ] | DocumentSymbol [ ] > => {
@@ -109,7 +133,7 @@ function createDocumentSymbolProvider(): DocumentSymbolProvider {
109133
110134const START_OF_DOCUMENT = new Range ( new Position ( 0 , 0 ) , new Position ( 0 , 0 ) ) ;
111135
112- function createWorkspaceSymbolProvider ( existingWorkspaceSymbolProvider : WorkspaceSymbolProvider ) : WorkspaceSymbolProvider {
136+ function createWorkspaceSymbolProvider ( existingWorkspaceSymbolProvider : WorkspaceSymbolProvider ) : WorkspaceSymbolProvider {
113137 return {
114138 provideWorkspaceSymbols : async ( query : string , token : CancellationToken ) => {
115139 // This is a workaround until vscode add support for qualified symbol search which is tracked by
@@ -159,9 +183,9 @@ function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: Workspac
159183}
160184
161185function overwriteWorkspaceSymbolProvider ( context : ExtensionContext ) : void {
162- const disposable = apiManager . getApiInstance ( ) . onDidServerModeChange ( async ( mode ) => {
186+ const disposable = apiManager . getApiInstance ( ) . onDidServerModeChange ( async ( mode ) => {
163187 if ( mode === ServerMode . standard ) {
164- const feature = ( await getActiveLanguageClient ( ) ) . getFeature ( WorkspaceSymbolRequest . method ) ;
188+ const feature = ( await getActiveLanguageClient ( ) ) . getFeature ( WorkspaceSymbolRequest . method ) ;
165189 const providers = feature . getProviders ( ) ;
166190 if ( providers && providers . length > 0 ) {
167191 feature . dispose ( ) ;
@@ -186,7 +210,7 @@ const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\
186210 * @returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI
187211 */
188212function fixJdtSchemeHoverLinks ( hover : Hover ) : Hover {
189- const newContents : ( MarkedString | MarkdownString ) [ ] = [ ] ;
213+ const newContents : ( MarkedString | MarkdownString ) [ ] = [ ] ;
190214 for ( const content of hover . contents ) {
191215 if ( content instanceof MarkdownString ) {
192216 const newContent : string = ( < MarkdownString > content ) . value . replace ( REPLACE_JDT_LINKS_PATTERN , ( _substring , group1 , group2 ) => {
0 commit comments