Skip to content

Commit

Permalink
Add ManifestElement.parseBundleManifest without map parameter
Browse files Browse the repository at this point in the history
Currently the existing ManifestElement.parseBundleManifest with a wild
mixture of parameters, some using access restricted maps, some use null
some use a hashmap (what likely causes issue if case of headers is
different than expected).

This adds a new method that simply removes the map parameter and uses a
CaseInsensitiveDictionaryMap that is also used internally in the
framework and is most likely the most natural choice for this usecase.
  • Loading branch information
laeubi committed Jun 21, 2024
1 parent 50e03e5 commit a7c0601
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 4 deletions.
4 changes: 2 additions & 2 deletions bundles/org.eclipse.osgi/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Export-Package: org.eclipse.core.runtime.adaptor;x-friends:="org.eclipse.core.ru
org.eclipse.osgi.storage.bundlefile;x-internal:=true,
org.eclipse.osgi.storage.url.reference;x-internal:=true,
org.eclipse.osgi.storagemanager;version="1.0",
org.eclipse.osgi.util;version="1.1",
org.eclipse.osgi.util;version="1.2.0",
org.osgi.dto;version="1.1.1",
org.osgi.framework;version="1.10",
org.osgi.framework.connect;version="1.0";uses:="org.osgi.framework.launch",
Expand Down Expand Up @@ -107,7 +107,7 @@ Bundle-Activator: org.eclipse.osgi.internal.framework.SystemBundleActivator
Bundle-Description: %systemBundle
Bundle-Copyright: %copyright
Bundle-Vendor: %eclipse.org
Bundle-Version: 3.20.100.qualifier
Bundle-Version: 3.21.0.qualifier
Bundle-Localization: systembundle
Bundle-DocUrl: http://www.eclipse.org
Eclipse-ExtensibleAPI: true
Expand Down
2 changes: 1 addition & 1 deletion bundles/org.eclipse.osgi/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
</parent>
<groupId>org.eclipse.osgi</groupId>
<artifactId>org.eclipse.osgi</artifactId>
<version>3.20.100-SNAPSHOT</version>
<version>3.21.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<properties>
<!-- The actual TCKs are executed in the org.eclipse.osgi.tck module because of reference to other service implementations -->
Expand Down
2 changes: 1 addition & 1 deletion bundles/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.equinox.supplement
Bundle-Version: 1.10.900.qualifier
Bundle-Version: 1.11.0.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.equinox.log;version="1.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;
import org.eclipse.osgi.internal.messages.Msg;
import org.eclipse.osgi.internal.util.SupplementDebug;
import org.eclipse.osgi.internal.util.Tokenizer;
Expand Down Expand Up @@ -485,6 +486,27 @@ public static String[] getArrayFromList(String stringList, String separator) {
return list.toArray(new String[list.size()]);
}

/**
* Parses a bundle manifest and returns the header/value pairs into as case
* insensitive map. Only the main section of the manifest is parsed (up to the
* first blank line). All other sections are ignored. If a header is duplicated
* then only the last value is stored in the map.
* <p>
* The supplied input stream is consumed by this method and will be closed.
* </p>
*
* @param manifest an input stream for a bundle manifest.
* @throws BundleException if the manifest has an invalid syntax
* @throws IOException if an error occurs while reading the manifest
* @return the map with the header/value pairs from the bundle manifest
* @since 3.21
*/
public static Map<String, String> parseBundleManifest(InputStream manifest) throws IOException, BundleException {
Map<String, String> headers = new TreeMap<>(String::compareToIgnoreCase);
parseBundleManifest(manifest, headers);
return headers;
}

/**
* Parses a bundle manifest and puts the header/value pairs into the supplied Map.
* Only the main section of the manifest is parsed (up to the first blank line). All
Expand Down

0 comments on commit a7c0601

Please sign in to comment.