Bug 562581 - Make "create module-info.java file" an option on the Module
Dependencies page, and off by default
Change-Id: Ibcaae2b981e3509f31b4aa1977292adae7920bf2
Signed-off-by: Kalyan Prasad Tatavarthi <kalyan_prasad@in.ibm.com>
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/179483
Tested-by: JDT Bot <jdt-bot@eclipse.org>
diff --git a/org.eclipse.jdt.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
index a77cb54..69581a9 100644
--- a/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.ui; singleton:=true
-Bundle-Version: 3.22.200.qualifier
+Bundle-Version: 3.23.0.qualifier
Bundle-Activator: org.eclipse.jdt.internal.ui.JavaPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/org.eclipse.jdt.ui/pom.xml b/org.eclipse.jdt.ui/pom.xml
index 4c8f62e..6801900 100644
--- a/org.eclipse.jdt.ui/pom.xml
+++ b/org.eclipse.jdt.ui/pom.xml
@@ -18,7 +18,7 @@
</parent>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.ui</artifactId>
- <version>3.22.200-SNAPSHOT</version>
+ <version>3.23.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<properties>
<code.ignoredWarnings>-warn:-deprecation,unavoidableGenericProblems</code.ignoredWarnings>
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
index 7f6db77..045b9ce 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
@@ -253,6 +253,8 @@
public static String NewJavaProjectWizardPageOne_Message_invalidDirectory;
public static String NewJavaProjectWizardPageOne_Message_projectAlreadyExists;
public static String NewJavaProjectWizardPageOne_UnknownDefaultJRE_name;
+ public static String NewJavaProjectWizardPageOne_Module_group;
+ public static String NewJavaProjectWizardPageOne_Create_ModuleInfoFile_name;
public static String NewJavaProjectWizardPageTwo_error_remove_message;
public static String NewJavaProjectWizardPageTwo_error_remove_title;
public static String NewJavaProjectWizardPageTwo_problem_backup;
@@ -340,7 +342,6 @@
public static String SourceContainerWorkbookPage_folders_edit_button;
public static String SourceContainerWorkbookPage_folders_toggle_button;
public static String SourceContainerWorkbookPage_folders_check;
- public static String SourceContainerWorkbookPage_create_moduleinfo_check;
public static String SourceContainerWorkbookPage_ExistingSourceFolderDialog_new_title;
public static String SourceContainerWorkbookPage_ChangeOutputLocationDialog_title;
public static String SourceContainerWorkbookPage_ChangeOutputLocationDialog_project_and_output_message;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
index 93fe9c1..73620c5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
@@ -340,8 +340,6 @@
SourceContainerWorkbookPage_folders_check=Allow output folders for sour&ce folders
-SourceContainerWorkbookPage_create_moduleinfo_check=Create &module-info.java file
-
SourceContainerWorkbookPage_ExistingSourceFolderDialog_new_title=Source Folder Selection
SourceContainerWorkbookPage_ChangeOutputLocationDialog_title=Source Folder Added
@@ -1136,6 +1134,8 @@
NewJavaProjectWizardPageOne_page_title=Create a Java Project
NewJavaProjectWizardPageOne_page_description=Create a Java project in the workspace or in an external location.
NewJavaProjectWizardPageOne_NoJREFound_link=The default JRE could be detected. To add a JRE manually go to the <a href="JRE">JREs preference page</a>.
+NewJavaProjectWizardPageOne_Module_group=Module
+NewJavaProjectWizardPageOne_Create_ModuleInfoFile_name=Create &module-info.java file
NewJavaProjectWizardPageTwo_error_title=New Java Project
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
index a395c81..f1f1574 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
@@ -1139,8 +1139,4 @@
public void setFocus() {
fSourceContainerPage.setFocus();
}
-
- public BuildPathBasePage getSourceContainerPage() {
- return fSourceContainerPage;
- }
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
index 891b415..11aa787 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
@@ -30,7 +30,6 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.PixelConverter;
@@ -51,7 +50,6 @@
import org.eclipse.jdt.internal.corext.buildpath.BuildpathDelta;
import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier;
import org.eclipse.jdt.internal.corext.buildpath.IBuildpathModifierListener;
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.preferences.ScrolledPageContent;
@@ -76,9 +74,6 @@
private HintTextGroup fHintTextGroup;
private DialogPackageExplorer fPackageExplorer;
private SelectionButtonDialogField fUseFolderOutputs;
- private SelectionButtonDialogField fCreateModuleInfoFileButton;
- private boolean fCreateModuleInfoFile;
- private String fCompilerCompliance;
private final StringDialogField fOutputLocationField;
private DialogPackageExplorerActionGroup fActionGroup;
@@ -111,11 +106,6 @@
fUseFolderOutputs.setLabelText(NewWizardMessages.SourceContainerWorkbookPage_folders_check);
- fCreateModuleInfoFileButton= new SelectionButtonDialogField(SWT.CHECK);
- fCreateModuleInfoFileButton.setSelection(true);
- fCreateModuleInfoFile= true;
- fCreateModuleInfoFileButton.setLabelText(NewWizardMessages.SourceContainerWorkbookPage_create_moduleinfo_check);
-
fPackageExplorer= new DialogPackageExplorer();
fHintTextGroup= new HintTextGroup();
}
@@ -159,22 +149,7 @@
fUseFolderOutputs.setSelection(useFolderOutputs);
}
- public void setCompilerCompliance(String compilerCompliance) {
- if (compilerCompliance != null) {
- fCompilerCompliance= compilerCompliance;
- try {
- setCreateModuleInfoFile(false);
- } catch (JavaModelException e) {
- //do nothing
- }
- }
- }
-
- public boolean isCreateModuleInfoFile() {
- return fCreateModuleInfoFile;
- }
-
- public void dispose() {
+ public void dispose() {
if (fActionGroup != null) {
fActionGroup.removeBuildpathModifierListener(this);
fActionGroup= null;
@@ -235,12 +210,7 @@
excomposite.setClient(fHintTextGroup.createControl(excomposite));
fUseFolderOutputs.doFillIntoGrid(body, 1);
- fCreateModuleInfoFileButton.doFillIntoGrid(body, 1);
-
- fCreateModuleInfoFileButton.setDialogFieldListener(field -> fCreateModuleInfoFile= fCreateModuleInfoFileButton.isSelected());
-
-
- fActionGroup= new DialogPackageExplorerActionGroup(fHintTextGroup, fContext, fPackageExplorer, this);
+ fActionGroup= new DialogPackageExplorerActionGroup(fHintTextGroup, fContext, fPackageExplorer, this);
fActionGroup.addBuildpathModifierListener(this);
@@ -414,46 +384,11 @@
try {
fOutputLocationField.setText(fJavaProject.getOutputLocation().makeRelative().toString());
- setCreateModuleInfoFile(true);
} catch (JavaModelException e) {
JavaPlugin.log(e);
}
}
- private void setCreateModuleInfoFile(boolean buildpathChanged) throws JavaModelException {
- boolean selection= fCreateModuleInfoFileButton.isSelected();
- boolean enabled= fCreateModuleInfoFileButton.isEnabled();
- boolean setEnabled= true;
- boolean setSelection= true;
- if (JavaModelUtil.is9OrHigher(fCompilerCompliance)) {
- IPackageFragmentRoot[] packageFragmentRoots= fJavaProject.getPackageFragmentRoots();
- List<IPackageFragmentRoot> packageFragmentRootsAsList= new ArrayList<>(Arrays.asList(packageFragmentRoots));
- for (IPackageFragmentRoot packageFragmentRoot : packageFragmentRoots) {
- IResource res= packageFragmentRoot.getCorrespondingResource();
- if (res == null || res.getType() != IResource.FOLDER || packageFragmentRoot.getKind() != IPackageFragmentRoot.K_SOURCE) {
- packageFragmentRootsAsList.remove(packageFragmentRoot);
- }
- }
-
- if (packageFragmentRootsAsList.isEmpty()) {
- setSelection= false;
- setEnabled= false;
- } else {
- if (buildpathChanged) {
- setSelection= true;
- setEnabled= true;
- } else {
- setSelection= !enabled ? true : selection;
- }
- }
- } else {
- setEnabled= false;
- setSelection= false;
- }
- fCreateModuleInfoFileButton.setEnabled(setEnabled);
- fCreateModuleInfoFileButton.setSelection(setSelection);
- }
-
public void commitDefaultOutputFolder() {
if (!fBuildPathsBlock.isOKStatus())
return;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java
index 788d768..31c14b1 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java
@@ -87,8 +87,7 @@
setDescription(NewWizardMessages.JavaCapabilityConfigurationPage_description);
}
- /* not to be used externally*/
- BuildPathsBlock getBuildPathsBlock() {
+ private BuildPathsBlock getBuildPathsBlock() {
if (fBuildPathsBlock == null) {
IStatusChangeListener listener= this::updateStatus;
fBuildPathsBlock= new BuildPathsBlock(new BusyIndicatorRunnableContext(), listener, 0, useNewSourcePage(), null);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java
index 79149a2..0f877c2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java
@@ -670,6 +670,7 @@
}
updateEnableState();
fDetectGroup.handlePossibleJVMChange();
+ fModuleGroup.handlePossibleJVMChange();
if (field == fJRECombo) {
if (fUseProjectJRE.isSelected()) {
storeSelectionValue(fJRECombo, LAST_SELECTED_JRE_SETTINGS_KEY);
@@ -800,6 +801,70 @@
}
}
+ private final class ModuleGroup implements IDialogFieldListener{
+
+ private final String LAST_SELECTED_CREATE_MODULEINFO_SETTINGS_KEY= JavaUI.ID_PLUGIN + ".last.selected.create.moduleinfo"; //$NON-NLS-1$
+ private final SelectionButtonDialogField fCreateModuleInfo;
+ private boolean savePreference;
+
+ public ModuleGroup() {
+ fCreateModuleInfo= new SelectionButtonDialogField(SWT.CHECK);
+ fCreateModuleInfo.setLabelText(NewWizardMessages.NewJavaProjectWizardPageOne_Create_ModuleInfoFile_name);
+ fCreateModuleInfo.setDialogFieldListener(this);
+ fCreateModuleInfo.setEnabled(false);
+ savePreference= false;
+ }
+
+ public String getCompliance() {
+ String compilerCompliance= fJREGroup.getSelectedCompilerCompliance();
+ if (compilerCompliance == null) {
+ compilerCompliance= JavaModelUtil.getCompilerCompliance((IVMInstall2) JavaRuntime.getDefaultVMInstall(), JavaCore.VERSION_1_4);
+ }
+ return compilerCompliance;
+ }
+
+ public Control createControl(Composite composite) {
+ Group moduleGroup= new Group(composite, SWT.NONE);
+ moduleGroup.setFont(composite.getFont());
+ moduleGroup.setText(NewWizardMessages.NewJavaProjectWizardPageOne_Module_group);
+ moduleGroup.setLayout(new GridLayout(1, false));
+
+ fCreateModuleInfo.doFillIntoGrid(moduleGroup, 1);
+ return moduleGroup;
+ }
+
+ public void handlePossibleJVMChange() {
+ boolean enable= false;
+ boolean oldValEnabled= fCreateModuleInfo.isEnabled();
+ String compliance= getCompliance();
+ if (compliance != null && JavaModelUtil.is9OrHigher(compliance)) {
+ enable= true;
+ }
+ fCreateModuleInfo.setEnabled(enable);
+ savePreference= false;
+ if (!enable) {
+ fCreateModuleInfo.setSelection(false);
+ } else if(oldValEnabled != enable) {
+ String setting=JavaPlugin.getDefault().getDialogSettings().get(LAST_SELECTED_CREATE_MODULEINFO_SETTINGS_KEY);
+ fCreateModuleInfo.setSelection((setting == null) ? true : Boolean.parseBoolean(setting));
+ }
+ savePreference= true;
+ }
+
+ public boolean getCreateModuleInfoFile() {
+ return fCreateModuleInfo.isSelected();
+ }
+
+
+ @Override
+ public void dialogFieldChanged(DialogField field) {
+ // TODO Auto-generated method stub
+ if (field == fCreateModuleInfo && savePreference) {
+ JavaPlugin.getDefault().getDialogSettings().put(LAST_SELECTED_CREATE_MODULEINFO_SETTINGS_KEY, fCreateModuleInfo.isSelected());
+ }
+ }
+ }
+
/**
* Show a warning when the project location contains files.
*/
@@ -1073,6 +1138,7 @@
private final DetectGroup fDetectGroup;
private final Validator fValidator;
private final WorkingSetGroup fWorkingSetGroup;
+ private final ModuleGroup fModuleGroup;
/**
* Creates a new {@link NewJavaProjectWizardPageOne}.
@@ -1089,6 +1155,7 @@
fLayoutGroup= new LayoutGroup();
fWorkingSetGroup= new WorkingSetGroup();
fDetectGroup= new DetectGroup();
+ fModuleGroup= new ModuleGroup();
// establish connections
fNameGroup.addObserver(fLocationGroup);
@@ -1153,6 +1220,9 @@
Control workingSetControl= createWorkingSetControl(composite);
workingSetControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ Control moduleControl= createModuleControl(composite);
+ moduleControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
Control infoControl= createInfoControl(composite);
infoControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -1230,6 +1300,17 @@
}
/**
+ * Creates the controls for the module section.
+ *
+ * @param composite the parent composite
+ * @return the created control
+ * @since 3.23
+ */
+ protected Control createModuleControl(Composite composite) {
+ return fModuleGroup.createControl(composite);
+ }
+
+ /**
* Gets a project name for the new project.
*
* @return the new project resource handle
@@ -1285,6 +1366,16 @@
}
/**
+ * Returns if the module-info creation dialog needs to be shown or not.
+ *
+ * @return 'create module-info.java file' has been checked or not.
+ * @since 3.23
+ */
+ public boolean getCreateModuleInfoFile() {
+ return fModuleGroup.getCreateModuleInfoFile();
+ }
+
+ /**
* Returns the default class path entries to be added on new projects. By default this is the JRE
* container as selected by the user.
*
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
index 4983e18..e16120e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
@@ -61,12 +61,8 @@
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.corext.util.Messages;
-import org.eclipse.jdt.launching.IVMInstall2;
-import org.eclipse.jdt.launching.JavaRuntime;
-
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.internal.ui.JavaPlugin;
@@ -76,9 +72,6 @@
import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
import org.eclipse.jdt.internal.ui.wizards.ClassPathDetector;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathsBlock;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.newsourcepage.NewSourceContainerWorkbookPage;
/**
* The second page of the New Java project wizard. It allows to configure the build path and output location.
@@ -147,13 +140,6 @@
if (isShownFirstTime) {
setFocus();
}
- if (visible) {
- String compilerCompliance= fFirstPage.getCompilerCompliance();
- if (compilerCompliance == null) {
- compilerCompliance= JavaModelUtil.getCompilerCompliance((IVMInstall2) JavaRuntime.getDefaultVMInstall(), JavaCore.VERSION_1_4);
- }
- setCompilerCompliance(compilerCompliance);
- }
}
@@ -566,42 +552,14 @@
super.dispose();
}
- private void setCompilerCompliance(String compilerCompliance) {
- BuildPathsBlock buildPathsBlock= getBuildPathsBlock();
- if (buildPathsBlock != null) {
- BuildPathBasePage sourceContainerPage= buildPathsBlock.getSourceContainerPage();
- if (sourceContainerPage instanceof NewSourceContainerWorkbookPage) {
- ((NewSourceContainerWorkbookPage) sourceContainerPage).setCompilerCompliance(compilerCompliance);
- }
- }
- }
-
private void createJavaProjectModuleInfoFile() {
- String compilerCompliance= fFirstPage.getCompilerCompliance();
- if (compilerCompliance == null) {
- compilerCompliance= JavaModelUtil.getCompilerCompliance((IVMInstall2) JavaRuntime.getDefaultVMInstall(), JavaCore.VERSION_1_4);
+ boolean createModuleInfoFile= fFirstPage.getCreateModuleInfoFile();
+ if (createModuleInfoFile) {
+ Display.getDefault().asyncExec(() -> {
+ CreateModuleInfoAction action= new CreateModuleInfoAction();
+ action.selectionChanged(null, new StructuredSelection(getJavaProject()));
+ action.run(null);
+ });
}
- if (compilerCompliance!= null && JavaModelUtil.is9OrHigher(compilerCompliance)) {
- boolean createModuleInfoFile= isCreateModuleInfoFile();
- if (createModuleInfoFile) {
- Display.getDefault().asyncExec(() -> {
- CreateModuleInfoAction action= new CreateModuleInfoAction();
- action.selectionChanged(null, new StructuredSelection(getJavaProject()));
- action.run(null);
- });
-
- }
- }
- }
-
- boolean isCreateModuleInfoFile() {
- BuildPathsBlock buildPathsBlock= getBuildPathsBlock();
- if (buildPathsBlock != null) {
- BuildPathBasePage sourceContainerPage= buildPathsBlock.getSourceContainerPage();
- if (sourceContainerPage instanceof NewSourceContainerWorkbookPage) {
- return ((NewSourceContainerWorkbookPage) sourceContainerPage).isCreateModuleInfoFile();
- }
- }
- return false;
}
}