Bug 463265 - [Tools] Wizards add a require-bundle "javax.annotation"
which based on all our advices should be a package import 
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassWizard.java
index f38d1a1..b380326 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassWizard.java
@@ -36,8 +36,10 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osgi.service.resolver.VersionRange;
 import org.eclipse.pde.core.project.IBundleProjectDescription;
 import org.eclipse.pde.core.project.IBundleProjectService;
+import org.eclipse.pde.core.project.IPackageImportDescription;
 import org.eclipse.pde.core.project.IRequiredBundleDescription;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
@@ -142,7 +144,11 @@
 			final IBundleProjectDescription description = service.getDescription(project);
 			final Set<String> requiredBundles = getRequiredBundles();
 			final IRequiredBundleDescription[] arTmp = description.getRequiredBundles();
+			final IPackageImportDescription[] currentImportPacks = description.getPackageImports();
+			final Set<String> requiredImportPacks = getImportedPackages();
 			final List<IRequiredBundleDescription> descs = new ArrayList<IRequiredBundleDescription>();
+			final List<IPackageImportDescription> imDescs = new ArrayList<IPackageImportDescription>();
+
 			if (arTmp != null) {
 				descs.addAll(Arrays.asList(arTmp));
 			}
@@ -157,15 +163,63 @@
 				description.setRequiredBundles(descs.toArray(new IRequiredBundleDescription[0]));
 				description.apply(new NullProgressMonitor());
 			}
+
+			if (currentImportPacks != null) {
+				imDescs.addAll(Arrays.asList(currentImportPacks));
+			}
+			for (final IPackageImportDescription ds : imDescs) {
+				requiredImportPacks.remove(ds.getName());
+			}
+			if (!requiredImportPacks.isEmpty()) {
+				for (final String i : requiredImportPacks) {
+					// javax.annotation;version="1.0.0";resolution:=optional
+					final String[] parts = i.split(";"); //$NON-NLS-1$
+					final VersionRange r = findVersionRange(parts);
+					final boolean optional = isOptional(parts);
+
+					imDescs.add(service.newPackageImport(parts[0], r, optional));
+				}
+				description.setPackageImports(imDescs.toArray(new IPackageImportDescription[0]));
+				description.apply(new NullProgressMonitor());
+			}
 		} catch (final CoreException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 	}
 
+	private static VersionRange findVersionRange(String[] parts) {
+		for (final String p : parts) {
+			if (p.startsWith("version=")) { //$NON-NLS-1$
+				final String version = p.substring("version=".length() + 1, p.length() - 1); //$NON-NLS-1$
+				return new VersionRange(version.trim());
+			}
+		}
+		return null;
+	}
+
+	private static boolean isOptional(String[] parts) {
+		for (final String p : parts) {
+			if (p.startsWith("resolution:=")) { //$NON-NLS-1$
+				return p.contains("optional"); //$NON-NLS-1$
+			}
+		}
+		return false;
+	}
+
+	// public static void main(String[] args) {
+	// findVersionRange("javax.annotation;version=\"1.0.0\";resolution:=optional".split(";"));
+	// }
+
 	protected Set<String> getRequiredBundles() {
 		final Set<String> rv = new HashSet<String>();
-		rv.add("javax.inject"); //$NON-NLS-1$
+		//		rv.add("javax.inject"); //$NON-NLS-1$
+		return rv;
+	}
+
+	protected Set<String> getImportedPackages() {
+		final Set<String> rv = new HashSet<String>();
+		rv.add("javax.inject;version=\"1.0.0\""); //$NON-NLS-1$
 		return rv;
 	}
 
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewAddonClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewAddonClassWizard.java
index 3c333bd..5b841f0 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewAddonClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewAddonClassWizard.java
@@ -58,8 +58,14 @@
 	@Override
 	protected Set<String> getRequiredBundles() {
 		final Set<String> rv = super.getRequiredBundles();
-		rv.add("javax.annotation"); //$NON-NLS-1$
 		rv.add("org.eclipse.e4.core.services"); //$NON-NLS-1$
 		return rv;
 	}
+
+	@Override
+	protected Set<String> getImportedPackages() {
+		final Set<String> rv = super.getImportedPackages();
+		rv.add("javax.annotation;version=\"1.0.0\";resolution:=optional"); //$NON-NLS-1$
+		return super.getImportedPackages();
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
index e82ad11..1e6d15f 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/NewPartClassWizard.java
@@ -160,9 +160,7 @@
 	protected Set<String> getRequiredBundles() {
 		final Set<String> rv = super.getRequiredBundles();
 		final PartClass cl = (PartClass) getDomainClass();
-		if (cl.usePostConstruct || cl.usePredestroy) {
-			rv.add("javax.annotation"); //$NON-NLS-1$
-		} else if (cl.useFocus || cl.usePersist) {
+		if (cl.useFocus || cl.usePersist) {
 			rv.add("org.eclipse.e4.ui.di"); //$NON-NLS-1$
 		}
 
@@ -170,6 +168,16 @@
 	}
 
 	@Override
+	protected Set<String> getImportedPackages() {
+		final Set<String> rv = super.getImportedPackages();
+		final PartClass cl = (PartClass) getDomainClass();
+		if (cl.usePostConstruct || cl.usePredestroy) {
+			rv.add("javax.annotation;version=\"1.0.0\";resolution:=optional"); //$NON-NLS-1$
+		}
+		return rv;
+	}
+
+	@Override
 	protected String getContent() {
 		final PartTemplate template = new PartTemplate();
 		return template.generate(getDomainClass());