blob: 5bdafc3fd8e9678a01ac52dd15677d8013812883 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.felix.maven.osgicheck.impl.checks;
import java.util.List;
import org.apache.felix.maven.osgicheck.impl.Check;
import org.apache.felix.maven.osgicheck.impl.CheckContext;
import org.apache.felix.maven.osgicheck.impl.featureutil.ManifestUtil;
import org.apache.felix.maven.osgicheck.impl.featureutil.PackageInfo;
import org.apache.maven.plugin.MojoExecutionException;
import org.osgi.framework.Version;
/**
* The following checks are performed:
* <ul>
* <li>Exports without a version (ERROR)
* <li>Import without a version (range) (WARNING)
* <li>Dynamic import without a version (range) (WARNING)
* <li>Dynamic import * (WARNING)
* <li>Export of private looking package (WARNING)
* </ul>
*/
public class ImportExportCheck implements Check {
@Override
public String getName() {
return "packages";
}
@Override
public void check(final CheckContext ctx) throws MojoExecutionException {
ctx.getLog().info("Checking bundle exports/imports...");
final List<PackageInfo> exp = ManifestUtil.extractExportedPackages(ctx.getManifest());
for(final PackageInfo p : exp) {
if ( p.getPackageVersion().compareTo(Version.emptyVersion) == 0 ) {
ctx.reportError("Package is exported without version " + p.getName());
}
if ( p.getName().contains(".impl.") || p.getName().contains(".internal.") ) {
ctx.reportWarning("Package seems to export a private package " + p.getName());
}
}
final List<PackageInfo> imp = ManifestUtil.extractImportedPackages(ctx.getManifest());
for(final PackageInfo p : imp) {
if ( p.getVersion() == null ) {
ctx.reportWarning("Package is imported without version (range) " + p.getName());
}
}
final List<PackageInfo> dynImp = ManifestUtil.extractDynamicImportedPackages(ctx.getManifest());
for(final PackageInfo p : dynImp) {
if ( "*".equals(p.getName()) ) {
ctx.reportWarning("Dynamic package import * should be avoided");
} else {
if ( p.getVersion() == null ) {
ctx.reportWarning("Dynamic package is imported without version (range) " + p.getName());
}
}
}
}
}