List of usage examples for org.aspectj.weaver.loadtime.definition DocumentParser parse
public static Definition parse(final URL url) throws Exception
From source file:org.eclipse.equinox.weaving.aspectj.loadtime.AspectAdminImpl.java
License:Open Source License
/** * Parse the aspect definition for the given bundle, if there is one. * /*from w ww.j ava 2 s. com*/ * @param bundle The bundle for which the aspect definition should be parsed */ protected void parseDefinitions(final Bundle bundle) { try { Definition allAspectsDefinition = null; final Set<String> exportedAspects = new LinkedHashSet<String>(); final Set<Definition.ConcreteAspect> exportedConcreteAspects = new HashSet<Definition.ConcreteAspect>(); final Map<String, Integer> policies = new HashMap<String, Integer>(); final Set<String> exportedPackages = new HashSet<String>(); // try to find aop.xml file final String aopXmlLocation = getDefinitionLocation(bundle); final URL aopXmlDef = bundle.getEntry(aopXmlLocation); if (aopXmlDef != null) { allAspectsDefinition = DocumentParser.parse(aopXmlDef); } // parse export package headers final Dictionary<?, ?> manifest = bundle.getHeaders(""); //$NON-NLS-1$ final ManifestElement[] exports = ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, (String) manifest.get(Constants.EXPORT_PACKAGE)); for (int i = 0; exports != null && i < exports.length; i++) { final String packageName = exports[i].getValue(); exportedPackages.add(packageName); // policies final String policy = exports[i].getDirective(ASPECT_POLICY_DIRECTIVE); if (policy != null && policy.trim().toLowerCase().equals(ASPECT_POLICY_DIRECTIVE_OPT_OUT)) { policies.put(packageName, AspectAdmin.ASPECT_POLICY_OPT_OUT); } if (policy != null && policy.trim().toLowerCase().equals(ASPECT_POLICY_DIRECTIVE_OPT_IN)) { policies.put(packageName, AspectAdmin.ASPECT_POLICY_OPT_IN); } // aspects final String allaspects = exports[i].getAttribute(ASPECTS_ATTRIBUTE); if (allaspects != null) { final String[] aspects = ManifestElement.getArrayFromList(allaspects); if (aspects != null) { for (int j = 0; j < aspects.length; j++) { exportedAspects.add(packageName + "." + aspects[j]); //$NON-NLS-1$ } } } } // add aop.xml declared aspects to the list of exported aspects if their packages are exported if (allAspectsDefinition != null && allAspectsDefinition.getAspectClassNames() != null) { final Iterator<?> iterator = allAspectsDefinition.getAspectClassNames().iterator(); while (iterator.hasNext()) { final String aspect = (String) iterator.next(); final String packageName = getPackage(aspect); if (exportedPackages.contains(packageName)) { exportedAspects.add(aspect); } } } if (allAspectsDefinition != null && allAspectsDefinition.getConcreteAspects().size() > 0) { final Iterator<?> iterator = allAspectsDefinition.getConcreteAspects().iterator(); while (iterator.hasNext()) { final Definition.ConcreteAspect concreteAspect = (Definition.ConcreteAspect) iterator.next(); if (concreteAspect.name != null && exportedPackages.contains(getPackage(concreteAspect.name))) { exportedConcreteAspects.add(concreteAspect); } } } if (allAspectsDefinition != null) { this.aspectDefinitions.put(bundle, allAspectsDefinition); } if (exportedAspects.size() > 0 || exportedConcreteAspects.size() > 0 || (allAspectsDefinition != null && allAspectsDefinition.getWeaverOptions().length() > 0)) { final Definition exportedAspectsDefinition = new Definition(); exportedAspectsDefinition.getAspectClassNames().addAll(exportedAspects); exportedAspectsDefinition.getConcreteAspects().addAll(exportedConcreteAspects); if (allAspectsDefinition != null && allAspectsDefinition.getWeaverOptions().trim().length() > 0) { exportedAspectsDefinition.appendWeaverOptions(allAspectsDefinition.getWeaverOptions()); } this.aspectDefinitionsExported.put(bundle, exportedAspectsDefinition); } if (policies.size() > 0) { this.aspectPolicies.put(bundle, policies); } } catch (final Exception e) { e.printStackTrace(); } }