Skip to content

Commit 0eb9e44

Browse files
authored
IEP-1722 Integrate ESP New Project Wizard into Eclipse New Project dialog instead of opening a separate window (#1408)
* feat: improve wizards and tool checks * fix: removed code for testing, fixed swtbot tests
1 parent a048a14 commit 0eb9e44

14 files changed

Lines changed: 155 additions & 169 deletions

File tree

bundles/com.espressif.idf.ui/.classpath

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
3-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
3+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21">
44
<attributes>
55
<attribute name="maven.pomderived" value="true"/>
66
</attributes>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
eclipse.preferences.version=1
22
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
33
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
4-
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
4+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
55
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
6-
org.eclipse.jdt.core.compiler.compliance=17
6+
org.eclipse.jdt.core.compiler.compliance=21
77
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
88
org.eclipse.jdt.core.compiler.debug.localVariable=generate
99
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -12,4 +12,4 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
1212
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
1313
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
1414
org.eclipse.jdt.core.compiler.release=enabled
15-
org.eclipse.jdt.core.compiler.source=17
15+
org.eclipse.jdt.core.compiler.source=21

bundles/com.espressif.idf.ui/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Require-Bundle: org.eclipse.core.runtime,
3333
org.eclipse.ui.intro
3434
Automatic-Module-Name: com.espressif.idf.ui
3535
Bundle-ActivationPolicy: lazy
36-
Bundle-RequiredExecutionEnvironment: JavaSE-17
36+
Bundle-RequiredExecutionEnvironment: JavaSE-21
3737
Export-Package: com.espressif.idf.ui,
3838
com.espressif.idf.ui.dialogs,
3939
com.espressif.idf.ui.handlers,

bundles/com.espressif.idf.ui/plugin.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -562,10 +562,10 @@
562562
name="%category.name">
563563
</category>
564564
<wizard
565-
canFinishEarly="true"
565+
canFinishEarly="false"
566566
category="com.espressif.idf.ui.new.wizard.category"
567-
class="com.espressif.idf.ui.wizard.NewIdfProjectMainWizard"
568-
hasPages="false"
567+
class="com.espressif.idf.ui.wizard.NewIDFProjectWizard"
568+
hasPages="true"
569569
icon="icons/espressif_idf_project.png"
570570
id="com.espressif.idf.ui.new.project.wizard"
571571
name="%wizard.name"
@@ -575,10 +575,10 @@
575575
</description>
576576
</wizard>
577577
<wizard
578-
canFinishEarly="true"
578+
canFinishEarly="false"
579579
category="com.espressif.idf.ui.new.wizard.category"
580-
class="com.espressif.idf.ui.wizard.NewComponentMainWizard"
581-
hasPages="false"
580+
class="com.espressif.idf.ui.wizard.NewComponentWizard"
581+
hasPages="true"
582582
icon="icons/Espressif_IDF_Component.png"
583583
id="com.espressif.idf.ui.component.wizard"
584584
name="%wizard.name.1"

bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/handlers/NewProjectHandlerUtil.java

Lines changed: 53 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,63 +22,82 @@
2222
import com.espressif.idf.ui.UIPlugin;
2323
import com.espressif.idf.ui.tools.ManageEspIdfVersionsHandler;
2424

25+
/**
26+
* Utility class for ESP-IDF project creation checks.
27+
*/
2528
public class NewProjectHandlerUtil
2629
{
2730

28-
public static boolean installToolsCheck()
31+
private NewProjectHandlerUtil()
2932
{
30-
// IDF_PATH
31-
String idfPath = IDFUtil.getIDFPath();
32-
33-
// PATH
34-
IEnvironmentVariable pathEnv = new IDFEnvironmentVariables().getEnv(IDFEnvironmentVariables.PATH);
35-
String path = Optional.ofNullable(pathEnv).map(o -> o.getValue()).orElse(null);
33+
}
3634

37-
Preferences scopedPreferenceStore = InstanceScope.INSTANCE.getNode(UIPlugin.PLUGIN_ID);
38-
boolean isToolsInstalled = scopedPreferenceStore.getBoolean(EimConstants.INSTALL_TOOLS_FLAG, false);
35+
/**
36+
* Performs the tools check and shows a popup dialog if validation fails. Maintained for backward compatibility with
37+
* existing handlers. * @return true if environment is valid, false otherwise.
38+
*/
39+
public static boolean installToolsCheck()
40+
{
41+
String errorMessage = getErrorMessage();
42+
if (!StringUtil.isEmpty(errorMessage))
43+
{
44+
showMessage(errorMessage);
45+
return false;
46+
}
47+
return true;
48+
}
3949

50+
/**
51+
* Validates the IDF environment and returns a localized error message describing the first failure found. * @return
52+
* String error message or null if validation passes.
53+
*/
54+
public static String getErrorMessage()
55+
{
56+
String idfPath = IDFUtil.getIDFPath();
4057
if (StringUtil.isEmpty(idfPath))
4158
{
42-
showMessage(Messages.NewProjectHandler_CouldntFindIdfPath);
43-
return false;
59+
return Messages.NewProjectHandler_CouldntFindIdfPath;
4460
}
61+
62+
IEnvironmentVariable pathEnv = new IDFEnvironmentVariables().getEnv(IDFEnvironmentVariables.PATH);
63+
String path = Optional.ofNullable(pathEnv).map(o -> o.getValue()).orElse(null);
4564
if (StringUtil.isEmpty(path))
4665
{
47-
showMessage(Messages.NewProjectHandler_CouldntFindPath);
48-
return false;
66+
return Messages.NewProjectHandler_CouldntFindPath;
4967
}
68+
69+
Preferences scopedPreferenceStore = InstanceScope.INSTANCE.getNode(UIPlugin.PLUGIN_ID);
70+
boolean isToolsInstalled = scopedPreferenceStore.getBoolean(EimConstants.INSTALL_TOOLS_FLAG, false);
5071
if (!isToolsInstalled)
5172
{
52-
showMessage(Messages.NewProjectHandler_CouldntFindTools);
53-
return false;
73+
return Messages.NewProjectHandler_CouldntFindTools;
5474
}
55-
return true;
75+
76+
return StringUtil.EMPTY;
5677
}
5778

79+
/**
80+
* Internal helper to show the original question dialog and trigger the version manager if the user selects 'Yes'.
81+
*/
5882
private static void showMessage(String missingMsg)
5983
{
60-
Display.getDefault().asyncExec(new Runnable()
84+
Display.getDefault().asyncExec(() ->
6185
{
62-
@Override
63-
public void run()
86+
boolean isYes = MessageDialog.openQuestion(Display.getDefault().getActiveShell(),
87+
Messages.NewProjectHandler_PathErrorTitle, missingMsg
88+
+ Messages.NewProjectHandler_NavigateToHelpMenu + Messages.NewProjectHandler_MandatoryMsg);
89+
if (isYes)
6490
{
65-
boolean isYes = MessageDialog.openQuestion(Display.getDefault().getActiveShell(),
66-
Messages.NewProjectHandler_PathErrorTitle,
67-
missingMsg + Messages.NewProjectHandler_NavigateToHelpMenu
68-
+ Messages.NewProjectHandler_MandatoryMsg);
69-
if (isYes)
91+
ManageEspIdfVersionsHandler manageEspIdfVersionsHandler = new ManageEspIdfVersionsHandler();
92+
try
93+
{
94+
manageEspIdfVersionsHandler.execute(null);
95+
}
96+
catch (ExecutionException e)
7097
{
71-
ManageEspIdfVersionsHandler manageEspIdfVersionsHandler = new ManageEspIdfVersionsHandler();
72-
try
73-
{
74-
manageEspIdfVersionsHandler.execute(null);
75-
}
76-
catch (ExecutionException e)
77-
{
78-
Logger.log(e);
79-
}
98+
Logger.log(e);
8099
}
81100
}
82101
});
83102
}
84-
}
103+
}

bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/Messages.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public class Messages extends NLS
4444
public static String NewComponentWizardPage_ProjectNameLbl;
4545
public static String IdfReconfigureJobName;
4646

47+
public static String ToolsMissingWizardPage_MainText;
48+
public static String ToolsMissingWizardPage_PagaName;
49+
public static String ToolsMissingWizardPage_Title;
50+
4751
static
4852
{
4953
// initialize resource bundle

bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/NewComponentMainWizard.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/NewComponentWizard.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
1414

1515
import com.espressif.idf.core.logging.Logger;
16+
import com.espressif.idf.ui.handlers.NewProjectHandlerUtil;
1617

1718
@SuppressWarnings("restriction")
1819
public class NewComponentWizard extends Wizard implements INewWizard
@@ -33,13 +34,24 @@ public NewComponentWizard()
3334
@Override
3435
public void addPages()
3536
{
37+
var errorMsg = NewProjectHandlerUtil.getErrorMessage();
38+
if (!errorMsg.isEmpty())
39+
{
40+
addPage(new ToolsMissingWizardPage(errorMsg));
41+
return;
42+
}
43+
3644
mainPage = new NewComponentWizardPage(selection);
3745
addPage(mainPage);
3846
}
3947

4048
@Override
4149
public boolean performFinish()
4250
{
51+
if (mainPage == null)
52+
{
53+
return false;
54+
}
4355
String message = mainPage.createIdfComponent();
4456
try
4557
{

bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/NewComponentWizardPage.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/*******************************************************************************
2+
* Copyright 2026 Espressif Systems (Shanghai) PTE LTD. All rights reserved.
3+
* Use is subject to license terms.
4+
*******************************************************************************/
15
package com.espressif.idf.ui.wizard;
26

37
import java.nio.file.Files;

bundles/com.espressif.idf.ui/src/com/espressif/idf/ui/wizard/NewIDFProjectWizard.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.io.File;
88

99
import org.eclipse.cdt.debug.internal.core.InternalDebugCoreMessages;
10+
import org.eclipse.core.commands.ExecutionException;
1011
import org.eclipse.core.resources.IProject;
1112
import org.eclipse.core.resources.IResource;
1213
import org.eclipse.core.resources.ResourcesPlugin;
@@ -35,7 +36,6 @@
3536
import org.eclipse.tools.templates.ui.TemplateWizard;
3637
import org.eclipse.ui.IViewPart;
3738
import org.eclipse.ui.IWorkbenchPage;
38-
import org.eclipse.ui.console.MessageConsole;
3939
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
4040

4141
import com.espressif.idf.core.IDFConstants;
@@ -54,6 +54,7 @@
5454
import com.espressif.idf.ui.templates.ITemplateNode;
5555
import com.espressif.idf.ui.templates.NewProjectCreationWizardPage;
5656
import com.espressif.idf.ui.templates.TemplatesManager;
57+
import com.espressif.idf.ui.tools.ManageEspIdfVersionsHandler;
5758

5859
/**
5960
* Creates a wizard for creating a new IDF project resource in the workspace.
@@ -67,8 +68,6 @@ public class NewIDFProjectWizard extends TemplateWizard
6768
public static final String TARGET_SWITCH_JOB = "TARGET SWITCH JOB"; //$NON-NLS-1$
6869
private NewProjectCreationWizardPage projectCreationWizardPage;
6970
private IProject project;
70-
private MessageConsole console;
71-
7271
public NewIDFProjectWizard()
7372
{
7473
IDialogSettings workbenchSettings = IDEWorkbenchPlugin.getDefault().getDialogSettings();
@@ -83,8 +82,10 @@ public NewIDFProjectWizard()
8382
@Override
8483
public void addPages()
8584
{
86-
if (!NewProjectHandlerUtil.installToolsCheck())
85+
var errorMsg = NewProjectHandlerUtil.getErrorMessage();
86+
if (!errorMsg.isEmpty())
8787
{
88+
addPage(new ToolsMissingWizardPage(errorMsg));
8889
return;
8990
}
9091
super.addPages();
@@ -107,6 +108,19 @@ public void addPages()
107108
@Override
108109
public boolean performFinish()
109110
{
111+
if (getContainer().getCurrentPage() instanceof ToolsMissingWizardPage)
112+
{
113+
try
114+
{
115+
new ManageEspIdfVersionsHandler().execute(null);
116+
}
117+
catch (ExecutionException e)
118+
{
119+
Logger.log(e);
120+
}
121+
return true;
122+
}
123+
110124
boolean performFinish = super.performFinish();
111125
if (performFinish)
112126
{

0 commit comments

Comments
 (0)