Package aQute.bnd.osgi
Class Analyzer
java.lang.Object
aQute.bnd.osgi.Domain
aQute.bnd.osgi.Processor
aQute.bnd.osgi.Analyzer
- All Implemented Interfaces:
Constants
,Registry
,Report
,Reporter
,Closeable
,AutoCloseable
,Iterable<String>
- Direct Known Subclasses:
Builder
This class can calculate the required headers for a (potential) JAR file. It
analyzes a directory or JAR for the packages that are contained and that are
referred to by the bytecodes. The user can the use regular expressions to
define the attributes and directives. The matching is not fully regex for
convenience. A * and ? get a . prefixed and dots are escaped.
*;auto=true any org.acme.*;auto=true org.acme.xyz org.[abc]*;auto=true org.acme.xyzAdditional, the package instruction can start with a '=' or a '!'. The '!' indicates negation. Any matching package is removed. The '=' is literal, the expression will be copied verbatim and no matching will take place. Any headers in the given properties are used in the output properties.
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class aQute.bnd.osgi.Processor
Processor.CL, Processor.FileLine, Processor.SetLocationImpl
Nested classes/interfaces inherited from interface aQute.service.reporter.Report
Report.Location
Nested classes/interfaces inherited from interface aQute.service.reporter.Reporter
Reporter.SetLocation
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) static final String
The extends macro traverses all classes and returns a list of class names that extend a base class.(package private) static final String
(package private) static final String
(package private) static final String
SHA1 macroprivate Descriptors.TypeRef
private boolean
private AnnotationHeaders
private final MultiMap<Descriptors.PackageRef,
Descriptors.PackageRef> private static final Pattern
md5 macroprivate final Map<Descriptors.TypeRef,
String> private Set<Analyzer.Check>
private final Packages
private final Map<Descriptors.TypeRef,
Clazz> private final Packages
private final Contracts
(package private) static final String
(package private) static final String
private final Descriptors
private boolean
private Jar
private final SortedSet<Clazz.JAVA>
private Packages
(package private) boolean
private static final VersionRange
(package private) static final Pattern
(package private) static final Pattern
Clean up version parameters.(package private) static final Pattern
private final Map<Descriptors.TypeRef,
Clazz> private Packages
private boolean
private static final org.slf4j.Logger
protected final AnalyzerMessages
private Set<Descriptors.PackageRef>
(package private) static final Pattern
(package private) static final Pattern
private final Set<Descriptors.PackageRef>
private final Packages
private static final String
private final MultiMap<Descriptors.PackageRef,
Descriptors.PackageRef> Fields inherited from class aQute.bnd.osgi.Processor
_frangeHelp, _uriHelp, BUFFER_SIZE, current, errors, exceptions, fileMustExist, filter, fixupMessages, LIST_SPLITTER, locations, log, pedantic, profile, properties, strict, trace, upto, warnings
Fields inherited from class aQute.bnd.osgi.Domain
translation
Fields inherited from interface aQute.bnd.osgi.Constants
ACCESS_ATTRIBUTE, AUGMENT, AUGMENT_CAPABILITY_DIRECTIVE, AUGMENT_RANGE_ATTRIBUTE, AUGMENT_REQUIREMENT_DIRECTIVE, AUTOMATIC_MODULE_NAME, BASELINE, BASELINEREPO, BLUEPRINT_TIMEOUT_ATTRIBUTE, BLUEPRINT_WAIT_FOR_DEPENDENCIES_ATTRIBUTE, BND_ADDXMLTOTEST, BND_LASTMODIFIED, BND_USE_ATTRIBUTES, BNDDRIVER, BNDDRIVER_ANT, BNDDRIVER_BND, BNDDRIVER_ECLIPSE, BNDDRIVER_GRADLE, BNDDRIVER_GRADLE_NATIVE, BNDDRIVER_INTELLIJ, BNDDRIVER_MAVEN, BNDDRIVER_OSMORC, BNDDRIVER_SBT, BSN_SOURCE_SUFFIX, BUILDERIGNORE, BUILDFILES, BUILDPATH, BUILDREPO, BUMPPOLICY, BUNDLE_ACTIVATIONPOLICY, BUNDLE_ACTIVATOR, BUNDLE_BLUEPRINT, BUNDLE_CATEGORY, BUNDLE_CLASSPATH, BUNDLE_CONTACTADDRESS, BUNDLE_CONTRIBUTORS, BUNDLE_COPYRIGHT, BUNDLE_DESCRIPTION, BUNDLE_DEVELOPERS, BUNDLE_DOCURL, BUNDLE_ICON, BUNDLE_LICENSE, BUNDLE_LOCALIZATION, BUNDLE_MANIFESTVERSION, BUNDLE_NAME, BUNDLE_NATIVECODE, BUNDLE_REQUIREDEXECUTIONENVIRONMENT, BUNDLE_SCM, BUNDLE_SPECIFIC_HEADERS, BUNDLE_SYMBOLIC_NAME_ATTRIBUTE, BUNDLE_SYMBOLICNAME, BUNDLE_UPDATELOCATION, BUNDLE_VENDOR, BUNDLE_VERSION, BUNDLE_VERSION_ATTRIBUTE, BUNDLEANNOTATIONS, CARDINALITY_DIRECTIVE, CDIANNOTATIONS, CHECK, CLASS_ATTRIBUTE, CLASSPATH, COMMAND_DIRECTIVE, COMPONENT_ACTIVATE, COMPONENT_CONFIGURATION_POLICY, COMPONENT_DEACTIVATE, COMPONENT_DESCRIPTORS, COMPONENT_DESIGNATE, COMPONENT_DESIGNATEFACTORY, COMPONENT_DIRECTIVES, COMPONENT_DIRECTIVES_1_1, COMPONENT_DIRECTIVES_1_2, COMPONENT_DYNAMIC, COMPONENT_ENABLED, COMPONENT_FACTORY, COMPONENT_GREEDY, COMPONENT_IMMEDIATE, COMPONENT_IMPLEMENTATION, COMPONENT_MODIFIED, COMPONENT_MULTIPLE, COMPONENT_NAME, COMPONENT_NAMESPACE, COMPONENT_OPTIONAL, COMPONENT_PROPERTIES, COMPONENT_PROVIDE, COMPONENT_SERVICEFACTORY, COMPONENT_VERSION, COMPRESSION, CONDITIONAL_PACKAGE, CONDITIONALPACKAGE, CONDUIT, CONNECTION_SETTINGS, CONSUMER_POLICY, CONTRACT, CREATED_BY, CURRENT_BUNDLESYMBOLICNAME, CURRENT_BUNDLEVERSION, CURRENT_PACKAGE, CURRENT_USES, CURRENT_VERSION, DEFAULT_BAR_EXTENSION, DEFAULT_BND_EXTENSION, DEFAULT_BNDRUN_EXTENSION, DEFAULT_CHARSET, DEFAULT_DO_NOT_COPY, DEFAULT_JAR_EXTENSION, DEFAULT_LAUNCHER_BSN, DEFAULT_PREPROCESSS_MATCHERS, DEFAULT_PROP_BIN_DIR, DEFAULT_PROP_SRC_DIR, DEFAULT_PROP_TARGET_DIR, DEFAULT_PROP_TESTBIN_DIR, DEFAULT_PROP_TESTSRC_DIR, DEFAULT_TESTER_BSN, DEFINE_CONTRACT, DEPENDSON, DEPLOY, DEPLOYREPO, DESCRIPTION_ATTRIBUTE, DIFFIGNORE, DIFFPACKAGES, DIGESTS, directives, DISTRO, DONOTCOPY, DSANNOTATIONS, DSANNOTATIONS_OPTIONS, DUPLICATE_MARKER, DYNAMICIMPORT_PACKAGE, EE_ATTRIBUTE, EEPROFILE, EEPROFILE_AUTO_ATTRIBUTE, EFFECTIVE_DIRECTIVE, EMBEDDED_REPO, EMPTY_HEADER, EXCLUDE_DIRECTIVE, EXECUTABLE, EXPORT, EXPORT_APIGUARDIAN, EXPORT_BSN, EXPORT_CONTENTS, EXPORT_NAME, EXPORT_PACKAGE, EXPORT_SERVICE, EXPORT_TYPE, EXPORT_VERSION, EXPORTS_ATTRIBUTE, EXPORTTYPE, EXTENSION, EXTENSION_DIRECTIVE, FAIL_OK, FILTER_DIRECTIVE, FIXUPMESSAGES, FIXUPMESSAGES_IS_DIRECTIVE, FIXUPMESSAGES_IS_ERROR, FIXUPMESSAGES_IS_IGNORE, FIXUPMESSAGES_IS_WARNING, FIXUPMESSAGES_REPLACE_DIRECTIVE, FIXUPMESSAGES_RESTRICT_DIRECTIVE, FRAGMENT_ATTACHMENT_DIRECTIVE, FRAGMENT_HOST, FROM_DIRECTIVE, GENERATE, GESTALT, GESTALT_BATCH, GESTALT_CI, GESTALT_INTERACTIVE, GESTALT_OFFLINE, GESTALT_SHELL, GROUPID, headers, IDENTITY_INITIAL_RESOURCE, IDENTITY_SYSTEM_RESOURCE, IGNORE_ATTRIBUTE, IGNORE_PACKAGE, IGNORE_STANDALONE, IMPORT_DIRECTIVE, IMPORT_PACKAGE, IMPORT_PRIVATE, IMPORT_REFERENCE, IMPORT_SERVICE, importDirectives, INCLUDE, INCLUDE_DIRECTIVE, INCLUDE_RESOURCE, INCLUDEPACKAGE, INCLUDERESOURCE, INIT, INTERNAL_BUNDLESYMBOLICNAME_DIRECTIVE, INTERNAL_BUNDLEVERSION_DIRECTIVE, INTERNAL_EXPORT_TO_MODULES_DIRECTIVE, INTERNAL_EXPORTED_DIRECTIVE, INTERNAL_MODULE_DIRECTIVE, INTERNAL_MODULE_VERSION_DIRECTIVE, INTERNAL_OPEN_TO_MODULES_DIRECTIVE, INTERNAL_PREFIX, INTERNAL_SOURCE_DIRECTIVE, INVALIDFILENAMES, JAVA, JAVA_DEBUG, JAVAAGENT, JAVAC, JAVAC_ENCODING, JAVAC_PROFILE, JAVAC_SOURCE, JAVAC_TARGET, JIDENTIFIER, JPMS_MODULE_INFO, JPMS_MODULE_INFO_OPTIONS, KEYSTORE_LOCATION_DIRECTIVE, KEYSTORE_PASSWORD_DIRECTIVE, KEYSTORE_PROVIDER_DIRECTIVE, LANGUAGE_ATTRIBUTE, LAUNCH_ACTIVATION_EAGER, LAUNCH_ACTIVATORS, LAUNCH_RUNBUNDLES_ATTRS, LAUNCH_STARTLEVEL_DEFAULT, LAUNCH_TRACE, LAUNCHER_PLUGIN, LIB_DIRECTIVE, LIBRARY, LINK_ATTRIBUTE, LITERAL_ATTRIBUTE, MAIN_CLASS, MAKE, MANDATORY_DIRECTIVE, MANIFEST, MANIFEST_NAME, MAVEN_DEPENDENCIES, MAVEN_RELEASE, MAVEN_SCOPE, META_PERSISTENCE, METAPACKAGES, METATYPE, METATYPE_ANNOTATIONS, METATYPE_ANNOTATIONS_OPTIONS, MIME_TYPE_BUNDLE, MIME_TYPE_JAR, MODULE_INFO_CLASS, MODULES_ATTRIBUTE, NAME_ATTRIBUTE, NAMESECTION, NAMESPACE_STEM, NO_IMPORT_DIRECTIVE, NOANNOTATIONS, NOBUILDINCACHE, NOBUNDLES, NOCLASSFORNAME, NODEFAULTVERSION, NOEE, NOEXTRAHEADERS, NOIMPORTJAVA, NOJUNIT, NOJUNITOSGI, NOMANIFEST, NONE, NOT_A_BUNDLE_S, NOUSES, OPTIONAL, options, OSGI_SYNTAX_HEADERS, OSNAME_ATTRIBUTE, OSVERSION_ATTRIBUTE, OUTPUT, OUTPUTMASK, PACKAGEINFOTYPE, PATH_DIRECTIVE, PEDANTIC, PLUGIN, PLUGINPATH, PLUGINPATH_SHA1_ATTR, PLUGINPATH_URL_ATTR, POM, PREPROCESSMATCHERS, PRESENCE_DIRECTIVE, PRIVATE_DIRECTIVE, PRIVATE_PACKAGE, PRIVATEPACKAGE, PROCESSOR_ATTRIBUTE, PROFILE, PROVIDE_CAPABILITY, PROVIDE_DIRECTIVE, PROVIDER_POLICY, PROVIDER_TYPE_DIRECTIVE, RELEASEREPO, REMOTEWORKSPACE, REMOVE_ATTRIBUTE_DIRECTIVE, REMOVEHEADERS, REPORTNEWER, REPOSITORIES, REPRODUCIBLE, REQUIRE_BND, REQUIRE_BUNDLE, REQUIRE_CAPABILITY, RESOLUTION, RESOLUTION_DIRECTIVE, RESOLUTION_DYNAMIC, RESOLVE, RESOLVE_EFFECTIVE, RESOLVE_EXCLUDESYSTEM, RESOLVE_PREFERENCES, RESOLVEDEBUG, RESOURCEONLY, RUNBLACKLIST, RUNBUILDS, RUNBUNDLES, RUNBUNDLES_STARTLEVEL_ATTRIBUTE, RUNEE, RUNENV, RUNFRAMEWORK, RUNFRAMEWORK_NONE, RUNFRAMEWORK_SERVICES, RUNFRAMEWORKRESTART, RUNFW, RUNJDB, RUNKEEP, RUNNOREFERENCES, RUNOPTIONS, RUNOPTIONS_EAGER, RUNPATH, RUNPROGRAMARGS, RUNPROPERTIES, RUNPROVIDEDCAPABILITIES, RUNREMOTE, RUNREPOS, RUNREQUIRES, RUNSTARTLEVEL, RUNSTARTLEVEL_BEGIN, RUNSTARTLEVEL_ORDER, RUNSTARTLEVEL_STEP, RUNSTORAGE, RUNSYSTEMCAPABILITIES, RUNSYSTEMPACKAGES, RUNTIMEOUT, RUNTRACE, RUNVM, SAVEMANIFEST, SELECTION_FILTER_ATTRIBUTE, SERVICE_COMPONENT, SERVICELOADER_NAMESPACE, SERVICELOADER_REGISTER_DIRECTIVE, SIGN, SIGN_PASSWORD_DIRECTIVE, SIGNATURE_TEST, SINGLETON_DIRECTIVE, SIZE_ATTRIBUTE, SNAPSHOT, SOURCEPATH, SOURCES, SPECIFICATION_VERSION, SPLIT_PACKAGE_DIRECTIVE, STALECHECK, STANDALONE, STATIC_ATTRIBUTE, STRICT, SUB, SUBSTITUTE_ATTRIBUTE, SYSTEMPROPERTIES, TESTCASES, TESTCONTINUOUS, TESTER, TESTER_PLUGIN, TESTPACKAGES, TESTPATH, TESTSOURCES, TESTTERMINATE, TESTUNRESOLVED, TOOL, TRANSITIVE_ATTRIBUTE, TSTAMP, UNDERTEST, UPTO, USES_DIRECTIVE, USES_USES, VALID_PROPERTY_TYPES, VERSION_ATTR_HASH, VERSION_ATTR_LATEST, VERSION_ATTR_PROJECT, VERSION_ATTR_SNAPSHOT, VERSION_ATTRIBUTE, VERSION_FILTER, VERSIONDEFAULTS, VISIBILITY_DIRECTIVE, WAB, WABLIB, WORKINGSET, WORKINGSET_MEMBER
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription_exporters
(String[] args) Get the exporter of a package ...Findpath looks through the contents of the JAR and finds paths that end with the given regular expression ${findpath (; reg-expr (; replacement)? )? }_packageattribute
(String[] args) Return an attribute of a packagevoid
addClasspath
(Jar jar) void
addClasspath
(File cp) void
addClasspath
(Collection<?> jars) private void
void
analyze()
Calculates the data structures for generating a manifest.private void
private void
private boolean
analyzeJar
(Jar jar, String prefix, boolean okToIncludeDirs, String bcpEntry) We traverse through all the classes that we can find and calculate the contained and referred set and uses.(package private) String
applyVersionPolicy
(String exportVersion, String importRange, boolean provider) boolean
assignable
(Clazz annoServiceClazz, Clazz inferredServiceClazz) boolean
assignable
(Clazz annoServiceClazz, Clazz inferredServiceClazz, boolean unknownResult) boolean
assignable
(String annoService, String inferredService) boolean
assignable
(String annoService, String inferredService, boolean unknownResult) private Boolean
assignable0
(Clazz annoServiceClazz, Clazz inferredServiceClazz) (package private) void
augmentExports
(Packages exports) Provide any macro substitutions and versions for exported packages.(package private) void
augmentImports
(Packages imports, Packages exports) Find some more information about imports in manifest and other places.protected void
begin()
One of the main workhorses of this class.calculateExportsFromContents
(Jar bundle) Calculate an export header solely based on the contents of a JAR file(package private) String
calculateVersionRange
(String version, boolean impl) Calculate a version from a version policy.boolean
check
(Analyzer.Check key) Check if we have an a check option(package private) static void
cleanupModifier
(StringBuilder result, String modifier) cleanupUses
(Map<Descriptors.PackageRef, List<Descriptors.PackageRef>> apiUses, boolean removeJava) Remove the own references and optional java references from the uses libstatic String
cleanupVersion
(String version) void
clear()
void
close()
(package private) Pair<Packages,
Parameters> private void
private String
doEEProfiles
(Clazz.JAVA highest) Added for 1.8 profiles.(package private) Packages
doExportsToImports
(Packages exports) We will add all exports to the imports unless there is a -noimport directive specified on an export.private void
doHeader
(Attributes main, String header) private void
doNamesection
(Jar dot, Manifest manifest) Parse the namesection as instructions and then match them against the current set of resources For example:(package private) void
doNameSection
(Manifest manifest, String header) This method is called when the header starts with a @, signifying a name section header.private void
Call AnalyzerPlugins to analyze the content.protected void
Ensure that we are running on the correct bnd.protected void
doUses
(Descriptors.PackageRef packageRef, Packages exports, Map<Descriptors.PackageRef, List<Descriptors.PackageRef>> uses, Packages imports) (package private) void
doUses
(Packages exports, Map<Descriptors.PackageRef, List<Descriptors.PackageRef>> uses, Packages imports) Add the uses clauses.(package private) Packages
filter
(Instructions instructions, Packages source, Set<Instruction> nomatch) Merge the attributes of two maps, where the first map can contain wildcarded names.private <T> Collection<T>
filter
(Collection<T> list, String[] args) findClass
(Descriptors.TypeRef typeRef) Find a clazz on the class path.findClasspathEntry
(String bsn, String r) Find a class path entry based on bsn and versionrange(package private) String
(package private) Set<Descriptors.PackageRef>
Find the packages we depend on, where we implement an interface that is a Provider Type.findResource
(String path) Locate a resource on the class path.findResources
(Predicate<String> matches) (package private) void
fixupAttributes
(Descriptors.PackageRef packageRef, Attrs attributes) Fixup Attributes Execute any macros on an export andprivate void
fixupOldStyleVersions
(Attrs attrs) void
getBndInfo
(String key, String defaultValue) long
Get the version for this bndgetBsn()
Clear the key part of a header.getBundleClassPathEntry
(Clazz clazz) getClasses
(String... args) getClassSignature
(String signature) getClassspace
(Descriptors.PackageRef source) Return the classes for a given source package.getDescriptor
(String descriptor) getEEs()
Return the EEsprivate Parameters
protected Jar
getExtra()
getFieldSignature
(String signature) Get the packages from the host if this is a fragment bundlegetJar()
getJarFromName
(String name, String from) Try to get a Jar from a file name/path or a url, or in last resort from the classpath name part of their files.getJarsFromName
(String name, String from) static Properties
getManifest
(File dirOrJar) Specifically for Mavenprivate void
getManifestInfoFromClasspath
(Jar jar, Packages classpathExports, Contracts contracts) getMethodSignature
(String signature) protected String
getOutputFile
(String output) Calculate the output file for the given target.getPackageInfo
(Descriptors.PackageRef packageRef) getPackageRef
(String binaryName) getPackages
(Packages scope, String... args) Find the packages belonging to the required bundlesFind the source file for this typegetSourceFileFor
(Descriptors.TypeRef type, Collection<File> sourcePath) getTypeRef
(String binaryClassName) getTypeRefFromFQN
(String fqn) getTypeRefFromPath
(String path) Return the set of unreachable code depending on exports and the bundle activator.getUses()
Answer the bundle version.getVersionPolicy
(boolean implemented) getXRef
(Descriptors.PackageRef source, Collection<Descriptors.PackageRef> dest, int sourceModifiers) Create a cross reference from package source, to packages in destboolean
isImported
(Descriptors.PackageRef packageRef) private static boolean
TRhe cleanup version got confused when people used numeric dates like 201209091230120 as qualifiers.boolean
private boolean
private boolean
(package private) boolean
jarsFromName
(String name, String from) private void
learnPackage
(Jar jar, String prefix, Descriptors.PackageRef packageRef, Packages map) private void
private Attrs
mergeImportAttrs
(Attrs existing, Attrs imported) void
mergeManifest
(Manifest manifest) Merge the existing manifest with the instructions but do not override existing properties.void
(package private) Attrs
parsePackageinfo
(Descriptors.PackageRef packageRef, Resource r) private Attrs
void
private Set<Descriptors.PackageRef>
referencesByAnnotation
(Clazz clazz) boolean
referred
(Descriptors.PackageRef packageName) void
void
referToByBinaryName
(String binaryClassName) (package private) void
removeAttributes
(Attrs attributes) Remove the attributes mentioned in the REMOVE_ATTRIBUTE_DIRECTIVE.(package private) void
removeDynamicImports
(Packages referredAndExported) Discussed with BJ and decided to kill the .private static String
removeLeadingZeroes
(String group) (package private) void
removeTransitive
(Descriptors.PackageRef name, Set<Descriptors.PackageRef> unreachable) Transitively remove all elemens from unreachable through the uses link.void
Report the details of this analyzerprivate void
reset()
boolean
Utility function to carefully save the file.void
void
setClasspath
(Jar[] classpath) void
setClasspath
(File[] classpath) void
setClasspath
(String[] classpath) void
setClasspath
(Collection<?> classpath) Set the classpath for this analyzer by file.void
setDefaults
(String bsn, Version version) Set default import and export instructions if none are setvoid
setDiagnostics
(boolean b) Set the JAR directly we are going to work on.Set the JAR file we are going to work in.void
setTypeLocation
(Reporter.SetLocation location, Descriptors.TypeRef type) Set location information for a type.protected void
setTypeSpecificPlugins
(PluginsContainer pluginsContainer) private Jar
validResourcePath
(String name, String reportIfWrong) private void
verifyAttribute
(String path, String where, String key, String value) (package private) void
verifyManifestHeadersCase
(Properties properties) Bnd is case sensitive for the instructions so we better check people are not using an invalid case.Methods inherited from class aQute.bnd.osgi.Processor
_basedir, _fileuri, _findfile, _frange, _native_capability, _propertiesdir, _propertiesname, _random, _thisfile, _uri, addBasicPlugin, addClose, addExtensions, addIncluded, addProperties, addProperties, append, appendPath, beginHandleErrors, check, concat, customize, decorated, decorated, doAttrbutes, doIncludeFile, doIncludeFile, endHandleErrors, error, error, exception, exists, findHeader, findHeader, findHeader, formatArrays, get, get, getBase, getBaseURI, getChecksum, getClass, getDuration, getErrors, getExecutor, getFile, getFile, getFlattenedProperties, getFlattenedProperties, getHeader, getHeader, getHeader, getHeader, getIncluded, getInfo, getInfo, getInstructions, getJavaExecutable, getLine, getLoader, getLocation, getLogger, getMacroDomains, getManifestAsProperties, getMergedParameters, getParameters, getParent, getPlugin, getPlugins, getPlugins, getProfile, getPromiseFactory, getProperties, getPropertiesFile, getProperty, getProperty, getProperty, getPropertyKeys, getReplacer, getScheduledExecutor, getSelfAndAncestors, getSettings, getTop, getUnexpandedProperty, getUnprocessedProperty, getWarnings, is, isDuplicate, isExceptions, isFailOk, isInteractive, isMissingPlugin, isOk, isPedantic, isPerfect, isStrict, isTrace, isTrue, iterator, join, join, join, join, join, join, keySet, lastModified, loadProperties, loadProperties0, makePrintable, merge, mergeLocalProperties, mergeProperties, mergeProperties, mergeProperties, mergeProperties, newHashMap, newList, newList, newMap, newMap, newSet, newSet, normalize, normalize, parseHeader, parseHeader, printClause, printClauses, printClauses, printExceptionSummary, printStackTrace, progress, progress, propertiesChanged, quote, read, refresh, removeBasicPlugin, removeClose, removeDuplicateMarker, replaceAll, replaceExtension, report, set, setExceptions, setFileMustExist, setForceLocal, setLocation, setParent, setPedantic, setProperties, setProperties, setProperties, setProperties, setPropertiesFile, setProperty, setTrace, signal, since, split, split, split, spliterator, stream, system, system, toFullHeaderPattern, toString, trace, tree, unsetProperty, updateModified, use, warning
Methods inherited from class aQute.bnd.osgi.Domain
copyFrom, domain, domain, domain, domain, domain, domain, domain, getBundleActivator, getBundleCategory, getBundleClasspath, getBundleClassPath, getBundleContactAddress, getBundleCopyright, getBundleDescription, getBundleDocURL, getBundleName, getBundleNative, getBundleRequiredExecutionEnvironment, getBundleSymbolicName, getBundleVendor, getBundleVersion, getDynamicImportPackage, getExportContents, getExportPackage, getFragmentHost, getIcon, getImportPackage, getIncludeResource, getParameters, getParameters, getParameters, getParameters, getPrivatePackage, getProvideCapability, getRequireBundle, getRequireCapability, getRunblacklist, getRunee, isSources, normalizeKey, setAugment, setBundleActivator, setBundleClasspath, setBundleRequiredExecutionEnvironment, setBundleSymbolicName, setBundleVersion, setBundleVersion, setConditionalPackage, setExportContents, setExportPackage, setFailOk, setImportPackage, setIncludePackage, setIncludeResource, setPrivatePackage, setRunblacklist, setRunee, setRunfw, setRunRequires, setSources, setTranslation, translate, translate
-
Field Details
-
logger
private static final org.slf4j.Logger logger -
frameworkPreR7
-
ees
-
dot
-
contained
-
referred
-
exports
-
imports
-
activator
-
uses
-
apiUses
-
contracts
-
classpathExports
-
descriptors
-
classpath
-
classspace
-
importedClassesCache
-
analyzed
private boolean analyzed -
diagnostics
private boolean diagnostics -
inited
private boolean inited -
msgs
-
annotationHeaders
-
packagesVisited
-
nonClassReferences
-
checks
-
bcpTypes
-
STATUS_PROPERTY
- See Also:
-
OLD_PACKAGEINFO_SYNTAX_P
-
OBJECT_REFERENCE
-
firstUse
boolean firstUse -
fuzzyVersion
Clean up version parameters. Other builders use more fuzzy definitions of the version syntax. This method cleans up such a version to match an OSGi version. -
fuzzyVersionRange
-
fuzzyModifier
-
DEFAULT_PROVIDER_POLICY
- See Also:
-
DEFAULT_CONSUMER_POLICY
- See Also:
-
_classesHelp
The extends macro traverses all classes and returns a list of class names that extend a base class. -
_packagesHelp
-
BASE64HEX_P
md5 macro -
_md5Help
- See Also:
-
_sha1Help
SHA1 macro- See Also:
-
-
Constructor Details
-
Analyzer
- Throws:
Exception
-
Analyzer
-
Analyzer
public Analyzer()
-
-
Method Details
-
setTypeSpecificPlugins
- Overrides:
setTypeSpecificPlugins
in classProcessor
-
getManifest
Specifically for Maven- Throws:
Exception
-
analyze
Calculates the data structures for generating a manifest.- Throws:
IOException
Exception
-
reset
private void reset() -
analyzeContent
- Throws:
Exception
-
getHostPackages
Get the packages from the host if this is a fragment bundle- Returns:
- the host packages or an empty set if not a fragment
-
getRequireBundlePackages
Find the packages belonging to the required bundles- Returns:
- the packages from the required bundles, with no Require-Bundle return an empty Optional
-
isNormalPackage
-
toJar
-
getExportedByAnnotation
-
referencesByAnnotation
-
getPackageInfo
-
doConditionalPackages
- Throws:
Exception
-
learnPackage
private void learnPackage(Jar jar, String prefix, Descriptors.PackageRef packageRef, Packages map) throws Exception - Throws:
Exception
-
getName
- Throws:
Exception
-
parsePackageinfo
- Throws:
Exception
-
parsePackageInfoClass
- Throws:
Exception
-
removeDynamicImports
Discussed with BJ and decided to kill the .- Parameters:
referredAndExported
-
-
getExtra
- Throws:
Exception
-
doPlugins
private void doPlugins()Call AnalyzerPlugins to analyze the content. -
isResourceOnly
boolean isResourceOnly()- Returns:
true
if the-resourceonly
instruction is set,false
otherwise
-
calcManifest
One of the main workhorses of this class. This will analyze the current setup and calculate a new manifest according to this setup.- Throws:
IOException
Exception
-
findClasspathEntry
Find a class path entry based on bsn and versionrange- Parameters:
bsn
- The bundle symbolic namer
- The version range specified like in OSGi (version => [version,infinite))- Returns:
- first JAR that matches bsn &r or null if not found
-
doEEProfiles
Added for 1.8 profiles. A 1.8 profile is a set of packages so the VM can be delivered in smaller versions. This method will look at theConstants.EEPROFILE
option. If it is set, it can be "auto" or it can contain a list of profiles specified as name="a,b,c" values. If we find a package outside the profiles, no profile is set. Otherwise the highest found profile is added. This only works for java packages.- Throws:
IOException
-
doHeader
-
doNamesection
Parse the namesection as instructions and then match them against the current set of resources For example:-namesection: *;baz=true, abc/def/bar/X.class=3
The raw value ofConstants.NAMESECTION
is used but the values of the attributes are replaced where @ is set to the resource name. This allows macro to operate on the resource -
doNameSection
This method is called when the header starts with a @, signifying a name section header. The name part is defined by replacing all the @ signs to a /, removing the first and the last, and using the last part as header name:@org@osgi@service@event@Implementation-Title
This will be the header Implementation-Title in the org/osgi/service/event named section.- Parameters:
manifest
-header
-
-
getBsn
Clear the key part of a header. I.e. remove everything from the first ';' -
_bsn
-
calculateExportsFromContents
Calculate an export header solely based on the contents of a JAR file- Parameters:
bundle
- The jar file to analyze
-
getContained
-
getExports
-
getImports
-
getPrivates
-
getJar
-
getReferred
-
getUnreachable
Return the set of unreachable code depending on exports and the bundle activator. -
getUses
-
getAPIUses
-
getClasspathExports
-
getBndVersion
Get the version for this bnd- Returns:
- version or unknown.
-
getBndLastModified
public long getBndLastModified() -
getBndInfo
-
mergeManifest
Merge the existing manifest with the instructions but do not override existing properties.- Parameters:
manifest
- The manifest to merge with- Throws:
IOException
-
setBase
-
setClasspath
Set the classpath for this analyzer by file.- Parameters:
classpath
-- Throws:
IOException
-
setClasspath
- Throws:
IOException
-
setClasspath
-
setClasspath
-
setJar
Set the JAR file we are going to work in. This will read the JAR in memory.- Parameters:
file
-- Throws:
IOException
-
setJar
Set the JAR directly we are going to work on.- Parameters:
jar
-
-
begin
protected void begin() -
getJarFromName
Try to get a Jar from a file name/path or a url, or in last resort from the classpath name part of their files.- Overrides:
getJarFromName
in classProcessor
- Parameters:
name
- URL or filename relative to the basefrom
- Message identifying the caller for errors- Returns:
- null or a Jar with the contents for the name
-
getJarsFromName
-
jarsFromName
-
merge
-
verifyManifestHeadersCase
Bnd is case sensitive for the instructions so we better check people are not using an invalid case. We do allow this to set headers that should not be processed by us but should be used by the framework.- Parameters:
properties
- Properties to verify.
-
doExportsToImports
We will add all exports to the imports unless there is a -noimport directive specified on an export. This directive is skipped for the manifest. We also remove any version parameter so that augmentImports can do the version policy. The following method is really tricky and evolved over time. Coming from the original background of OSGi, it was a weird idea for me to have a public package that should not be substitutable. I was so much convinced that this was the right rule that I rücksichtlos imported them all. Alas, the real world was more subtle than that. It turns out that it is not a good idea to always import. First, there must be a need to import, i.e. there must be a contained package that refers to the exported package for it to make use importing that package. Second, if an exported package refers to an internal package than it should not be imported. Additionally, it is necessary to treat the exports in groups. If an exported package refers to another exported packages than it must be in the same group. A framework can only substitute exports for imports for the whole of such a group. WHY????? Not clear anymore ... -
referred
-
getManifestInfoFromClasspath
-
fixupOldStyleVersions
-
augmentImports
Find some more information about imports in manifest and other places. It is assumed that the augmentsExports has already copied external attrs from the classpathExports.- Throws:
Exception
-
divideRegularAndDynamicImports
Pair<Packages,Parameters> divideRegularAndDynamicImports() -
applyVersionPolicy
-
findProvidedPackages
Find the packages we depend on, where we implement an interface that is a Provider Type. These packages, when we import them, must use the provider policy.- Throws:
Exception
-
isProvider
-
augmentExports
Provide any macro substitutions and versions for exported packages.- Throws:
IOException
-
fixupAttributes
Fixup Attributes Execute any macros on an export and- Throws:
IOException
-
removeAttributes
Remove the attributes mentioned in the REMOVE_ATTRIBUTE_DIRECTIVE. You can add a remove-attribute: directive with a regular expression for attributes that need to be removed. We also remove all attributes that have a value of !. This allows you to use macros with ${if} to remove values. -
calculateVersionRange
Calculate a version from a version policy.- Parameters:
version
- The actual exported versionimpl
- true for implementations and false for clients
-
doUses
void doUses(Packages exports, Map<Descriptors.PackageRef, List<Descriptors.PackageRef>> uses, Packages imports) Add the uses clauses. This method iterates over the exports and cal- Parameters:
exports
-uses
-- Throws:
MojoExecutionException
-
doUses
protected void doUses(Descriptors.PackageRef packageRef, Packages exports, Map<Descriptors.PackageRef, List<Descriptors.PackageRef>> uses, Packages imports) - Parameters:
packageRef
-exports
-uses
-imports
-
-
removeTransitive
Transitively remove all elemens from unreachable through the uses link.- Parameters:
name
-unreachable
-
-
verifyAttribute
private void verifyAttribute(String path, String where, String key, String value) throws IOException - Throws:
IOException
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classProcessor
- Throws:
IOException
-
_findpath
Findpath looks through the contents of the JAR and finds paths that end with the given regular expression ${findpath (; reg-expr (; replacement)? )? }- Parameters:
args
-
-
_findname
-
findPath
-
putAll
-
getClasspath
-
addClasspath
-
addClasspath
- Throws:
IOException
-
addClasspath
- Throws:
IOException
-
clear
public void clear() -
forceRefresh
public void forceRefresh()- Overrides:
forceRefresh
in classProcessor
-
getTarget
-
analyzeBundleClasspath
- Throws:
Exception
-
analyzeJar
private boolean analyzeJar(Jar jar, String prefix, boolean okToIncludeDirs, String bcpEntry) throws Exception We traverse through all the classes that we can find and calculate the contained and referred set and uses. This method ignores the Bundle classpath.- Throws:
Exception
-
cleanupVersion
-
isInteger
TRhe cleanup version got confused when people used numeric dates like 201209091230120 as qualifiers. These are too large for Integers. This method checks if the all digit string fits in an integer.maxint = 2,147,483,647 = 10 digits
- Returns:
- if this fits in an integer
-
removeLeadingZeroes
-
cleanupModifier
-
getVersionPolicy
-
_classes
- Throws:
Exception
-
getClasses
- Throws:
Exception
-
_packages
- Throws:
Exception
-
getPackages
public Collection<Descriptors.PackageRef> getPackages(Packages scope, String... args) throws Exception - Throws:
Exception
-
_exporters
Get the exporter of a package ...- Throws:
Exception
-
getClassspace
-
_packageattribute
Return an attribute of a package -
findResource
Locate a resource on the class path.- Parameters:
path
- Path of the reosurce- Returns:
- A resource or
null
-
findResources
-
findClass
Find a clazz on the class path. This class has been parsed.- Throws:
Exception
-
getVersion
Answer the bundle version. -
isNoBundle
public boolean isNoBundle() -
referTo
-
nonClassReferTo
-
referToByBinaryName
-
doRequireBnd
protected void doRequireBnd()Ensure that we are running on the correct bnd. -
_md5
- Throws:
Exception
-
_sha1
- Throws:
Exception
-
getDescriptor
-
getTypeRef
-
getPackageRef
-
getTypeRefFromFQN
-
getTypeRefFromPath
-
getClassSignature
-
getMethodSignature
-
getFieldSignature
-
isImported
-
filter
Merge the attributes of two maps, where the first map can contain wildcarded names. The idea is that the first map contains instructions (for example *) with a set of attributes. These patterns are matched against the found packages in actual. If they match, the result is set with the merged set of attributes. It is expected that the instructions are ordered so that the instructor can define which pattern matches first. Attributes in the instructions override any attributes from the actual.
A pattern is a modified regexp so it looks like globbing. The * becomes a .* just like the ? becomes a .?. '.' are replaced with \\. Additionally, if the pattern starts with an exclamation mark, it will remove that matches for that pattern (- the !) from the working set. So the following patterns should work:- com.foo.bar
- com.foo.*
- com.foo.???
- com.*.[^b][^a][^r]
- !com.foo.* (throws away any match for com.foo.*)
- Parameters:
instructions
- the instructions with patterns.source
- the actual found packages, contains no duplicates- Returns:
- Only the packages that were filtered by the given instructions
-
setDiagnostics
public void setDiagnostics(boolean b) -
getLowestEE
-
getHighestEE
-
_ee
-
getOutputFile
Calculate the output file for the given target. The strategy is:parameter given if not null and not directory if directory, this will be the output directory based on bsn-version.jar name of the source file if exists Untitled-[n]
- Parameters:
output
- may be null, otherwise a file path relative to base
-
save
Utility function to carefully save the file. Will create a backup if the source file has the same path as the output. It will also only save if the file was modified or the force flag is true- Parameters:
output
- the output file, if nullgetOutputFile(String)
is used.force
- if it needs to be overwritten- Throws:
Exception
-
setDefaults
Set default import and export instructions if none are set -
cleanupUses
public Map<Descriptors.PackageRef,List<Descriptors.PackageRef>> cleanupUses(Map<Descriptors.PackageRef, List<Descriptors.PackageRef>> apiUses, boolean removeJava) Remove the own references and optional java references from the uses lib- Parameters:
apiUses
-removeJava
-
-
getClassspace
Return the classes for a given source package.- Parameters:
source
- the source package- Returns:
- a set of classes for the requested package.
-
getXRef
public Map<Clazz.Def,List<Descriptors.TypeRef>> getXRef(Descriptors.PackageRef source, Collection<Descriptors.PackageRef> dest, int sourceModifiers) throws Exception Create a cross reference from package source, to packages in dest- Parameters:
source
-dest
-sourceModifiers
-- Throws:
Exception
-
_exports
-
_imports
-
filter
-
report
Report the details of this analyzer -
getEEs
Return the EEs -
validResourcePath
- Parameters:
name
-
-
check
Check if we have an a check option -
getSourceFileFor
Find the source file for this type- Parameters:
type
-- Throws:
Exception
-
getSourceFileFor
public String getSourceFileFor(Descriptors.TypeRef type, Collection<File> sourcePath) throws Exception - Throws:
Exception
-
setTypeLocation
public void setTypeLocation(Reporter.SetLocation location, Descriptors.TypeRef type) throws Exception Set location information for a type.- Throws:
Exception
-
assignable
-
assignable
-
assignable
-
assignable
-
getBundleClassPathTypes
-
getBundleClassPathEntry
-
assignable0
- Throws:
Exception
-
addDefinedContracts
private void addDefinedContracts() -
mergeImportAttrs
-