@@ -8,17 +8,18 @@ import { platform } from "os";
8
8
import { dirname , extname , isAbsolute , join , relative } from "path" ;
9
9
import {
10
10
CustomExecution , Event , EventEmitter , Pseudoterminal , Task , TaskDefinition ,
11
- TaskProvider , TaskRevealKind , TaskScope , TerminalDimensions , Uri , workspace , WorkspaceFolder ,
11
+ TaskProvider , TaskRevealKind , tasks , TerminalDimensions , Uri , workspace , WorkspaceFolder ,
12
12
} from "vscode" ;
13
- import { createJarFile } from "../exportJarFileCommand" ;
13
+ import { buildWorkspace } from "../build" ;
14
+ import { isStandardServerReady } from "../extension" ;
14
15
import { Jdtls } from "../java/jdtls" ;
15
16
import { INodeData } from "../java/nodeData" ;
16
17
import { Settings } from "../settings" ;
17
18
import { IUriData , Trie , TrieNode } from "../views/nodeCache/Trie" ;
18
19
import { IClasspathResult } from "./GenerateJarExecutor" ;
19
20
import { IClasspath , IStepMetadata } from "./IStepMetadata" ;
20
21
import { IMainClassInfo } from "./ResolveMainClassExecutor" ;
21
- import { ExportJarConstants , failMessage , getExtensionApi , toPosixPath , toWinPath } from "./utility" ;
22
+ import { ExportJarConstants , ExportJarStep , failMessage , getExtensionApi , stepMap , successMessage , toPosixPath , toWinPath } from "./utility" ;
22
23
23
24
interface IExportJarTaskDefinition extends TaskDefinition {
24
25
label ?: string ;
@@ -27,6 +28,28 @@ interface IExportJarTaskDefinition extends TaskDefinition {
27
28
elements ?: string [ ] ;
28
29
}
29
30
31
+ let isExportingJar : boolean = false ;
32
+
33
+ export async function executeExportJarTask ( node ?: INodeData ) : Promise < void > {
34
+ if ( ! isStandardServerReady ( ) || isExportingJar || await buildWorkspace ( ) === false ) {
35
+ return ;
36
+ }
37
+ isExportingJar = true ;
38
+ const stepMetadata : IStepMetadata = {
39
+ entry : node ,
40
+ steps : [ ] ,
41
+ } ;
42
+ try {
43
+ await stepMap . get ( ExportJarStep . ResolveJavaProject ) . execute ( stepMetadata ) ;
44
+ } catch ( err ) {
45
+ if ( err ) {
46
+ failMessage ( `${ err } ` ) ;
47
+ }
48
+ isExportingJar = false ;
49
+ return ;
50
+ }
51
+ tasks . executeTask ( ExportJarTaskProvider . getTask ( stepMetadata ) ) ;
52
+ }
30
53
export class ExportJarTaskProvider implements TaskProvider {
31
54
32
55
public static exportJarType : string = "java" ;
@@ -39,7 +62,7 @@ export class ExportJarTaskProvider implements TaskProvider {
39
62
elements : [ ] ,
40
63
mainClass : undefined ,
41
64
} ;
42
- const task : Task = new Task ( defaultDefinition , TaskScope . Workspace , "exportjar:default" , ExportJarTaskProvider . exportJarType ,
65
+ const task : Task = new Task ( defaultDefinition , stepMetadata . workspaceFolder , "exportjar:default" , ExportJarTaskProvider . exportJarType ,
43
66
new CustomExecution ( async ( resolvedDefinition : TaskDefinition ) : Promise < Pseudoterminal > => {
44
67
return new ExportJarTaskTerminal ( resolvedDefinition , stepMetadata ) ;
45
68
} ) ) ;
@@ -147,7 +170,7 @@ class ExportJarTaskTerminal implements Pseudoterminal {
147
170
this . stepMetadata . classpaths = await this . resolveClasspaths ( outputFolderMap ,
148
171
artifactMap , testOutputFolderMap , testArtifactMap ) ;
149
172
}
150
- await createJarFile ( this . stepMetadata ) ;
173
+ await this . createJarFile ( this . stepMetadata ) ;
151
174
} catch ( err ) {
152
175
if ( err ) {
153
176
failMessage ( `${ err } ` ) ;
@@ -161,6 +184,30 @@ class ExportJarTaskTerminal implements Pseudoterminal {
161
184
162
185
}
163
186
187
+ private async createJarFile ( stepMetadata : IStepMetadata ) : Promise < void > {
188
+ let step : ExportJarStep = ExportJarStep . ResolveJavaProject ;
189
+ while ( step !== ExportJarStep . Finish ) {
190
+ try {
191
+ step = await stepMap . get ( step ) . execute ( stepMetadata ) ;
192
+ if ( step === ExportJarStep . ResolveJavaProject ) {
193
+ // If the user comes back to the step resolving Java project, we need to finish
194
+ // the current task and start a new task related to the new Java project.
195
+ isExportingJar = false ;
196
+ executeExportJarTask ( stepMetadata . entry ) ;
197
+ return ;
198
+ }
199
+ } catch ( err ) {
200
+ if ( err ) {
201
+ failMessage ( `${ err } ` ) ;
202
+ }
203
+ isExportingJar = false ;
204
+ return ;
205
+ }
206
+ }
207
+ isExportingJar = false ;
208
+ successMessage ( stepMetadata . outputPath ) ;
209
+ }
210
+
164
211
private async setClasspathMap ( project : INodeData , classpathScope : string ,
165
212
outputFolderMap : Map < string , string [ ] > , artifactMap : Map < string , string [ ] > ) : Promise < void > {
166
213
const extensionApi : any = await getExtensionApi ( ) ;
0 commit comments