Open laeubi opened 2 months ago
This is how it looks for example before the filtering:
=== remove uses violations for Import-Package: com.google.gson; version="[2.9.0,3.0.0)"
== current candidate is Export-Package: com.google.gson; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; uses:="com.google.gson.internal,com.google.gson.reflect,com.google.gson.stream"
[?]com.google.gson 2.9.1.v20220915-1632 (UNRESOLVED)
[!]Import-Package: com.google.gson; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; uses:="com.google.gson.internal,com.google.gson.reflect,com.google.gson.stream"
[?]Import-Package: com.google.gson.annotations; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.annotations; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"
Export-Package: com.google.gson.annotations; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"
[?]Import-Package: com.google.gson.internal; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.reflect,com.google.gson.stream"
Export-Package: com.google.gson.internal; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:=" com.google.gson, com.google.gson.reflect, com.google.gson.stream "
[?]Import-Package: com.google.gson.internal.bind; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.bind; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.internal,com.google.gson.reflect,com.google.gson.stream"
Export-Package: com.google.gson.internal.bind; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:=" com.google.gson, com.google.gson.internal, com.google.gson.reflect, com.google.gson.stream "
[?]Import-Package: com.google.gson.internal.bind.util; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.bind.util; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"
Export-Package: com.google.gson.internal.bind.util; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"
[?]Import-Package: com.google.gson.internal.reflect; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson"
Export-Package: com.google.gson.internal.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:="com.google.gson"
[?]Import-Package: com.google.gson.internal.sql; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.sql; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.internal.bind"
Export-Package: com.google.gson.internal.sql; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.internal.bind"
[?]Import-Package: com.google.gson.reflect; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"
Export-Package: com.google.gson.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"
[?]Import-Package: com.google.gson.stream; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.stream; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"
Export-Package: com.google.gson.stream; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"
[!]Import-Package: sun.misc; resolution:="optional":
Export-Package: sun.misc; bundle-symbolic-name="org.eclipse.osgi"; bundle-version="3.18.500.v20230801-1826"; version="0.0.0"
[!]Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))":
Provide-Capability: osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0.0,1.1.0,1.2.0,1.3.0,1.4.0,1.5.0,1.6.0,1.7.0,1.8.0,9.0.0,10.0.0,11.0.0,12.0.0,13.0.0,14.0.0,15.0.0,16.0.0,17.0.0"
[!]Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))":
Provide-Capability: osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0.0,1.1.0,1.2.0,1.3.0,1.4.0,1.5.0,1.6.0,1.7.0,1.8.0,9.0.0,10.0.0,11.0.0,12.0.0,13.0.0,14.0.0,15.0.0,16.0.0,17.0.0"
as one can see the provider chosen for com.google.gson
makes it only possible for some other packages to choose the same provider due to its uses constraints what are the following (transitively):
uses: com.google.gson
uses: com.google.gson.internal
uses: com.google.gson.reflect
uses: com.google.gson.stream
this then results in the following filtered candidate set:
[?]com.google.gson 2.9.1.v20220915-1632 (UNRESOLVED)
[!]Import-Package: com.google.gson; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; uses:="com.google.gson.internal,com.google.gson.reflect,com.google.gson.stream"
[?]Import-Package: com.google.gson.annotations; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.annotations; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"
Export-Package: com.google.gson.annotations; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"
[!]Import-Package: com.google.gson.internal; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:=" com.google.gson, com.google.gson.reflect, com.google.gson.stream "
[?]Import-Package: com.google.gson.internal.bind; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.bind; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.internal,com.google.gson.reflect,com.google.gson.stream"
Export-Package: com.google.gson.internal.bind; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:=" com.google.gson, com.google.gson.internal, com.google.gson.reflect, com.google.gson.stream "
[?]Import-Package: com.google.gson.internal.bind.util; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.bind.util; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"
Export-Package: com.google.gson.internal.bind.util; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"
[?]Import-Package: com.google.gson.internal.reflect; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson"
Export-Package: com.google.gson.internal.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:="com.google.gson"
[?]Import-Package: com.google.gson.internal.sql; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.internal.sql; bundle-symbolic-name="com.google.gson"; bundle-version="2.10.1.v20230109-0753"; version="2.10.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.internal.bind"
Export-Package: com.google.gson.internal.sql; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"; x-internal:="true"; uses:="com.google.gson,com.google.gson.internal.bind"
[!]Import-Package: com.google.gson.reflect; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.reflect; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"
[!]Import-Package: com.google.gson.stream; version="[2.9.0,3.0.0)":
Export-Package: com.google.gson.stream; bundle-symbolic-name="com.google.gson"; bundle-version="2.9.1.v20220915-1632"; version="2.9.1"
[!]Import-Package: sun.misc; resolution:="optional":
Export-Package: sun.misc; bundle-symbolic-name="org.eclipse.osgi"; bundle-version="3.18.500.v20230801-1826"; version="0.0.0"
[!]Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))":
Provide-Capability: osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0.0,1.1.0,1.2.0,1.3.0,1.4.0,1.5.0,1.6.0,1.7.0,1.8.0,9.0.0,10.0.0,11.0.0,12.0.0,13.0.0,14.0.0,15.0.0,16.0.0,17.0.0"
[!]Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))":
Provide-Capability: osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0.0,1.1.0,1.2.0,1.3.0,1.4.0,1.5.0,1.6.0,1.7.0,1.8.0,9.0.0,10.0.0,11.0.0,12.0.0,13.0.0,14.0.0,15.0.0,16.0.0,17.0.0"
660 files ±0 660 suites ±0 1h 12m 49s :stopwatch: +27s 2 195 tests ±0 2 148 :white_check_mark: ±0 47 :zzz: ±0 0 :x: ±0 6 729 runs ±0 6 586 :white_check_mark: ±0 143 :zzz: ±0 0 :x: ±0
Results for commit 7ddbc243. ± Comparison against base commit c8ce7365.
:recycle: This comment has been updated with latest results.
I now added a system property to disable the feature just in case it causes problems somewhere.
Rebased and build is now green again!
@tjwatson I have now reworked this to pass the debugging through the logger, that way we can reuse Equinox formatting and it can be enabled/disabled by the usual debugging properties and makes the using code much cleaner.
If a provider is chosen for a given requirement this can imply that also other providers are now become invalid, currently the resolver simply checks the whole state and adds new permutations what is rather expensive.
This now adds an additional local filtering step that checks for the chosen provider for the requirement and discards any incompatible provider for other packages in the same resource.
As a result for a small testcase this saves 3 out of 23 (~ 10%) uses permutations.