docs: private Properties getChecksumsForMF(File mf) throws IOException {
          Properties props = new Properties();
  
          InputStream is = null;
          try {
              is = new FileInputStream(mf);
              Manifest manifest = ManifestProcessor.parseManifest(is);
  
              String fileName = manifest.getMainAttributes().getValue("Subsystem-SymbolicName");
              NameValuePair pair = ManifestHeaderProcessor.parseBundleSymbolicName(fileName);
              props.put("file.name", pair.getName());
  
              String contents = manifest.getMainAttributes().getValue("Subsystem-Content");
  
              Map<String, Map<String, String>> data = ManifestHeaderProcessor.parseImportString(contents);
  
              for (Map.Entry<String, Map<String, String>> entry : data.entrySet()) {
  
                  String name = entry.getKey();
                  Map<String, String> attrs = entry.getValue();
                  String type = attrs.get("type");
                  // exclude the feature type and jar type
                  if (type != null && (type.equals("osgi.subsystem.feature") || type.equals("checksum"))) {
                      continue;
                  }
  
                  // find the jar, we don't need care about the version,
                  // because only one jar exists when build
                  String location = attrs.get("location:");
                  File jarFile = null;
  
                  String version = attrs.get("version");
                  VersionRange range = new VersionRange(version == null ? "0" : version);
                  jarFile = cblbr.selectBundle(location, name, range);
  
                  if (jarFile == null && location != null) {
                      jarFile = new File(installRoot, location);
                  }
  
                  if (jarFile == null && (type == null || "osgi.bundle".equals(type))) {
                      throw new BuildException("The OSGi Bundle with name: " + name + ", location: " + location + ", and version " + version
                                               + " does not exist (included in manifest "
                                               + mf.getName() + ")");
                  }
  
                  // If we have a null jar, throw a helpful exception rather than an NPE on the next line
                  if (jarFile == null)
                  {
                      throw new IllegalArgumentException("Could not find a jar file for the bundle " + name);
                  }
  
                  if (!jarFile.exists()) {
                      if ((type == null || "osgi.bundle".equals(type))) {
                          throw new BuildException("The OSGi Bundle with: " + name + ", location: " + location + ", and version " + version
                                                   + " does not exist (included in manifest "
                                                   + mf.getName() + ". The jar name was calculated as " + jarFile.getAbsolutePath() + " but this file does not exist.)");
                      }
                  } else {
                      // If the bundle selection gave us a directory, and we're here, something is wrong
                      // We can't - and don't want to - try and calculate an MD5 hash for a directory
                      if (jarFile.isDirectory()) {
                          throw new BuildException("The entry with name " + name + ", location " + location + ", and version range " + version + " does not exist from "
                                                   + mf.getName());
                      }
                      if (shouldGenerateChecksum(jarFile)) {
                          // if it's not a directory, carry on and calculate the jar checksum
                          String[] checksumPair = getChecksumPair(jarFile);
                          props.setProperty(checksumPair[0], checksumPair[1]);
                      }
                  }
  
              }
          } finally {
              FileUtils.tryToClose(is);
          }
          return props;
  
      }