Inconsistent method naming in LicenseCompareHelper

Đang mở
#392 4 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
35/100
Loại issue
Tái cấu trúc
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
java
Lĩnh vực
backend

Hướng nghiên cứu

Bắt đầu với lớp org.spdx.utility.compare.LicenseCompareHelper và Javadoc của lớp này, sau đó lập danh mục các chữ ký phương thức matching và diff hiện có so với ma trận được đề xuất. Xem lại cách các phương thức hiện tại được sử dụng trước khi xác định tên nhất quán, các ủy quyền tương thích và các deprecation. Công việc được xem là hoàn tất khi scheme đặt tên được triển khai mà không xóa các phương thức cũ trước một major release.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

matching

Problem Statement

I've found that the names of the various different permutations of the matching methods in the org.spdx.utility.compare.LicenseCompareHelper class are pretty confusing, and wonder if a more consistent naming scheme would be valuable?

This is partly fueled by:

  • There is no overall pattern to how the various methods are named, making "at a glance inference of method variations" difficult.
  • There are some missing permutations (e.g. see #391).
  • There are inconsistencies in how exceptions are referred to (some methods use "LicenseException", while others use "Exception").
  • There's conflation of "pure" matching methods (i.e. methods that answer the question "did this text contains one or more licenses / exceptions, and (optionally) if so, which ones?") with the methods that calculate diffs (i.e. methods that answer the question "what, if any, differences exist between this text and a given license / exception?").

It seems to me that the methods in this class fall into a sparse matrix defined by these criteria:

  1. Whether the method operates on licenses, or exceptions
  2. Whether the method performs exact matching of the text, or "finding" within the text
  3. Whether the method considers only one listed license / exception, or multiple listed licenses / exceptions (and in the latter case, whether that's all listed licenses / exceptions, or a subset provided by the caller)
  4. Whether the method returns the first match, or all matches
  5. Whether the method is concerned with "pure" matching, or calculating differences

Coming up with a systematic naming scheme informed by these criteria has substantial value in helping to communicate how the LicenseCompareHelper class can be used for different matching / diffing scenarios.

A Proposed Naming Scheme

Methods that perform exact matching of the entire text:
Method Signature Notes
boolean isLicense(ListedLicense lic, String text)
boolean isException(ListedLicenseException exc, String text)
String isOneOfTheseLicenses(List<ListedLicense> lics, String text) Returns the id of the first listed license in lics that matched, or null if no match was found
String isOneOfTheseExceptions(List<ListedLicenseException> excs, String text) Returns the id of the first listed exception in excs that matched, or null if no match was found
String isAnyLicense(String text) Returns the id of the first listed license that matched, or null if no match was found
String isAnyException(String text) Returns the id of the first listed exception that matched, or null if no match was found
List<String> listAllLicensesMatched(List<ListedLicense> lics, String text) Returns the ids of all of the listed licenses in lics that matched, or null if no match was found. Might not be necessary, as this is a corner case for overlapping matching templates (e.g. GPL).
List<String> listAllExceptionsMatched(List<ListedLicenseException> excs, String text) Returns the ids of all of the listed exceptions in excs that matched, or null if no match was found. Might not be necessary, as this is a corner case for overlapping matching templates (e.g. GPL).
List<String> listAllLicensesMatched(String text) Returns the ids of all of the listed licenses that matched, or null if no match was found. Might not be necessary, as this is a corner case for overlapping matching templates (e.g. GPL).
List<String> listAllExceptionsMatched(String text) Returns the ids of all of the listed exceptions that matched, or null if no match was found. Might not be necessary, as this is a corner case for overlapping matching templates (e.g. GPL).
Methods that perform finds within the text, but only return the first match:
Method Signature Notes
boolean containsLicense(ListedLicense lic, String text)
boolean containsException(ListedLicenseException exc, String text)
String containsOneOfTheseLicenses(List<ListedLicense> lics, String text) Returns the id of the first listed license in lics that matched, or null if no match was found
String containsOneOfTheseExceptions(List<ListedLicenseException> excs, String text) Returns the id of the first listed exception in excs that matched, or null if no match was found
String containsAnyLicense(String text) Returns the id of the first listed license that matched, or null if no match was found
String containsAnyException(String text) Returns the id of the first listed exception that matched, or null if no match was found
Methods that perform finds within the text, and return all matches:
Method Signature Notes
List<String> listAllLicensesFound(List<ListedLicense> lics, String text) Returns the ids of all of the listed licenses in lics that matched, or null if no match was found
List<String> listAllExceptionsFound(List<ListedLicenseException> excs, String text) Returns the ids of all of the listed exceptions in excs that matched, or null if no match was found
List<String> listAllLicensesFound(String text) Returns the ids of all of the listed licenses that matched, or null if no match was found
List<String> listAllExceptionsFound(String text) Returns the ids of all of the listed exceptions that matched, or null if no match was found
Methods that calculate diffs:
Method Signature Notes
CompareTemplateOutputHandler.DifferenceDescription diffLicense(ListedLicense lic, String text)
CompareTemplateOutputHandler.DifferenceDescription diffException(ListedLicenseException exc, String text)

Notes:

  • Many of these methods will share a common implementation - in fact in many cases they can be implemented as simple delegation calls to other methods (sometimes in a loop).
  • Obviously the old method names can't be removed until the next major release of the library, but they could be re-implemented to simply delegate to the new methods, and marked as deprecated before then.
  • I don't believe any of the method signatures listed above conflict with existing method signatures, but haven't done an exhaustive check.
Ngôn ngữ chính
Java
Star
71
Fork
44
Merge trung bình
12 giờ 54 phút
Pull request đã merge (30 ngày)
7

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của spdx/Spdx-Java-Library

Tất cả issue của spdx/Spdx-Java-Library

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.