DataflowDependencyManager#getProjectMajorVersion() is expensive
DataflowDependencyManager#getProjectMajorVersion(IProject) is used to detect the Dataflow API major version (1.x, 2.x, or 3.x) required by a project. The implementation retrieves the version(s) of the com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all dependency from the project's Maven pom.xml, which returns a version range.
public MajorVersion getProjectMajorVersion(IProject project) {
VersionRange projectVersionRange = getActualDataflowVersionRange(project);
if (projectVersionRange == null) {
return null;
}
if (projectVersionRange.getRecommendedVersion() != null) {
return MajorVersion.fromVersion(projectVersionRange.getRecommendedVersion());
} else {
ArtifactVersion dataflowVersion = getLatestDataflowDependencyInRange(projectVersionRange);
return MajorVersion.fromVersion(dataflowVersion);
}
}
If there is no recommended version range, then getLatestDataflowDependencyInRange() is called which does a network fetch, which can be fairly expensive.
We should be able to avoid this network fetch for our usual cases, where the Dataflow dependency is either a fixed version like 2.1.0 (as per the Dataflow 2.x project generator) or a known version range like [1.0.0,1.99) (as per the Dataflow 1.x project generator).