Skip to content

Commit 06a0348

Browse files
authored
Support Commandsv3 vendordep (#824)
- Download Commandsv3 vendordep - Use Commandsv3 vendordep on project creation of commandversion is set to 3 - Use Commandsv3 vendordep on import if previous project used Commandsv3 - Remove warning about importing Commandsv1 vendordep as OBE
1 parent bff96b3 commit 06a0348

7 files changed

Lines changed: 71 additions & 36 deletions

File tree

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ def downloadCommandsV2 = tasks.register('downloadCommandsV2', Download) {
7373
overwrite true
7474
}
7575

76+
def downloadCommandsV3 = tasks.register('downloadCommandsV3', Download) {
77+
src 'https://raw.githubusercontent.com/wpilibsuite/allwpilib/2027/commandsv3/CommandsV3.json'
78+
dest 'vscode-wpilib/resources/vendordeps/CommandsV3.json'
79+
overwrite true
80+
}
81+
7682
def downloadRomiVendordep = tasks.register('downloadRomiVendordep', Download) {
7783
src 'https://raw.githubusercontent.com/wpilibsuite/allwpilib/2027/romiVendordep/RomiVendordep.json'
7884
dest 'vscode-wpilib/resources/vendordeps/RomiVendordep.json'
@@ -88,6 +94,7 @@ def downloadXRPVendordep = tasks.register('downloadXRPVendordep', Download) {
8894
build.dependsOn extractCppDependencies
8995
build.dependsOn extractJavaDependencies
9096
build.dependsOn downloadCommandsV2
97+
build.dependsOn downloadCommandsV3
9198
build.dependsOn downloadRomiVendordep
9299
build.dependsOn downloadXRPVendordep
93100

vscode-wpilib/src/shared/examples.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ export class Examples {
3434
}
3535
const examples: IExampleJsonLayout[] = jsonc.parse(data) as IExampleJsonLayout[];
3636
for (const e of examples) {
37-
const extraVendordeps: string[] = e.extravendordeps !== undefined ? e.extravendordeps : [];
37+
const vendordeps: string[] = e.extravendordeps !== undefined ? e.extravendordeps : [];
38+
const commandVersion: string =
39+
e.commandversion !== undefined ? e.commandversion.toString() : '2';
40+
if (commandVersion === '3') {
41+
vendordeps.push('commandsv3');
42+
} else {
43+
vendordeps.push('commandsv2');
44+
}
3845
const provider: IExampleTemplateCreator = {
3946
getLanguage(): string {
4047
return java ? 'java' : 'cpp';
@@ -62,7 +69,7 @@ export class Examples {
6269
'frc.robot.Main',
6370
path.join('frc', 'robot'),
6471
false,
65-
extraVendordeps
72+
vendordeps
6673
))
6774
) {
6875
vscode.window.showErrorMessage(
@@ -79,7 +86,7 @@ export class Examples {
7986
path.join(gradleBasePath, e.gradlebase),
8087
folderInto.fsPath,
8188
false,
82-
extraVendordeps
89+
vendordeps
8390
))
8491
) {
8592
vscode.window.showErrorMessage(

vscode-wpilib/src/shared/generator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export async function generateCopyCpp(
1414
fromGradleFolder: string,
1515
toFolder: string,
1616
directGradleImport: boolean,
17-
extraVendordeps: string[]
17+
vendordeps: string[]
1818
): Promise<boolean> {
1919
try {
2020
// Check if destination folder is empty
@@ -46,7 +46,7 @@ export async function generateCopyCpp(
4646
await genUtils.setupDeployDirectory(toFolder, directGradleImport, false);
4747

4848
// Setup vendor dependencies
49-
await genUtils.setupVendorDeps(resourcesFolder, toFolder, extraVendordeps);
49+
await genUtils.setupVendorDeps(resourcesFolder, toFolder, vendordeps);
5050

5151
return true;
5252
} catch (e) {
@@ -65,7 +65,7 @@ export async function generateCopyCpp(
6565
* @param robotClassTo The main robot class.
6666
* @param copyRoot The base package in folder form to copy to.
6767
* @param directGradleImport Whether or not the file in fromTemplateFolder are in the Gradle project structure already.
68-
* @param extraVendordeps List of extra WPILib vendordeps to add to the project.
68+
* @param vendordeps List of extra WPILib vendordeps to add to the project.
6969
* @param packageReplaceString The base package to replace with frc.robot.
7070
* @returns True if the project successfully generated, false otherwise.
7171
*/
@@ -78,7 +78,7 @@ export async function generateCopyJava(
7878
robotClassTo: string,
7979
copyRoot: string,
8080
directGradleImport: boolean,
81-
extraVendordeps: string[],
81+
vendordeps: string[],
8282
packageReplaceString?: string
8383
): Promise<boolean> {
8484
try {
@@ -147,7 +147,7 @@ export async function generateCopyJava(
147147
await genUtils.setupDeployDirectory(toFolder, directGradleImport, true);
148148

149149
// Setup vendor dependencies
150-
await genUtils.setupVendorDeps(resourcesFolder, toFolder, extraVendordeps);
150+
await genUtils.setupVendorDeps(resourcesFolder, toFolder, vendordeps);
151151

152152
return true;
153153
} catch (e) {

vscode-wpilib/src/shared/projectGeneratorUtils.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ export const ReplacementPatterns = {
2222
* Common vendordep file names
2323
*/
2424
export const VendorDepFiles = {
25-
COMMANDS: 'CommandsV2.json',
25+
COMMANDSV2: 'CommandsV2.json',
2626
ROMI: 'RomiVendordep.json',
2727
XRP: 'XRPVendordep.json',
28+
COMMANDSV3: 'CommandsV3.json',
29+
COMMANDSV2_OLD: 'WPILibNewCommands.json',
2830
};
2931

3032
/**
@@ -144,21 +146,22 @@ directory.`;
144146
export async function setupVendorDeps(
145147
resourcesFolder: string,
146148
toFolder: string,
147-
extraVendordeps: string[] = []
149+
vendordeps: string[] = []
148150
): Promise<boolean> {
149151
try {
150152
const vendorDir = path.join(toFolder, 'vendordeps');
151153
await mkdir(vendorDir, { recursive: true });
152154

153-
// Add Commands V2
154-
await pathUtils.copyVendorDep(resourcesFolder, VendorDepFiles.COMMANDS, vendorDir);
155-
156155
// Add extra vendordeps
157-
for (const vendordep of extraVendordeps) {
156+
for (const vendordep of vendordeps) {
158157
if (vendordep === 'romi') {
159158
await pathUtils.copyVendorDep(resourcesFolder, VendorDepFiles.ROMI, vendorDir);
160159
} else if (vendordep === 'xrp') {
161160
await pathUtils.copyVendorDep(resourcesFolder, VendorDepFiles.XRP, vendorDir);
161+
} else if (vendordep === 'commandsv2') {
162+
await pathUtils.copyVendorDep(resourcesFolder, VendorDepFiles.COMMANDSV2, vendorDir);
163+
} else if (vendordep === 'commandsv3') {
164+
await pathUtils.copyVendorDep(resourcesFolder, VendorDepFiles.COMMANDSV3, vendorDir);
162165
}
163166
}
164167

vscode-wpilib/src/shared/templates.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ export class Templates {
3434
}
3535
const templates: ITemplateJsonLayout[] = jsonc.parse(data) as ITemplateJsonLayout[];
3636
for (const e of templates) {
37-
const extraVendordeps: string[] = e.extravendordeps !== undefined ? e.extravendordeps : [];
37+
const vendordeps: string[] = e.extravendordeps !== undefined ? e.extravendordeps : [];
38+
const commandVersion: string =
39+
e.commandversion !== undefined ? e.commandversion.toString() : '2';
40+
if (commandVersion === '3') {
41+
vendordeps.push('commandsv3');
42+
} else {
43+
vendordeps.push('commandsv2');
44+
}
3845
const provider: IExampleTemplateCreator = {
3946
getLanguage(): string {
4047
return java ? 'java' : 'cpp';
@@ -62,7 +69,7 @@ export class Templates {
6269
'frc.robot.Main',
6370
path.join('frc', 'robot'),
6471
false,
65-
extraVendordeps
72+
vendordeps
6673
))
6774
) {
6875
vscode.window.showErrorMessage(
@@ -79,7 +86,7 @@ export class Templates {
7986
path.join(gradleBasePath, e.gradlebase),
8087
folderInto.fsPath,
8188
false,
82-
extraVendordeps
89+
vendordeps
8390
))
8491
) {
8592
vscode.window.showErrorMessage(

vscode-wpilib/src/shared/vendorexamples.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,14 @@ export async function addVendorExamples(
7979
continue;
8080
}
8181

82-
const extraVendordeps: string[] =
83-
ex.extravendordeps !== undefined ? ex.extravendordeps : [];
82+
const vendordeps: string[] = ex.extravendordeps !== undefined ? ex.extravendordeps : [];
83+
const commandVersion: string =
84+
ex.commandversion !== undefined ? ex.commandversion.toString() : '2';
85+
if (commandVersion === '3') {
86+
vendordeps.push('commandsv3');
87+
} else {
88+
vendordeps.push('commandsv2');
89+
}
8490
const provider: IExampleTemplateCreator = {
8591
getLanguage(): string {
8692
return ex.language;
@@ -107,7 +113,7 @@ export async function addVendorExamples(
107113
'frc.robot.' + ex.mainclass,
108114
path.join('frc', 'robot'),
109115
false,
110-
extraVendordeps,
116+
vendordeps,
111117
ex.packagetoreplace
112118
))
113119
) {
@@ -125,7 +131,7 @@ export async function addVendorExamples(
125131
gradlePath,
126132
folderInto.fsPath,
127133
false,
128-
extraVendordeps
134+
vendordeps
129135
))
130136
) {
131137
vscode.window.showErrorMessage(

vscode-wpilib/src/webviews/gradle2025import.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
IGradle2025IPCSend,
1717
} from './pages/gradle2025importpagetypes';
1818
import { WebViewBase } from './webviewbase';
19+
import { VendorDepFiles } from '../shared/projectGeneratorUtils';
1920

2021
export class Gradle2025Import extends WebViewBase {
2122
public static async Create(resourceRoot: string): Promise<Gradle2025Import> {
@@ -260,21 +261,25 @@ export class Gradle2025Import extends WebViewBase {
260261

261262
const gradleBasePath = path.join(extensionContext.extensionPath, 'resources', 'gradle');
262263
const resourceRoot = path.join(extensionContext.extensionPath, 'resources');
263-
const commandsJsonPath = path.join(oldProjectPath, 'vendordeps', 'WPILibOldCommands.json');
264+
const commandsV2JsonPath = path.join(oldProjectPath, 'vendordeps', VendorDepFiles.COMMANDSV2);
265+
const commandsV2OldJsonPath = path.join(
266+
oldProjectPath,
267+
'vendordeps',
268+
VendorDepFiles.COMMANDSV2_OLD
269+
);
270+
const commandsV3JsonPath = path.join(oldProjectPath, 'vendordeps', VendorDepFiles.COMMANDSV3);
264271

265-
if (fs.existsSync(commandsJsonPath)) {
266-
await vscode.window.showErrorMessage(
267-
i18n(
268-
'message',
269-
'WPILib no longer supports the Old Command Framework. The Old Command Vendordep has not been imported. Please update to the New Command Framework'
270-
),
271-
{
272-
modal: true,
273-
}
274-
);
275-
}
272+
const vendordeps: string[] = data.romi ? ['romi'] : data.xrp ? ['xrp'] : [];
276273

277-
const extraVendordeps: string[] = data.romi ? ['romi'] : data.xrp ? ['xrp'] : [];
274+
if (fs.existsSync(commandsV2JsonPath)) {
275+
vendordeps.push('commandsv2');
276+
} else if (fs.existsSync(commandsV2OldJsonPath)) {
277+
vendordeps.push('commandsv2');
278+
} else if (fs.existsSync(commandsV3JsonPath)) {
279+
vendordeps.push('commandsv3');
280+
} else {
281+
vendordeps.push('commandsv2');
282+
}
278283

279284
let success = false;
280285
if (cpp) {
@@ -289,7 +294,7 @@ export class Gradle2025Import extends WebViewBase {
289294
gradlePath,
290295
toFolder,
291296
true,
292-
extraVendordeps
297+
vendordeps
293298
);
294299
} else {
295300
const gradlePath = path.join(
@@ -305,7 +310,7 @@ export class Gradle2025Import extends WebViewBase {
305310
javaRobotPackage,
306311
'',
307312
true,
308-
extraVendordeps
313+
vendordeps
309314
);
310315
}
311316

0 commit comments

Comments
 (0)