/** @param element */ private void validatePlugins(Element parent) { NodeList list = getChildrenByName(parent, "plugin"); // $NON-NLS-1$ for (int i = 0; i < list.getLength(); i++) { if (fMonitor.isCanceled()) return; Element plugin = (Element) list.item(i); assertAttributeDefined(plugin, "id", CompilerFlags.ERROR); // $NON-NLS-1$ assertAttributeDefined(plugin, "version", CompilerFlags.ERROR); // $NON-NLS-1$ NamedNodeMap attributes = plugin.getAttributes(); boolean isFragment = plugin.getAttribute("fragment").equals("true"); // $NON-NLS-1$ //$NON-NLS-2$ for (int j = 0; j < attributes.getLength(); j++) { Attr attr = (Attr) attributes.item(j); String name = attr.getName(); if (name.equals("id")) { // $NON-NLS-1$ validatePluginID(plugin, attr, isFragment); } else if (name.equals("version")) { // $NON-NLS-1$ validateVersionAttribute(plugin, attr); validateVersion(plugin, attr); } else if (name.equals("fragment") || name.equals("unpack")) { // $NON-NLS-1$ //$NON-NLS-2$ validateBoolean(plugin, attr); } else if (!name.equals("os") && !name.equals("ws") && !name.equals("nl") // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ && !name.equals("arch") && !name.equals("download-size") // $NON-NLS-1$ //$NON-NLS-2$ && !name.equals("install-size") && !name.equals("filter")) { // $NON-NLS-1$ //$NON-NLS-2$ reportUnknownAttribute(plugin, name, CompilerFlags.ERROR); } } validateUnpack(plugin); } }
private void validateImports(Element parent) { NodeList list = getChildrenByName(parent, "import"); // $NON-NLS-1$ for (int i = 0; i < list.getLength(); i++) { if (fMonitor.isCanceled()) return; Element element = (Element) list.item(i); Attr plugin = element.getAttributeNode("plugin"); // $NON-NLS-1$ Attr feature = element.getAttributeNode("feature"); // $NON-NLS-1$ if (plugin == null && feature == null) { assertAttributeDefined(element, "plugin", CompilerFlags.ERROR); // $NON-NLS-1$ } else if (plugin != null && feature != null) { reportExclusiveAttributes( element, "plugin", "feature", CompilerFlags.ERROR); // $NON-NLS-1$//$NON-NLS-2$ } else if (plugin != null) { validatePluginID(element, plugin, false); } else if (feature != null) { validateFeatureID(element, feature); } NamedNodeMap attributes = element.getAttributes(); for (int j = 0; j < attributes.getLength(); j++) { Attr attr = (Attr) attributes.item(j); String name = attr.getName(); if (name.equals("version")) { // $NON-NLS-1$ validateVersionAttribute(element, attr); } else if (name.equals("match")) { // $NON-NLS-1$ if (element.getAttributeNode("patch") != null) { // $NON-NLS-1$ report( NLS.bind(PDECoreMessages.Builders_Feature_patchedMatch, attr.getValue()), getLine(element, attr.getValue()), CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } else { validateMatch(element, attr); } } else if (name.equals("patch")) { // $NON-NLS-1$ if ("true".equalsIgnoreCase(attr.getValue()) && feature == null) { // $NON-NLS-1$ report( NLS.bind(PDECoreMessages.Builders_Feature_patchPlugin, attr.getValue()), getLine(element, attr.getValue()), CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } else if ("true".equalsIgnoreCase(attr.getValue()) && element.getAttributeNode("version") == null) { // $NON-NLS-1$ //$NON-NLS-2$ report( NLS.bind(PDECoreMessages.Builders_Feature_patchedVersion, attr.getValue()), getLine(element, attr.getValue()), CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } else { validateBoolean(element, attr); } } else if (!name.equals("plugin") && !name.equals("feature") && !name.equals("filter")) { // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ reportUnknownAttribute(element, name, CompilerFlags.ERROR); } } } }
private void validateFeatureID(Element element, Attr attr) { int severity = CompilerFlags.getFlag(fProject, CompilerFlags.F_UNRESOLVED_FEATURES); if (severity != CompilerFlags.IGNORE) { IFeatureModel[] models = PDECore.getDefault().getFeatureModelManager().findFeatureModels(attr.getValue()); if (models.length == 0) { report( NLS.bind(PDECoreMessages.Builders_Feature_freference, attr.getValue()), getLine(element, attr.getName()), severity, PDEMarkerFactory.CAT_OTHER); } } }
/** * Validates that the version of the given plug-in is available in the registry. Adds a warning if * the plug-in could not be found. * * @param plugin xml element describing the plug-in to look for in the registry * @param attr set of element attributes */ private void validateVersion(Element plugin, Attr attr) { String id = plugin.getAttribute("id"); // $NON-NLS-1$ String version = plugin.getAttribute("version"); // $NON-NLS-1$ if (id.trim().length() == 0 || version.trim().length() == 0 || version.equals("0.0.0")) // $NON-NLS-1$ return; ModelEntry entry = PluginRegistry.findEntry(id); if (entry != null) { IPluginModelBase[] allModels = entry.getActiveModels(); for (int i = 0; i < allModels.length; i++) { IPluginModelBase availablePlugin = allModels[i]; if (id.equals(availablePlugin.getPluginBase().getId())) { if (version.equals(availablePlugin.getPluginBase().getVersion())) { return; } } } } report( NLS.bind( PDECoreMessages.Builders_Feature_mismatchPluginVersion, new String[] {version, id}), getLine(plugin, attr.getName()), CompilerFlags.WARNING, PDEMarkerFactory.CAT_OTHER); }
private void validateDescription(Element parent) { NodeList list = getChildrenByName(parent, "description"); // $NON-NLS-1$ if (list.getLength() > 0) { if (fMonitor.isCanceled()) return; Element element = (Element) list.item(0); validateElementWithContent((Element) list.item(0), true); NamedNodeMap attributes = element.getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { Attr attr = (Attr) attributes.item(i); String name = attr.getName(); if (name.equals("url")) { // $NON-NLS-1$ validateURL(element, name); } else { reportUnknownAttribute(element, name, CompilerFlags.ERROR); } } reportExtraneousElements(list, 1); } }
private void validatePluginID(Element element, Attr attr, boolean isFragment) { String id = attr.getValue(); if (!validatePluginID(element, attr)) { return; } int severity = CompilerFlags.getFlag(fProject, CompilerFlags.F_UNRESOLVED_PLUGINS); if (severity != CompilerFlags.IGNORE) { IPluginModelBase model = PluginRegistry.findModel(id); if (model == null || !model.isEnabled() || (isFragment && !model.isFragmentModel()) || (!isFragment && model.isFragmentModel())) { report( NLS.bind(PDECoreMessages.Builders_Feature_reference, id), getLine(element, attr.getName()), severity, PDEMarkerFactory.CAT_OTHER); } } }
private void validateIncludes(Element parent) { NodeList list = getChildrenByName(parent, "includes"); // $NON-NLS-1$ for (int i = 0; i < list.getLength(); i++) { if (fMonitor.isCanceled()) return; Element include = (Element) list.item(i); if (assertAttributeDefined(include, "id", CompilerFlags.ERROR) // $NON-NLS-1$ && assertAttributeDefined( include, "version", //$NON-NLS-1$ CompilerFlags.ERROR)) { validateFeatureID(include, include.getAttributeNode("id")); // $NON-NLS-1$ } NamedNodeMap attributes = include.getAttributes(); for (int j = 0; j < attributes.getLength(); j++) { Attr attr = (Attr) attributes.item(j); String name = attr.getName(); if (name.equals("version")) { // $NON-NLS-1$ validateVersionAttribute(include, attr); } else if (name.equals("optional")) { // $NON-NLS-1$ validateBoolean(include, attr); } else if (name.equals("search-location")) { // $NON-NLS-1$ String value = include.getAttribute("search-location"); // $NON-NLS-1$ if (!value.equals("root") && !value.equals("self") && !value.equals("both")) { // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ reportIllegalAttributeValue(include, attr); } } else if (!name.equals("id") && !name.equals("name") && !name.equals("os") && !name.equals("ws") // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ && !name.equals("nl") && !name.equals("arch") && !name.equals("filter")) { // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ reportUnknownAttribute(include, name, CompilerFlags.ERROR); } } } }
private void validateData(Element parent) { NodeList list = getChildrenByName(parent, "data"); // $NON-NLS-1$ for (int i = 0; i < list.getLength(); i++) { if (fMonitor.isCanceled()) return; Element data = (Element) list.item(i); assertAttributeDefined(data, "id", CompilerFlags.ERROR); // $NON-NLS-1$ NamedNodeMap attributes = data.getAttributes(); for (int j = 0; j < attributes.getLength(); j++) { Attr attr = (Attr) attributes.item(j); String name = attr.getName(); if (!name.equals("id") && !name.equals("os") && !name.equals("ws") // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ && !name.equals("nl") && !name.equals("arch") // $NON-NLS-1$ //$NON-NLS-2$ && !name.equals("download-size") && !name.equals("install-size")) { // $NON-NLS-1$ //$NON-NLS-2$ reportUnknownAttribute(data, name, CompilerFlags.ERROR); } } } }