Bug 348099 - Update target versions in creation wizards and constants
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java
index 319d623..45329d8 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * Copyright (c) 2010, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,12 @@
 	 */
 	public static final String VERSION_3_7 = ICoreConstants.TARGET37;
 	/**
+	 * Identifies bundles developed for Eclipse 3.8, value is <code>"3.8"</code>.
+	 * @since 3.8
+	 */
+	public static final String VERSION_3_8 = ICoreConstants.TARGET37;
+
+	/**
 	 * Constant for the PDE Plug-in project nature, value is <code>"org.eclipse.pde.PluginNature"</code>.
 	 */
 	public static final String PLUGIN_NATURE = PDE.PLUGIN_NATURE;
@@ -344,8 +350,8 @@
 	 * This affects the values generated for Equinox specific headers.
 	 * Has no effect when {@link #isEquinox()} is <code>false</code>.
 	 * When {@link #isEquinox()} is <code>true</code>, and a target version
-	 * is unspecified, the newest available target version of Eclipse is
-	 * used.
+	 * is unspecified or set to <code>null</code>, the newest available 
+	 * target version of Eclipse is used.
 	 * 
 	 * @param version one of the version constant values defined by this class or <code>null</code>
 	 * @see #setEquinox(boolean)
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
index 760ccdd..cc771a7 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@
 import java.util.Locale;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.pde.core.project.IBundleProjectDescription;
 import org.osgi.framework.Constants;
 
 public interface ICoreConstants {
@@ -103,16 +104,155 @@
 	/** Constant for the string <code>build.properties</code> */
 	public final static String BUILD_FILENAME_DESCRIPTOR = "build.properties"; //$NON-NLS-1$
 
+	/**
+	 * Target version of <code>3.0</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET30 = "3.0"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.1</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET31 = "3.1"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.2</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET32 = "3.2"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.3</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET33 = "3.3"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.4</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET34 = "3.4"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.5</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET35 = "3.5"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.6</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET36 = "3.6"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.7</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET37 = "3.7"; //$NON-NLS-1$
+
+	/**
+	 * Target version of <code>3.8</code>
+	 * <p>
+	 * PDE constant for the version of Eclipse a file/project/bundle is targeting.  The version of
+	 * a target platform is determined by what version of Equinox (org.eclipse.osgi) is included in the
+	 * target.  The version is only relevant if the user is building an Eclipse plug-in. This constant
+	 * can be used to process PDE files that have changed structure between releases.
+	 * </p><p>
+	 * Anytime a new version constant is added, {@link ICoreConstants#TARGET_VERSION_LATEST} must be updated to
+	 * the newest version.  {@link TargetPlatformHelper#getTargetVersionString()} must be updated to return the 
+	 * new version.
+	 * </p>
+	 */
 	public final static String TARGET38 = "3.8"; //$NON-NLS-1$
 
+	/**
+	 * The highest version of of Eclipse that PDE recognizes as having a special file structure. The value of 
+	 * this constant may change between releases.
+	 * <p>
+	 * Currently the latest version is {@link #TARGET38}.  If a new version constant is added to PDE, this
+	 * constant must be updated to the latest version.  Also, {@link TargetPlatformHelper#getTargetVersionString()} 
+	 * must be updated to return the new version.
+	 * </p><p>
+	 * If the set of target versions available when creating a project changes, NewLibraryPluginCreationPage,
+	 * NewProjectCreationPage, and {@link IBundleProjectDescription} must all be updated.
+	 * </p>
+	 */
+	public final static String TARGET_VERSION_LATEST = TARGET38;
+
 	public final static String EQUINOX = "Equinox"; //$NON-NLS-1$
 
 	// project preferences
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
index acacaa1..26c57e3 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -307,10 +307,16 @@
 		return ids;
 	}
 
+	/**
+	 * Returns the version of Eclipse the target platform is pointing to or {@link ICoreConstants#TARGET_VERSION_LATEST}
+	 * if the target platform does not contain <code>org.eclipse.osgi</code>.
+	 * 
+	 * @return the target version of Eclipse or the latest version PDE knows about.
+	 */
 	public static String getTargetVersionString() {
 		IPluginModelBase model = PluginRegistry.findModel(IPDEBuildConstants.BUNDLE_OSGI);
 		if (model == null)
-			return ICoreConstants.TARGET37;
+			return ICoreConstants.TARGET_VERSION_LATEST;
 
 		String version = model.getPluginBase().getVersion();
 		if (VersionUtil.validateVersion(version).getSeverity() == IStatus.OK) {
@@ -331,10 +337,20 @@
 				return ICoreConstants.TARGET35;
 			if (major == 3 && minor == 6)
 				return ICoreConstants.TARGET36;
+			if (major == 3 && minor == 7)
+				return ICoreConstants.TARGET37;
+			if (major == 3 && minor == 8)
+				return ICoreConstants.TARGET38;
 		}
-		return ICoreConstants.TARGET37;
+		return ICoreConstants.TARGET_VERSION_LATEST;
 	}
 
+	/**
+	 * Returns the version of Eclipse the target platform is pointing to or {@link ICoreConstants#TARGET_VERSION_LATEST}
+	 * if the target platform does not contain <code>org.eclipse.osgi</code>.
+	 * 
+	 * @return the target version of Eclipse or the latest version PDE knows about.
+	 */
 	public static double getTargetVersion() {
 		return Double.parseDouble(getTargetVersionString());
 	}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/ProjectModifyOperation.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/ProjectModifyOperation.java
index b0603f3..b9172b7 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/ProjectModifyOperation.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/ProjectModifyOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -689,7 +689,7 @@
 	 */
 	private String getTargetVersion(String targetVersion) {
 		if (targetVersion == null) {
-			return TargetPlatformHelper.getTargetVersionString();
+			return ICoreConstants.TARGET_VERSION_LATEST;
 		}
 		return targetVersion;
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
index e84d9fd..933cbff 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
@@ -2291,6 +2291,8 @@
 
 	public static String NewProjectCreationPage_target;
 
+	public static String NewProjectCreationPage_target_version_range_3_5;
+
 	public static String NewProjectCreationPage_ftarget;
 
 	public static String NewProjectCreationPage_ptarget;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
index 43b823e..6730648 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
@@ -802,6 +802,7 @@
 NewProjectCreationPage_pPureOSGi=&an OSGi framework:
 NewProjectCreationPage_standard=standard
 NewProjectCreationPage_target=Target Platform
+NewProjectCreationPage_target_version_range_3_5=3.5 or greater
 NewProjectCreationPage_ftarget=This fragment is targeted to run with:
 NewProjectCreationPage_ptarget=This plug-in is targeted to run with:
 NewProjectCreationPage_pDependsOnRuntime=&Eclipse version:
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java
index a42bc13..f4dd704 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,8 +20,7 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.pde.internal.core.ICoreConstants;
-import org.eclipse.pde.internal.core.TargetPlatformHelper;
+import org.eclipse.pde.internal.core.*;
 import org.eclipse.pde.internal.core.util.*;
 import org.eclipse.pde.internal.ui.IHelpContextIds;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
@@ -133,8 +132,14 @@
 		});
 
 		fTargetCombo = new Combo(group, SWT.READ_ONLY | SWT.SINGLE);
-		fTargetCombo.setItems(new String[] {ICoreConstants.TARGET37, ICoreConstants.TARGET36, ICoreConstants.TARGET35, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31, ICoreConstants.TARGET30});
-		fTargetCombo.setText(TargetPlatformHelper.getTargetVersionString());
+		fTargetCombo.setItems(new String[] {PDEUIMessages.NewProjectCreationPage_target_version_range_3_5, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31});
+		fTargetCombo.setText(PDEUIMessages.NewProjectCreationPage_target_version_range_3_5);
+		if (PDECore.getDefault().areModelsInitialized()) {
+			String text = TargetPlatformHelper.getTargetVersionString();
+			if (fTargetCombo.indexOf(text) >= 0) {
+				fTargetCombo.setText(text);
+			}
+		}
 
 		fOSGIButton = createButton(group, SWT.RADIO, 1, 30);
 		fOSGIButton.setText(PDEUIMessages.NewProjectCreationPage_pPureOSGi);
@@ -149,7 +154,8 @@
 		gd = new GridData();
 		gd.horizontalSpan = 2;
 		fJarredCheck.setLayoutData(gd);
-		fJarredCheck.setSelection(Double.parseDouble(fTargetCombo.getText()) >= 3.1);
+		// Defaults to checked for plug-ins 3.1 and greater
+		fJarredCheck.setSelection(true);
 		fUpdateRefsCheck = new Button(group, SWT.CHECK);
 		fUpdateRefsCheck.setText(PDEUIMessages.NewLibraryPluginCreationPage_UpdateReferences_button);
 		gd = new GridData();
@@ -283,14 +289,22 @@
 		fData.setSourceFolderName(null);
 		fData.setOutputFolderName(null);
 		fData.setLegacy(false);
-		fData.setTargetVersion(fTargetCombo.getText());
+
+		// No project structure changes since 3.5, mark as latest version (though using any constant 3.5 or greater is equivalent)
+		if (fTargetCombo.getText().equals(PDEUIMessages.NewProjectCreationPage_target_version_range_3_5)) {
+			fData.setTargetVersion(ICoreConstants.TARGET_VERSION_LATEST);
+		} else {
+			fData.setTargetVersion(fTargetCombo.getText());
+		}
+
+		// No longer support 3.0 non-osgi bundles in wizard
+		fData.setHasBundleStructure(true);
 
 		fData.setId(fIdText.getText().trim());
 		fData.setVersion(fVersionText.getText().trim());
 		fData.setName(fNameText.getText().trim());
 		fData.setProvider(fProviderText.getText().trim());
 		fData.setLibraryName(null);
-		fData.setHasBundleStructure(fOSGIButton.getSelection() || Double.parseDouble(fTargetCombo.getText()) >= 3.1);
 		fData.setOSGiFramework(fOSGIButton.getSelection() ? fOSGiCombo.getText() : null);
 		fData.setUnzipLibraries(fJarredCheck.isEnabled() && fJarredCheck.getSelection());
 		fData.setFindDependencies(fFindDependencies.getSelection());
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java
index 1820a5d..3ed8990 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -131,20 +131,19 @@
 		});
 
 		fEclipseCombo = new Combo(group, SWT.READ_ONLY | SWT.SINGLE);
-		fEclipseCombo.setItems(new String[] {ICoreConstants.TARGET37, ICoreConstants.TARGET36, ICoreConstants.TARGET35, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31});
-		boolean comboInitialized = false;
+		fEclipseCombo.setItems(new String[] {PDEUIMessages.NewProjectCreationPage_target_version_range_3_5, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31});
+
+		String text = null;
 		if (settings != null && !osgiProject) {
-			String text = settings.get(S_TARGET_NAME);
-			comboInitialized = (text != null && fEclipseCombo.indexOf(text) >= 0);
-			if (comboInitialized)
-				fEclipseCombo.setText(text);
+			text = settings.get(S_TARGET_NAME);
 		}
-		if (!comboInitialized) {
-			if (PDECore.getDefault().areModelsInitialized())
-				fEclipseCombo.setText(TargetPlatformHelper.getTargetVersionString());
-			else
-				fEclipseCombo.setText(ICoreConstants.TARGET37);
+		if (text == null && PDECore.getDefault().areModelsInitialized()) {
+			text = TargetPlatformHelper.getTargetVersionString();
 		}
+		if (text == null || fEclipseCombo.indexOf(text) < 0) {
+			text = PDEUIMessages.NewProjectCreationPage_target_version_range_3_5;
+		}
+		fEclipseCombo.setText(text);
 
 		fOSGIButton = createButton(group, SWT.RADIO, 1, 30);
 		fOSGIButton.setText(PDEUIMessages.NewProjectCreationPage_pPureOSGi);
@@ -152,16 +151,15 @@
 
 		fOSGiCombo = new Combo(group, SWT.READ_ONLY | SWT.SINGLE);
 		fOSGiCombo.setItems(new String[] {ICoreConstants.EQUINOX, PDEUIMessages.NewProjectCreationPage_standard});
-		comboInitialized = false;
-		if (settings != null && osgiProject) {
-			String text = settings.get(S_TARGET_NAME);
-			comboInitialized = (text != null && fOSGiCombo.indexOf(text) >= 0);
-			if (comboInitialized)
-				fOSGiCombo.setText(text);
-		}
-		if (!comboInitialized)
-			fOSGiCombo.setText(ICoreConstants.EQUINOX);
 
+		text = null;
+		if (settings != null && osgiProject) {
+			text = settings.get(S_TARGET_NAME);
+		}
+		if (text == null || fOSGiCombo.indexOf(text) < 0) {
+			text = ICoreConstants.EQUINOX;
+		}
+		fOSGiCombo.setText(text);
 	}
 
 	private void updateRuntimeDependency() {
@@ -206,8 +204,16 @@
 		fData.setSourceFolderName(fSourceText.getText().trim());
 		fData.setOutputFolderName(fOutputText.getText().trim());
 		fData.setLegacy(false);
-		fData.setTargetVersion(fEclipseCombo.getText());
-		fData.setHasBundleStructure(fOSGIButton.getSelection() || Double.parseDouble(fEclipseCombo.getText()) >= 3.1);
+
+		// No project structure changes since 3.5, mark as latest version (though using any constant 3.5 or greater is equivalent)
+		if (fEclipseCombo.getText().equals(PDEUIMessages.NewProjectCreationPage_target_version_range_3_5)) {
+			fData.setTargetVersion(ICoreConstants.TARGET_VERSION_LATEST);
+		} else {
+			fData.setTargetVersion(fEclipseCombo.getText());
+		}
+
+		// No longer support 3.0 non-osgi bundles in wizard
+		fData.setHasBundleStructure(true);
 		fData.setOSGiFramework(fOSGIButton.getSelection() ? fOSGiCombo.getText() : null);
 		fData.setWorkingSets(getSelectedWorkingSets());
 	}