private void validateManifestFile(IFile file, IProgressMonitor monitor) { if (monitor.isCanceled()) return; String message = NLS.bind(PDECoreMessages.Builders_verifying, file.getFullPath().toString()); monitor.subTask(message); BundleErrorReporter reporter = new BundleErrorReporter(file); if (reporter != null) { reporter.validateContent(monitor); monitor.subTask(PDECoreMessages.Builders_updating); } monitor.done(); }
private Set getExportedPackages() { if (fProjectPackages == null) { fProjectPackages = new HashSet(); addProjectPackages(fProject); BundleDescription desc = fModel.getBundleDescription(); if (desc != null) { HostSpecification host = desc.getHost(); if (host != null) { addHostPackages(host.getName()); } else { addFragmentPackages(desc.getFragments()); } } } return fProjectPackages; }
protected void validateExportPackage(IProgressMonitor monitor) { IHeader header = getHeader(Constants.EXPORT_PACKAGE); if (header == null) return; checkCanceled(monitor); validateExportPackageVersion(header, elements[i]); validateSpecificationVersionAttribute(header, elements[i]); validateX_InternalDirective(header, elements[i]); validateX_FriendsDirective(header, elements[i]); String name = valueComps[j]; if (name.equals("java") || name.startsWith("java.")) { //$NON-NLS-1$ //$NON-NLS-2$ IHeader jreHeader = getHeader(ICoreConstants.ECLIPSE_JREBUNDLE); if (jreHeader == null || !"true".equals(jreHeader.getValue())) { //$NON-NLS-1$ message = PDECoreMessages.BundleErrorReporter_exportNoJRE; report(message, getPackageLine(header, elements[i]), CompilerFlags.ERROR, PDEMarkerFactory.M_JAVA_PACKAGE__PORTED, PDEMarkerFactory.CAT_FATAL); if (!isCheckUnresolvedImports()) { continue; if (!getExportedPackages().contains(name) && !(fProject.getFolder(name.replace('.', '/')).exists())) { message = NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistInProject, name); IMarker marker = report(message, getPackageLine(header, elements[i]), CompilerFlags.P_UNRESOLVED_IMPORTS, PDEMarkerFactory.M_EXPORT_PKG_NOT_EXIST, PDEMarkerFactory.CAT_OTHER); addMarkerAttribute(marker, "packageName", name); //$NON-NLS-1$
private boolean validateStartHeader(IHeader header) { if (header == null) return false; validateBooleanValue(header); return exceptionsAttributesValid(header, header.getElements()); }
public void validateContent(IProgressMonitor monitor) { super.validateContent(monitor); if (fHeaders == null || getErrorCount() > 0) return; fModel = PluginRegistry.findModel(fProject); // be paranoid. something could have gone wrong reading the file etc. if (fModel == null || !validateBundleSymbolicName()) return; setOsgiR4(); validateFragmentHost(); validateRequiredHeader(Constants.BUNDLE_NAME); validateBundleVersion(); validateRequiredExecutionEnvironment(); validateEclipsePlatformFilter(); validateBundleActivator(); validateBundleClasspath(); validateRequireBundle(monitor); validateImportPackage(monitor); validateExportPackage(monitor); validateExportPackages(); validateAutoStart(); validateLazyStart(); validateExtensibleAPI(); validateTranslatableHeaders(); validateImportExportServices(); validateBundleLocalization(); }
@Override public void validateContent(IProgressMonitor monitor) { super.validateContent(monitor); if (fHeaders == null || getErrorCount() > 0) return; if (fModel == null || !validateBundleSymbolicName()) return; } catch (BundleException e) { if (e.getType() == BundleException.MANIFEST_ERROR) { report(e.getMessage(), 1, CompilerFlags.ERROR, PDEMarkerFactory.CAT_FATAL); return; validateFragmentHost(); validateBundleVersion(); validateRequiredExecutionEnvironment(); validateEclipsePlatformFilter(); validateBundleActivator(); validateBundleClasspath(); validateRequireBundle(monitor); validateImportPackage(monitor); validateExportPackage(monitor); validateExportPackages(); validateAutoStart(); validateLazyStart(); validateBundleActivatorPolicy(); validateExtensibleAPI(); validateTranslatableHeaders();
private void validateRequireBundle(IProgressMonitor monitor) { if (!isCheckUnresolvedImports()) return; IHeader header = getHeader(Constants.REQUIRE_BUNDLE); if (header == null) return; BundleSpecification[] specs = desc.getRequiredBundles(); for (int i = 0; i < required.length; i++) { checkCanceled(monitor); validateBundleVersionAttribute(header, required[i]); validateVisibilityDirective(header, required[i]); validateReprovideAttribute(header, required[i]); validateResolutionDirective(header, required[i]); validateOptionalAttribute(header, required[i]); validateFragmentHost(header, required[i]); boolean optional = isOptional(required[i]); int severity = getRequireBundleSeverity(required[i], optional); IMarker marker = report(NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistPDE, bundleID), getPackageLine(header, required[i]), severity, PDEMarkerFactory.M_REQ_BUNDLE_NOT_AVAILABLE, report(NLS.bind(PDECoreMessages.BundleErrorReporter_BundleRangeInvalidInBundleVersion, bundleID + ": " + specs[i].getVersionRange()), //$NON-NLS-1$ getPackageLine(header, required[i]), severity, PDEMarkerFactory.CAT_FATAL);
private void validateImportPackage(IProgressMonitor monitor) { IHeader header = getHeader(Constants.IMPORT_PACKAGE); if (header == null) return; ManifestElement[] elements = header.getElements(); for (int i = 0; i < elements.length; i++) { validateSpecificationVersionAttribute(header, elements[i]); validateImportPackageVersion(header, elements[i]); HashMap<String, ExportPackageDescription> exported = getAvailableExportedPackages(desc.getContainingState()); int index = 0; for (int i = 0; i < elements.length; i++) { checkCanceled(monitor); validateSpecificationVersionAttribute(header, elements[i]); validateResolutionDirective(header, elements[i]); validateImportPackageVersion(header, elements[i]); String name = importSpec.getName(); if (name.equals("java") || name.startsWith("java.")) { //$NON-NLS-1$ //$NON-NLS-2$ IHeader jreHeader = getHeader(ICoreConstants.ECLIPSE_JREBUNDLE); if (jreHeader == null || !"true".equals(jreHeader.getValue())) { //$NON-NLS-1$ report(PDECoreMessages.BundleErrorReporter_importNoJRE, getPackageLine(header, elements[i]), CompilerFlags.ERROR, PDEMarkerFactory.M_JAVA_PACKAGE__PORTED, PDEMarkerFactory.CAT_FATAL); continue; if (importSpec.isResolved() || !isCheckUnresolvedImports()) continue;
protected void validateExportPackage(IProgressMonitor monitor) { IHeader header = getHeader(Constants.EXPORT_PACKAGE); if (header == null) return; checkCanceled(monitor); validateVersionAttribute(header, elements[i], false); validateSpecificationVersionAttribute(header,elements[i]); validateX_InternalDirective(header, elements[i]); validateX_FriendsDirective(header, elements[i]); String name = valueComps[j]; if (name.equals("java") || name.startsWith("java.")) { //$NON-NLS-1$ //$NON-NLS-2$ IHeader jreHeader = getHeader(ICoreConstants.ECLIPSE_JREBUNDLE); if (jreHeader == null || !"true".equals(jreHeader.getValue())) { //$NON-NLS-1$ message = PDECoreMessages.BundleErrorReporter_exportNoJRE; report(message, getPackageLine(header, elements[i]), CompilerFlags.ERROR, PDEMarkerFactory.M_JAVA_PACKAGE__PORTED, if (!isCheckUnresolvedImports()) { continue; if (!getExportedPackages().contains(name) && !(fProject.getFolder(name.replace('.', '/')).exists())) { message = NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistInProject, name); IMarker marker = report(message, getPackageLine(header, elements[i]), CompilerFlags.P_UNRESOLVED_IMPORTS, PDEMarkerFactory.M_EXPORT_PKG_NOT_EXIST,
private boolean exceptionsAttributesValid(IHeader header, ManifestElement[] elements) { if (elements == null || elements.length == 0) return true; int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_UNKNOWN_ATTRIBUTE); if (severity == CompilerFlags.IGNORE) return true; Enumeration keys = elements[0].getKeys(); if (keys != null && keys.hasMoreElements()) { String key = (String) keys.nextElement(); if ("exceptions".equals(key)) { //$NON-NLS-1$ String[] values = elements[0].getAttributes(key); for (int i = 0; i < values.length; i++) { StringTokenizer st = new StringTokenizer(values[i], ","); //$NON-NLS-1$ while (st.hasMoreTokens()) { String name = st.nextToken().trim(); if (!getExportedPackages().contains(name)) { String message = NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistInProject, name); report(message, getLine(header, name), CompilerFlags.P_UNRESOLVED_IMPORTS, PDEMarkerFactory.CAT_OTHER); return false; } } } } } return true; }
private void validateExportPackages() { IHeader header = getHeader(Constants.EXPORT_PACKAGE); name = "."; //$NON-NLS-1$ if (fragment.containsJavaResources() || fragment.getNonJavaResources().length > 0) { if (!containsPackage(header, name)) { packages.append(name); if (j < javaElements.length - 1) IMarker marker = report(PDECoreMessages.BundleErrorReporter_missingPackagesInProject, header == null ? 1 : header.getLineNumber() + 1, CompilerFlags.P_MISSING_EXPORT_PKGS, PDEMarkerFactory.M_MISSING_EXPORT_PKGS, PDEMarkerFactory.CAT_OTHER); addMarkerAttribute(marker, "packages", packages.toString()); //$NON-NLS-1$
private void validateExportPackages() { IHeader header = getHeader(Constants.EXPORT_PACKAGE); name = "."; //$NON-NLS-1$ if (fragment.containsJavaResources() || fragment.getNonJavaResources().length > 0){ if (!containsPackage(header, name)) { packages.append(name); if(j < javaElements.length - 1) IMarker marker = report(PDECoreMessages.BundleErrorReporter_missingPackagesInProject, header == null ? 1 : header.getLineNumber() + 1, CompilerFlags.P_MISSING_EXPORT_PKGS, PDEMarkerFactory.M_MISSING_EXPORT_PKGS,
private void addFragmentPackages(BundleDescription[] fragments) { for (int i = 0; i < fragments.length; i++) { String id = fragments[i].getSymbolicName(); IPluginModelBase model = PluginRegistry.findModel(id); IResource resource = model instanceof IFragmentModel ? model.getUnderlyingResource() : null; if (resource != null) { addProjectPackages(resource.getProject()); } } }
private void validateRequireBundle(IProgressMonitor monitor) { if (!isCheckUnresolvedImports()) return; IHeader header = getHeader(Constants.REQUIRE_BUNDLE); if (header == null) return; if (desc == null) { for (int i = 0; i < required.length; i++) validateBundleVersionAttribute(header, required[i]); return; checkCanceled(monitor); validateBundleVersionAttribute(header, required[i]); validateVisibilityDirective(header, required[i]); validateReprovideAttribute(header, required[i]); validateResolutionDirective(header, required[i]); validateOptionalAttribute(header, required[i]); validateFragmentHost(header, required[i]); boolean optional = isOptional(required[i]); int severity = getRequireBundleSeverity(required[i], optional); IMarker marker = report(NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistPDE, bundleID), getPackageLine(header, required[i]), severity, PDEMarkerFactory.M_REQ_BUNDLE_NOT_AVAILABLE, PDEMarkerFactory.CAT_FATAL); try { if (marker != null) { report(NLS.bind(PDECoreMessages.BundleErrorReporter_BundleRangeInvalidInBundleVersion, bundleID + ": " + specs[i].getVersionRange()), //$NON-NLS-1$
IHeader header = getHeader(Constants.IMPORT_PACKAGE); if (header == null) return; HashMap exported = getAvailableExportedPackages(desc.getContainingState()); int index = 0; for (int i = 0; i < elements.length; i++) { checkCanceled(monitor); validateSpecificationVersionAttribute(header, elements[i]); validateResolutionDirective(header, elements[i]); if (!hasUnresolved) continue; validateVersionAttribute(header, elements[i], true); String name = importSpec.getName(); if (name.equals("java") || name.startsWith("java.")) { //$NON-NLS-1$ //$NON-NLS-2$ IHeader jreHeader = getHeader(ICoreConstants.ECLIPSE_JREBUNDLE); if (jreHeader == null || !"true".equals(jreHeader.getValue())) { //$NON-NLS-1$ report(PDECoreMessages.BundleErrorReporter_importNoJRE, getPackageLine(header, elements[i]), CompilerFlags.ERROR, PDEMarkerFactory.M_JAVA_PACKAGE__PORTED, PDEMarkerFactory.CAT_FATAL); if (importSpec.isResolved() || !isCheckUnresolvedImports()) continue; boolean optional = isOptional(elements[i]);
private boolean exceptionsAttributesValid(IHeader header, ManifestElement[] elements) { if (elements == null || elements.length == 0) return true; int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_UNKNOWN_ATTRIBUTE); if (severity == CompilerFlags.IGNORE) return true; Enumeration<?> keys = elements[0].getKeys(); if (keys != null && keys.hasMoreElements()) { String key = (String) keys.nextElement(); if ("exceptions".equals(key)) { //$NON-NLS-1$ String[] values = elements[0].getAttributes(key); for (int i = 0; i < values.length; i++) { StringTokenizer st = new StringTokenizer(values[i], ","); //$NON-NLS-1$ while (st.hasMoreTokens()) { String name = st.nextToken().trim(); if (!getExportedPackages().contains(name)) { String message = NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistInProject, name); report(message, getLine(header, name), CompilerFlags.P_UNRESOLVED_IMPORTS, PDEMarkerFactory.CAT_OTHER); return false; } } } } } return true; }
private boolean validateStartHeader(IHeader header) { if (header == null) return false; validateBooleanValue(header); return exceptionsAttributesValid(header, header.getElements()); }
private void addFragmentPackages(BundleDescription[] fragments) { for (int i = 0; i < fragments.length; i++) { String id = fragments[i].getSymbolicName(); IPluginModelBase model = PluginRegistry.findModel(id); IResource resource = model instanceof IFragmentModel ? model.getUnderlyingResource() : null; if (resource != null) { addProjectPackages(resource.getProject()); } } }
private Set<String> getExportedPackages() { if (fProjectPackages == null) { fProjectPackages = new HashSet<>(); addProjectPackages(fProject); BundleDescription desc = fModel.getBundleDescription(); if (desc != null) { HostSpecification host = desc.getHost(); if (host != null) { addHostPackages(host.getName()); } else { addFragmentPackages(desc.getFragments()); } } } return fProjectPackages; }
private void validateManifestFile(IFile file, IProgressMonitor monitor) { if (monitor.isCanceled()) return; String message = NLS.bind(PDECoreMessages.Builders_verifying, file.getFullPath().toString()); monitor.subTask(message); BundleErrorReporter reporter = new BundleErrorReporter(file); reporter.validateContent(monitor); monitor.subTask(PDECoreMessages.Builders_updating); monitor.done(); }