*** empty log message ***
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/PDEResources.properties b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/PDEResources.properties
index 8269caa..146877c 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/PDEResources.properties
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/PDEResources.properties
@@ -9,6 +9,11 @@
MultiPageEditor.wrongEditor = Wrong editor for {0}
+
+CodeGenerator.missing.title = Missing Types
+CodeGenerator.missing.type = The following Java type cannot be resolved: {0}. Check the Java build path for missing references.
+CodeGenerator.missing.types = The following Java types cannot be resolved: {0}, {1}. Check the Java build path for missing references.
+
###### Editors #######################################
SourcePage.title = Source
SourcePage.errorTitle = Source Errors
@@ -480,6 +485,9 @@
NewExtensionWizard.PointSelectionPage.desc = Select an extension point from those available in the list.
NewExtensionWizard.PointSelectionPage.pointId = Point ID
NewExtensionWizard.PointSelectionPage.pointName = Point Name
+NewExtensionWizard.PointSelectionPage.missingTitle = Extensions
+NewExtensionWizard.PointSelectionPage.missingImport = The extension point "{0}" is defined in plug-in "{1}" that is currently not on your dependency list.\
+ Add it before attempting to reference Java types defined by this extension point.
NewExtensionPointWizard.title = New Extension Point
NewExtensionPointWizard.desc = Specify id and name of the new extension point.
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/codegen/AttributeClassCodeGenerator.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/codegen/AttributeClassCodeGenerator.java
index 0c3a62e..3cdf57c 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/codegen/AttributeClassCodeGenerator.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/codegen/AttributeClassCodeGenerator.java
@@ -12,8 +12,12 @@
import org.eclipse.jdt.core.*;
import java.io.PrintWriter;
import org.eclipse.pde.internal.PDEPlugin;
+import org.eclipse.jface.dialogs.MessageDialog;
public class AttributeClassCodeGenerator extends JavaCodeGenerator {
+ private static final String KEY_MISSING_TITLE = "CodeGenerator.missing.title";
+ private static final String KEY_MISSING_TYPE = "CodeGenerator.missing.type";
+ private static final String KEY_MISSING_TYPES = "CodeGenerator.missing.types";
private ISchemaAttribute attInfo;
private IJavaProject javaProject;
private IType expectedType;
@@ -136,9 +140,17 @@
}
try {
expectedType = findTypeForName(expectedTypeName);
- if (expectedType==null) return;
- if (expectedType.isClass() && expectedInterfaceName!=null)
+ if (expectedType!=null && expectedType.isClass() && expectedInterfaceName!=null)
expectedInterface = findTypeForName(expectedInterfaceName);
+ boolean missingType = expectedTypeName!=null && expectedType==null;
+ boolean missingInterface = expectedInterfaceName!=null
+ && expectedInterface==null;
+ if (missingType || missingInterface) {
+ String mtype = missingType?expectedTypeName:null;
+ String minter = missingInterface?expectedInterfaceName:null;
+ warnAboutMissingTypes(mtype, minter);
+ }
+ if (expectedType==null) return;
requiredMethods = new Vector();
if (expectedInterface!=null)
addRequiredMethodsFor(expectedInterface);
@@ -147,6 +159,25 @@
PDEPlugin.logException(e);
}
}
+
+private void warnAboutMissingTypes(String typeName, String interfaceName) {
+ String message;
+ if (typeName==null) {
+ message = PDEPlugin.getFormattedMessage(KEY_MISSING_TYPE, interfaceName);
+ }
+ else if (interfaceName==null) {
+ message = PDEPlugin.getFormattedMessage(KEY_MISSING_TYPE, typeName);
+ }
+ else {
+ message = PDEPlugin.getFormattedMessage(KEY_MISSING_TYPES, new String [] {
+ typeName, interfaceName });
+ }
+ MessageDialog.openWarning(PDEPlugin.getActiveWorkbenchShell(),
+ PDEPlugin.getResourceString(KEY_MISSING_TITLE),
+ message);
+}
+
+
private IType findTypeForName(String typeName) throws JavaModelException {
IType type = null;
String fileName = typeName.replace('.', '/') + ".java";
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/ExtensionElementPropertySource.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/ExtensionElementPropertySource.java
index 8f83987..b86318c 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/ExtensionElementPropertySource.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/ExtensionElementPropertySource.java
@@ -218,7 +218,8 @@
// Make sure we still return special values
if (isEditable() && attInfo != null) {
if (attInfo.getKind() == ISchemaAttribute.JAVA) {
- return new JavaAttributeValue(project, attInfo, "");
+ IPluginModelBase model = att.getModel();
+ return new JavaAttributeValue(project, model, attInfo, "");
} else
if (attInfo.getKind() == ISchemaAttribute.RESOURCE) {
return new ResourceAttributeValue(project, "");
@@ -232,7 +233,8 @@
Object value = att.getValue();
if (attInfo != null) {
if (attInfo.getKind() == ISchemaAttribute.JAVA) {
- return new JavaAttributeValue(project, attInfo, value.toString());
+ IPluginModelBase model = att.getModel();
+ return new JavaAttributeValue(project, model, attInfo, value.toString());
} else
if (attInfo.getKind() == ISchemaAttribute.RESOURCE) {
return new ResourceAttributeValue(project, value.toString());
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeCellEditor.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeCellEditor.java
index 9b9b232..7fd2ce2 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeCellEditor.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeCellEditor.java
@@ -11,6 +11,7 @@
import org.eclipse.swt.*;
import org.eclipse.pde.internal.*;
import org.eclipse.core.resources.*;
+import org.eclipse.pde.internal.base.model.plugin.*;
public class JavaAttributeCellEditor extends DialogCellEditor {
private Label label;
@@ -28,9 +29,10 @@
protected Object openDialogBox(Control cellEditorWindow) {
JavaAttributeValue value = (JavaAttributeValue)getValue();
IProject project = value.getProject();
+ IPluginModelBase model = value.getModel();
ISchemaAttribute attInfo = value.getAttributeInfo();
- JavaAttributeWizard wizard = new JavaAttributeWizard(project, attInfo, value.getClassName());
+ JavaAttributeWizard wizard = new JavaAttributeWizard(project, model, attInfo, value.getClassName());
WizardDialog dialog =
new WizardDialog(PDEPlugin.getActiveWorkbenchShell(), wizard);
dialog.create();
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeValue.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeValue.java
index eccdf34..69a7953 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeValue.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeValue.java
@@ -6,17 +6,23 @@
import org.eclipse.pde.internal.base.schema.*;
import org.eclipse.core.resources.*;
+import org.eclipse.pde.internal.base.model.plugin.*;
public class JavaAttributeValue extends ResourceAttributeValue {
private ISchemaAttribute attInfo;
+ private IPluginModelBase model;
-public JavaAttributeValue(IProject project, ISchemaAttribute attInfo, String className) {
+public JavaAttributeValue(IProject project, IPluginModelBase model, ISchemaAttribute attInfo, String className) {
super(project, className);
this.attInfo = attInfo;
+ this.model = model;
}
public ISchemaAttribute getAttributeInfo() {
return attInfo;
}
+public IPluginModelBase getModel() {
+ return model;
+}
public String getClassName() {
return getStringValue();
}
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizard.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizard.java
index 4128fc0..bb0b473 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizard.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizard.java
@@ -19,27 +19,31 @@
import org.eclipse.jface.wizard.*;
import org.eclipse.pde.internal.*;
import java.util.Hashtable;
+import org.eclipse.pde.internal.base.model.plugin.*;
public class JavaAttributeWizard extends Wizard {
private String className;
private JavaAttributeWizardPage mainPage;
private IProject project;
private ISchemaAttribute attInfo;
+ private IPluginModelBase model;
-public JavaAttributeWizard(IProject project, ISchemaAttribute attInfo, String className) {
+public JavaAttributeWizard(IProject project, IPluginModelBase model, ISchemaAttribute attInfo, String className) {
this.className = className;
+ this.model = model;
this.project = project;
this.attInfo = attInfo;
setDefaultPageImageDescriptor(PDEPluginImages.DESC_NEWPPRJ_WIZ);
setDialogSettings(PDEPlugin.getDefault().getDialogSettings());
setNeedsProgressMonitor(true);
}
+
public void addPages() {
- mainPage = new JavaAttributeWizardPage(project, attInfo, className);
+ mainPage = new JavaAttributeWizardPage(project, model, attInfo, className);
addPage(mainPage);
}
public Object getValue() {
- return new JavaAttributeValue(project, attInfo, className);
+ return new JavaAttributeValue(project, model, attInfo, className);
}
public boolean performFinish() {
boolean result = mainPage.finish();
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizardPage.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizardPage.java
index 04f9b58..36a07e0 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizardPage.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/editor/manifest/JavaAttributeWizardPage.java
@@ -26,6 +26,8 @@
import org.eclipse.pde.internal.*;
import org.eclipse.pde.internal.base.schema.*;
import org.eclipse.jface.dialogs.*;
+import org.eclipse.pde.internal.base.model.plugin.*;
+import org.eclipse.pde.internal.base.model.build.*;
public class JavaAttributeWizardPage extends WizardPage {
public static final String PAGE_TITLE = "JavaAttributeWizard.title";
@@ -67,10 +69,12 @@
private Composite searchPage;
private Composite generatePage;
private ModifyListener modifyListener;
+ private IPluginModelBase model;
-public JavaAttributeWizardPage(IProject project, ISchemaAttribute attInfo, String className) {
+public JavaAttributeWizardPage(IProject project, IPluginModelBase model, ISchemaAttribute attInfo, String className) {
super("classPage");
this.project = project;
+ this.model = model;
this.attInfo = attInfo;
this.className = className;
setTitle(PDEPlugin.getResourceString(PAGE_TITLE));
@@ -136,6 +140,7 @@
containerText = new Text(page, SWT.BORDER);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
containerText.setLayoutData(gd);
+ containerText.setText(computeSourceContainer());
containerText.addModifyListener(modifyListener);
Button button = new Button(page, SWT.PUSH);
@@ -185,6 +190,30 @@
openFileButton.setSelection(true);
generatePage = page;
}
+
+private String computeSourceContainer() {
+ IBuildModel buildModel = model.getBuildModel();
+ if (buildModel==null || buildModel.isLoaded()==false) return "";
+ String candidate = null;
+ IBuildEntry [] entries = buildModel.getBuild().getBuildEntries();
+ for (int i=0; i<entries.length; i++) {
+ IBuildEntry entry = entries[i];
+ if (entry.getName().startsWith("source.")==false) continue;
+ if (candidate!=null) {
+ // more than one folder - abort
+ candidate = null;
+ break;
+ }
+ String [] tokens = entry.getTokens();
+ if (tokens.length >1) {
+ candidate = null;
+ break;
+ }
+ candidate = tokens[0];
+ }
+ return candidate!=null ? candidate: "";
+}
+
private void createSearchPage() {
Composite page = new Composite(pageBook, SWT.NULL);
GridLayout layout = new GridLayout();
diff --git a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/wizards/extension/PointSelectionPage.java b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/wizards/extension/PointSelectionPage.java
index ac0e365..83d9954 100644
--- a/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/wizards/extension/PointSelectionPage.java
+++ b/ui/org.eclipse.pde.ui/Eclipse PDE UI/org/eclipse/pde/internal/wizards/extension/PointSelectionPage.java
@@ -16,6 +16,7 @@
import org.eclipse.pde.internal.wizards.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.pde.internal.*;
+import org.eclipse.jface.dialogs.MessageDialog;
public class PointSelectionPage
@@ -34,6 +35,8 @@
private final static String KEY_POINT_ID = "NewExtensionWizard.PointSelectionPage.pointId";
private final static String KEY_POINT_NAME = "NewExtensionWizard.PointSelectionPage.pointName";
private final static String KEY_DESC = "NewExtensionWizard.PointSelectionPage.desc";
+ private final static String KEY_MISSING_TITLE = "NewExtensionWizard.PointSelectionPage.missingTitle";
+ private final static String KEY_MISSING_IMPORT = "NewExtensionWizard.PointSelectionPage.missingImport";
private Image pointImage;
private IPluginExtension newExtension;
@@ -195,11 +198,55 @@
if (id != null)
extension.setId(id);
pluginBase.add(extension);
+ ensureImportExists(pluginBase, currentPoint);
} catch (CoreException e) {
PDEPlugin.logException(e);
}
return true;
}
+
+private void ensureImportExists(IPluginBase pluginBase, IPluginExtensionPoint point) throws CoreException {
+ IPlugin thisPlugin = getTargetPlugin(pluginBase);
+ IPlugin exPlugin = getTargetPlugin(point.getPluginBase());
+ if (thisPlugin==null || exPlugin==null) return;
+
+ String exId = exPlugin.getId();
+ // Check if it is us
+ if (exId.equals(thisPlugin.getId())) return;
+ //Check if it is implicit
+ if (exId.equals("org.eclipse.core.boot") ||
+ exId.equals("org.eclipse.core.runtime")) return;
+ // We must have it
+
+ IPluginImport [] iimports = thisPlugin.getImports();
+ for (int i=0; i<iimports.length; i++) {
+ IPluginImport iimport = iimports[i];
+ if (iimport.getId().equals(exId)) {
+ // found it
+ return;
+ }
+ }
+ // Don't have it - warn
+ String [] args = { point.getResourceString(point.getName()),
+ exPlugin.getResourceString(exPlugin.getName()) };
+ String message = PDEPlugin.getFormattedMessage(KEY_MISSING_IMPORT,
+ args);
+ MessageDialog.openWarning(PDEPlugin.getActiveWorkbenchShell(),
+ PDEPlugin.getResourceString(KEY_MISSING_TITLE),
+ message);
+}
+
+private IPlugin getTargetPlugin(IPluginBase base) {
+ if (base instanceof IPlugin) return (IPlugin)base;
+ else {
+ IFragment fragment = (IFragment)base;
+ String targetId = fragment.getPluginId();
+ String targetVersion = fragment.getPluginVersion();
+ return PDEPlugin.getDefault().findPlugin(targetId, targetVersion);
+ }
+}
+
+
public IPluginExtension getNewExtension() {
return newExtension;
}