From 974353af99ba6a7b7df91f115102321d5a49b658 Mon Sep 17 00:00:00 2001 From: Gary O'Neall Date: Mon, 8 Mar 2021 20:48:41 -0800 Subject: [PATCH 1/3] Compare listed licenses by IDs only Signed-off-by: Gary O'Neall --- src/main/java/org/spdx/library/model/ModelObject.java | 4 ++++ .../library/model/license/LicenseExpressionParserTest.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/org/spdx/library/model/ModelObject.java b/src/main/java/org/spdx/library/model/ModelObject.java index 90b7cf8dd..d67f79a76 100644 --- a/src/main/java/org/spdx/library/model/ModelObject.java +++ b/src/main/java/org/spdx/library/model/ModelObject.java @@ -42,6 +42,7 @@ import org.spdx.library.model.license.CrossRef.CrossRefBuilder; import org.spdx.library.model.license.DisjunctiveLicenseSet; import org.spdx.library.model.license.ListedLicenses; +import org.spdx.library.model.license.SpdxListedLicense; import org.spdx.library.model.license.SpdxNoAssertionLicense; import org.spdx.library.model.license.SpdxNoneLicense; import org.spdx.library.model.pointer.ByteOffsetPointer; @@ -702,6 +703,9 @@ public boolean equivalent(ModelObject compare, boolean ignoreRelatedElements) th if (!this.getClass().equals(compare.getClass())) { return false; } + if (this.getClass().equals(SpdxListedLicense.class)) { + return this.getId().equals(compare.getId()); // Listed licenses always equal if their ID's equal + } List propertyValueNames = getPropertyValueNames(); List comparePropertyValueNames = new ArrayList(compare.getPropertyValueNames()); // create a copy since we're going to modify it for (String propertyName:propertyValueNames) { diff --git a/src/test/java/org/spdx/library/model/license/LicenseExpressionParserTest.java b/src/test/java/org/spdx/library/model/license/LicenseExpressionParserTest.java index bbc1ed77f..6ac4a4041 100644 --- a/src/test/java/org/spdx/library/model/license/LicenseExpressionParserTest.java +++ b/src/test/java/org/spdx/library/model/license/LicenseExpressionParserTest.java @@ -207,4 +207,9 @@ public void testExternalLicenseRef() throws InvalidSPDXAnalysisException { assertTrue(result instanceof ExternalExtractedLicenseInfo); assertEquals(externalExtractedId, ((ExternalExtractedLicenseInfo)result).getId()); } + + public void regressionMitWith() throws InvalidSPDXAnalysisException, InvalidLicenseStringException { + AnyLicenseInfo result = LicenseInfoFactory.parseSPDXLicenseString("MIT WITH Autoconf-exception-2.0"); + assertEquals("MIT WITH Autoconf-exception-2.0",result.toString()); + } } From e4613af7bd307336fa0f754b3920314fc3b84170 Mon Sep 17 00:00:00 2001 From: Gary O'Neall Date: Tue, 9 Mar 2021 08:57:15 -0800 Subject: [PATCH 2/3] Change fix for compare to override the equiv method in the subclasses - better design Signed-off-by: Gary O'Neall --- src/main/java/org/spdx/library/model/ModelObject.java | 3 --- .../java/org/spdx/library/model/license/License.java | 4 ++-- .../library/model/license/ListedLicenseException.java | 10 ++++++++++ .../spdx/library/model/license/SpdxListedLicense.java | 4 ++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/spdx/library/model/ModelObject.java b/src/main/java/org/spdx/library/model/ModelObject.java index d67f79a76..ff7bec999 100644 --- a/src/main/java/org/spdx/library/model/ModelObject.java +++ b/src/main/java/org/spdx/library/model/ModelObject.java @@ -703,9 +703,6 @@ public boolean equivalent(ModelObject compare, boolean ignoreRelatedElements) th if (!this.getClass().equals(compare.getClass())) { return false; } - if (this.getClass().equals(SpdxListedLicense.class)) { - return this.getId().equals(compare.getId()); // Listed licenses always equal if their ID's equal - } List propertyValueNames = getPropertyValueNames(); List comparePropertyValueNames = new ArrayList(compare.getPropertyValueNames()); // create a copy since we're going to modify it for (String propertyName:propertyValueNames) { diff --git a/src/main/java/org/spdx/library/model/license/License.java b/src/main/java/org/spdx/library/model/license/License.java index 3ac79ee69..f9e5433d7 100644 --- a/src/main/java/org/spdx/library/model/license/License.java +++ b/src/main/java/org/spdx/library/model/license/License.java @@ -318,11 +318,11 @@ public ModelUpdate updateSetDeprecated(Boolean deprecated) throws InvalidSPDXAna } @Override - public boolean equivalent(ModelObject compare) throws InvalidSPDXAnalysisException { + public boolean equivalent(ModelObject compare, boolean ignoreExternalReferences) throws InvalidSPDXAnalysisException { if (compare instanceof License) { return LicenseCompareHelper.isLicenseTextEquivalent(this.getLicenseText(), ((License)compare).getLicenseText()); } else { - return super.equivalent(compare); + return super.equivalent(compare, ignoreExternalReferences); } } } diff --git a/src/main/java/org/spdx/library/model/license/ListedLicenseException.java b/src/main/java/org/spdx/library/model/license/ListedLicenseException.java index 83c2eab23..3d5f2385a 100644 --- a/src/main/java/org/spdx/library/model/license/ListedLicenseException.java +++ b/src/main/java/org/spdx/library/model/license/ListedLicenseException.java @@ -23,6 +23,7 @@ import org.spdx.library.InvalidSPDXAnalysisException; import org.spdx.library.ModelCopyManager; import org.spdx.library.SpdxConstants; +import org.spdx.library.model.ModelObject; import org.spdx.licenseTemplate.LicenseTemplateRuleException; import org.spdx.licenseTemplate.SpdxLicenseTemplateHelper; import org.spdx.storage.IModelStore; @@ -119,5 +120,14 @@ public String getExceptionTextHtml() throws InvalidSPDXAnalysisException { } } } + + @Override + public boolean equivalent(ModelObject compare, boolean ignoreRelatedElements) throws InvalidSPDXAnalysisException { + if (compare instanceof ListedLicenseException) { + return this.getId().equals(((ListedLicenseException)compare).getId()); // for listed license, the license ID is the only thing that matters + } else { + return super.equivalent(compare, ignoreRelatedElements); + } + } } diff --git a/src/main/java/org/spdx/library/model/license/SpdxListedLicense.java b/src/main/java/org/spdx/library/model/license/SpdxListedLicense.java index 883895db1..1c056cef6 100644 --- a/src/main/java/org/spdx/library/model/license/SpdxListedLicense.java +++ b/src/main/java/org/spdx/library/model/license/SpdxListedLicense.java @@ -212,11 +212,11 @@ public String getType() { } @Override - public boolean equivalent(ModelObject compare) throws InvalidSPDXAnalysisException { + public boolean equivalent(ModelObject compare, boolean ignoreRelatedElements) throws InvalidSPDXAnalysisException { if (compare instanceof SpdxListedLicense) { return this.getLicenseId().equals(((SpdxListedLicense)compare).getLicenseId()); // for listed license, the license ID is the only thing that matters } else { - return super.equivalent(compare); + return super.equivalent(compare, ignoreRelatedElements); } } From 60a7875f341b2424a5bd70a1f2e991f3d5afa7f9 Mon Sep 17 00:00:00 2001 From: Gary O'Neall Date: Tue, 9 Mar 2021 10:07:44 -0800 Subject: [PATCH 3/3] Remove unused import Signed-off-by: Gary O'Neall --- src/main/java/org/spdx/library/model/ModelObject.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/spdx/library/model/ModelObject.java b/src/main/java/org/spdx/library/model/ModelObject.java index ff7bec999..90b7cf8dd 100644 --- a/src/main/java/org/spdx/library/model/ModelObject.java +++ b/src/main/java/org/spdx/library/model/ModelObject.java @@ -42,7 +42,6 @@ import org.spdx.library.model.license.CrossRef.CrossRefBuilder; import org.spdx.library.model.license.DisjunctiveLicenseSet; import org.spdx.library.model.license.ListedLicenses; -import org.spdx.library.model.license.SpdxListedLicense; import org.spdx.library.model.license.SpdxNoAssertionLicense; import org.spdx.library.model.license.SpdxNoneLicense; import org.spdx.library.model.pointer.ByteOffsetPointer;