Add comment explaining lazy declared versions
A recent change moved computing declared versions from using reflection
which occurred repeatedly to a lazily-initialized holder so that
declared versions are computed exactly once. This commit adds a comment
explaining the motivation for this change.
@@ -156,10 +156,6 @@ public class Version implements Comparable<Version> {
+ org.apache.lucene.util.Version.LATEST + "] is still set to [" + CURRENT.luceneVersion + "]";
}
- private static class DeclaredVersionsHolder {
- static final List<Version> DECLARED_VERSIONS = Collections.unmodifiableList(getDeclaredVersions(Version.class));
- }
-
public static Version readVersion(StreamInput in) throws IOException {
return fromId(in.readVInt());
}
@@ -397,6 +393,15 @@ public class Version implements Comparable<Version> {
return Integer.compare(this.id, other.id);
}
+ /*
+ * We need the declared versions when computing the minimum compatibility version. As computing the declared versions uses reflection it
+ * is not cheap. Since computing the minimum compatibility version can occur often, we use this holder to compute the declared versions
+ * lazily once.
+ */
+ private static class DeclaredVersionsHolder {
+ static final List<Version> DECLARED_VERSIONS = Collections.unmodifiableList(getDeclaredVersions(Version.class));
+ }
+
/**
* Returns the minimum compatible version based on the current
* version. Ie a node needs to have at least the return version in order
