private boolean validateBundleManifestVersion() { IHeader header = getHeader(Constants.BUNDLE_MANIFESTVERSION); if (header != null) { String version = header.getValue(); if (!(fOsgiR4 = "2".equals(version)) && !"1".equals(version)) { //$NON-NLS-1$ //$NON-NLS-2$ report(PDECoreMessages.BundleErrorReporter_illegalManifestVersion, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); return false; } } return true; }
private void validateImportExportServices() { if (fOsgiR4) { IHeader importHeader = getHeader(ICoreConstants.IMPORT_SERVICE); IHeader exportHeader = getHeader(ICoreConstants.EXPORT_SERVICE); int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_DEPRECATED); if (severity == CompilerFlags.IGNORE) return; if (importHeader != null) { int line = importHeader.getLineNumber(); report(NLS.bind(PDECoreMessages.BundleErrorReporter_importexport_servicesDeprecated, ICoreConstants.IMPORT_SERVICE), line + 1, severity, PDEMarkerFactory.M_DEPRECATED_IMPORT_SERVICE, PDEMarkerFactory.CAT_DEPRECATION); } if (exportHeader != null) { int line = exportHeader.getLineNumber(); report(NLS.bind(PDECoreMessages.BundleErrorReporter_importexport_servicesDeprecated, ICoreConstants.EXPORT_SERVICE), line + 1, severity, PDEMarkerFactory.M_DEPRECATED_EXPORT_SERVICE, PDEMarkerFactory.CAT_DEPRECATION); } } }
private void validateBundleClasspath() { IHeader header = getHeader(Constants.BUNDLE_CLASSPATH); if (header != null) { if (header.getElements().length == 0) { report(PDECoreMessages.BundleErrorReporter_ClasspathNotEmpty, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } } }
private void validateEclipseGenericCapability() { IHeader header = getHeader(ICoreConstants.ECLIPSE_GENERIC_CAPABILITY); if (header == null) { return; } String message; if ((TargetPlatformHelper.getTargetVersion() >= 3.7) && isCheckDeprecated()) { message = NLS.bind(PDECoreMessages.BundleErrorReporter_eclipse_genericCapabilityDeprecated, ICoreConstants.ECLIPSE_GENERIC_CAPABILITY, Constants.PROVIDE_CAPABILITY); report(message, header.getLineNumber() + 1, CompilerFlags.P_DEPRECATED, PDEMarkerFactory.CAT_DEPRECATION); } }
private void validateProvidePackage() { IHeader header = getHeader(ICoreConstants.PROVIDE_PACKAGE); if (header == null) return; if (fOsgiR4 && isCheckDeprecated()) { report(PDECoreMessages.BundleErrorReporter_providePackageHeaderDeprecated, header.getLineNumber() + 1, CompilerFlags.P_DEPRECATED, PDEMarkerFactory.M_DEPRECATED_PROVIDE_PACKAGE, PDEMarkerFactory.CAT_OTHER); } }
private void validateBundleClasspath() { IHeader header = getHeader(Constants.BUNDLE_CLASSPATH); if (header != null && header.getElements().length == 0) { report(PDECoreMessages.BundleErrorReporter_ClasspathNotEmpty, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } }
private void validateEclipseGenericRequire() { IHeader header = getHeader(ICoreConstants.ECLIPSE_GENERIC_REQUIRED); if (header == null) { return; } String message; if ((TargetPlatformHelper.getTargetVersion() >= 3.7) && isCheckDeprecated()) { message = NLS.bind(PDECoreMessages.BundleErrorReporter_eclipse_genericRequireDeprecated, ICoreConstants.ECLIPSE_GENERIC_REQUIRED, Constants.REQUIRE_CAPABILITY); report(message, header.getLineNumber() + 1, CompilerFlags.P_DEPRECATED, PDEMarkerFactory.CAT_DEPRECATION); } }
private void validateImportExportServices() { if(fOsgiR4) { IHeader importHeader = getHeader(ICoreConstants.IMPORT_SERVICE); IHeader exportHeader = getHeader(ICoreConstants.EXPORT_SERVICE); int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_DEPRECATED); if (severity == CompilerFlags.IGNORE) return; if(importHeader != null) { int line = importHeader.getLineNumber(); report(NLS.bind(PDECoreMessages.BundleErrorReporter_importexport_servicesDeprecated, ICoreConstants.IMPORT_SERVICE), line + 1, severity, PDEMarkerFactory.M_DEPRECATED_IMPORT_SERVICE, PDEMarkerFactory.CAT_DEPRECATION); } if (exportHeader != null) { int line = exportHeader.getLineNumber(); report(NLS.bind(PDECoreMessages.BundleErrorReporter_importexport_servicesDeprecated, ICoreConstants.EXPORT_SERVICE), line + 1, severity, PDEMarkerFactory.M_DEPRECATED_EXPORT_SERVICE, PDEMarkerFactory.CAT_DEPRECATION); } } }
/** * Verifies that if a Service-Component exists then a corresponding Bundle-ActivationPolicy is present. */ private void validateServiceComponent() { IHeader header = getHeader(ICoreConstants.SERVICE_COMPONENT); if (header == null) { return; } if (getHeader(Constants.BUNDLE_ACTIVATIONPOLICY) != null) { return; } report(PDECoreMessages.BundleErrorReporter_serviceComponentLazyStart, header.getLineNumber() + 1, CompilerFlags.WARNING, PDEMarkerFactory.M_SERVICECOMPONENT_MISSING_LAZY, PDEMarkerFactory.CAT_OTHER); } }
private void validateBundleActivatorPolicy() { IHeader header = getHeader(Constants.BUNDLE_ACTIVATIONPOLICY); int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_DEPRECATED); if (header == null) return; // Header introduced in OSGi R4 - warn if R3 manifest if (!fOsgiR4) report(NLS.bind(PDECoreMessages.BundleErrorReporter_R4SyntaxInR3Bundle, Constants.BUNDLE_ACTIVATIONPOLICY), header.getLineNumber() + 1, CompilerFlags.WARNING, PDEMarkerFactory.M_R4_SYNTAX_IN_R3_BUNDLE, PDEMarkerFactory.CAT_OTHER); if (TargetPlatformHelper.getTargetVersion() >= 3.3) { validateHeaderValue(header, new String[] {Constants.ACTIVATION_LAZY}); } else if (severity != CompilerFlags.IGNORE && !containsValidActivationHeader()) { report(PDECoreMessages.BundleErrorReporter_bundleActivationPolicy_unsupported, header.getLineNumber() + 1, severity, PDEMarkerFactory.NO_RESOLUTION, PDEMarkerFactory.CAT_OTHER); } }
/** * @return boolean false if fatal */ private boolean validateBundleSymbolicName() { IHeader header = validateRequiredHeader(Constants.BUNDLE_SYMBOLICNAME); if (header == null) return false; ManifestElement[] elements = header.getElements(); String id = elements.length > 0 ? elements[0].getValue() : null; if (id == null || id.length() == 0) { report(PDECoreMessages.BundleErrorReporter_NoSymbolicName, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); return false; } if (!validateBundleManifestVersion()) return false; validatePluginId(header, id); validateSingleton(header, elements[0]); // Header introduced in OSGi R4 - warn if R3 manifest if (!fOsgiR4) report(NLS.bind(PDECoreMessages.BundleErrorReporter_R4SyntaxInR3Bundle, Constants.BUNDLE_SYMBOLICNAME), header.getLineNumber() + 1, CompilerFlags.WARNING, PDEMarkerFactory.M_R4_SYNTAX_IN_R3_BUNDLE, PDEMarkerFactory.CAT_OTHER); return true; }
private void validateAutoStart() { IHeader header = getHeader(ICoreConstants.ECLIPSE_AUTOSTART); if (!validateStartHeader(header)) return; // valid start header problems already reported int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_DEPRECATED); if (severity != CompilerFlags.IGNORE && TargetPlatformHelper.getTargetVersion() >= 3.2) { int line = header.getLineNumber(); report(PDECoreMessages.BundleErrorReporter_startHeader_autoStartDeprecated, line + 1, severity, PDEMarkerFactory.M_DEPRECATED_AUTOSTART, PDEMarkerFactory.CAT_DEPRECATION); } }
private void validateLazyStart() { IHeader header = getHeader(ICoreConstants.ECLIPSE_LAZYSTART); int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_DEPRECATED); if (header != null && TargetPlatformHelper.getTargetVersion() < 3.2 && severity != CompilerFlags.IGNORE) { report(PDECoreMessages.BundleErrorReporter_lazyStart_unsupported, header.getLineNumber() + 1, severity, PDEMarkerFactory.NO_RESOLUTION, PDEMarkerFactory.CAT_OTHER); } else { validateStartHeader(header); } }
/** * @return boolean false if fatal */ private boolean validateBundleSymbolicName() { IHeader header = validateRequiredHeader(Constants.BUNDLE_SYMBOLICNAME); if (header == null) return false; ManifestElement[] elements = header.getElements(); String id = elements.length > 0 ? elements[0].getValue() : null; if (id == null || id.length() == 0) { report(PDECoreMessages.BundleErrorReporter_NoSymbolicName, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); return false; } validatePluginId(header, id); validateSingleton(header, elements[0]); return true; }
protected int getPackageLine(IHeader header, ManifestElement element) { String packageName = element.getValue(); if (element.getDirectiveKeys() != null || element.getKeys() != null) return getLine(header, packageName + ";"); //$NON-NLS-1$ // check for this exact package on the last line try { IRegion lineRegion = fTextDocument.getLineInformation(header.getLineNumber() + header.getLinesSpan() - 1); String lineStr = fTextDocument.get(lineRegion.getOffset(), lineRegion.getLength()); if (lineStr.endsWith(packageName)) { return header.getLineNumber() + header.getLinesSpan(); } } catch (BadLocationException ble) { PDECore.logException(ble); } // search all except last line return getLine(header, packageName + ","); //$NON-NLS-1$ }
private void validateEclipsePlatformFilter() { IHeader header = getHeader(ICoreConstants.PLATFORM_FILTER); if (header == null) return; try { PDECore.getDefault().getBundleContext().createFilter(header.getValue()); int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_INCOMPATIBLE_ENV); if (severity == CompilerFlags.IGNORE) return; BundleDescription desc = fModel.getBundleDescription(); if (desc != null && !desc.isResolved()) { ResolverError[] errors = desc.getContainingState().getResolverErrors(desc); for (int i = 0; i < errors.length; i++) { if (errors[i].getType() == ResolverError.PLATFORM_FILTER) { report(PDECoreMessages.BundleErrorReporter_badFilter, header.getLineNumber() + 1, severity, PDEMarkerFactory.CAT_OTHER); } } } } catch (InvalidSyntaxException ise) { report(PDECoreMessages.BundleErrorReporter_invalidFilterSyntax, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } }
protected int getPackageLine(IHeader header, ManifestElement element) { String packageName = element.getValue(); if (element.getDirectiveKeys() != null || element.getKeys() != null) return getLine(header, packageName + ";"); //$NON-NLS-1$ // check for this exact package on the last line try { IRegion lineRegion = fTextDocument.getLineInformation(header .getLineNumber() + header.getLinesSpan() - 1); String lineStr = fTextDocument.get(lineRegion.getOffset(), lineRegion.getLength()); if (lineStr.endsWith(packageName)) { return header.getLineNumber() + header.getLinesSpan(); } } catch (BadLocationException ble) { PDECore.logException(ble); } // search all except last line return getLine(header, packageName + ","); //$NON-NLS-1$ }
private void validateEclipsePlatformFilter() { IHeader header = getHeader(ICoreConstants.PLATFORM_FILTER); if (header == null) return; try { PDECore.getDefault().getBundleContext().createFilter(header.getValue()); int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_INCOMPATIBLE_ENV); if (severity == CompilerFlags.IGNORE) return; BundleDescription desc = fModel.getBundleDescription(); if (desc != null && !desc.isResolved()) { ResolverError[] errors = desc.getContainingState().getResolverErrors(desc); for (int i = 0; i < errors.length; i++) { if (errors[i].getType() == ResolverError.PLATFORM_FILTER) { report(PDECoreMessages.BundleErrorReporter_badFilter, header.getLineNumber() + 1, severity, PDEMarkerFactory.CAT_OTHER); } } } } catch (InvalidSyntaxException ise) { report(PDECoreMessages.BundleErrorReporter_invalidFilterSyntax, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); } }
private void validateAutoStart() { IHeader header = getHeader(ICoreConstants.ECLIPSE_AUTOSTART); if (!validateStartHeader(header)) return; // valid start header problems already reported int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_DEPRECATED); if (severity != CompilerFlags.IGNORE && TargetPlatformHelper.getTargetVersion() >= 3.2 && !containsValidActivationHeader()) { int line = header.getLineNumber(); String message = NLS.bind(PDECoreMessages.BundleErrorReporter_startHeader_autoStartDeprecated, new Object[] {ICoreConstants.ECLIPSE_AUTOSTART, getCurrentActivationHeader()}); IMarker marker = report(message, line + 1, severity, PDEMarkerFactory.M_DEPRECATED_AUTOSTART, PDEMarkerFactory.CAT_DEPRECATION); if (marker != null) { try { marker.setAttribute(PDEMarkerFactory.ATTR_HEADER, ICoreConstants.ECLIPSE_AUTOSTART); ManifestElement elem = header.getElements()[0]; boolean unnecessary = elem.getValue().equals("false") && elem.getAttribute("excludes") == null; //$NON-NLS-1$ //$NON-NLS-2$ marker.setAttribute(PDEMarkerFactory.ATTR_CAN_ADD, !unnecessary); } catch (CoreException e) { } } } }
private void validateBundleActivator() { IHeader header = getHeader(Constants.BUNDLE_ACTIVATOR); if (header == null) return; String activator = header.getValue(); BundleDescription desc = fModel.getBundleDescription(); if (desc != null && desc.getHost() != null) { report(PDECoreMessages.BundleErrorReporter_fragmentActivator, header.getLineNumber() + 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); return; } if (isCheckUnknownClass()) { try { if (fProject.hasNature(JavaCore.NATURE_ID)) { IJavaProject javaProject = JavaCore.create(fProject); // Look for this activator in the project's classpath if (!PDEJavaHelper.isOnClasspath(activator, javaProject)) { report(NLS.bind(PDECoreMessages.BundleErrorReporter_NoExist, activator), getLine(header, activator), CompilerFlags.P_UNKNOWN_CLASS, PDEMarkerFactory.M_UNKNOWN_ACTIVATOR, PDEMarkerFactory.CAT_FATAL); } } } catch (CoreException ce) { } } }