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());