private String resolveNextVersion()

in maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java [209:300]


    private String resolveNextVersion(
            MavenProject project,
            String projectId,
            ReleaseDescriptor releaseDescriptor,
            ReleaseEnvironment releaseEnvironment)
            throws ReleaseExecutionException {
        String defaultVersion;
        if (convertToBranch) {
            // no branch modification
            if (!(releaseDescriptor.isUpdateBranchVersions()
                    && (ArtifactUtils.isSnapshot(project.getVersion())
                            || releaseDescriptor.isUpdateVersionsToSnapshot()))) {
                return project.getVersion();
            }

            defaultVersion = getReleaseVersion(projectId, releaseDescriptor);
        } else if (!convertToSnapshot) // map-release-version
        {
            defaultVersion = getReleaseVersion(projectId, releaseDescriptor);
        } else if (releaseDescriptor.isBranchCreation()) {
            // no working copy modification
            if (!(ArtifactUtils.isSnapshot(project.getVersion()) && releaseDescriptor.isUpdateWorkingCopyVersions())) {
                return project.getVersion();
            }

            defaultVersion = getDevelopmentVersion(projectId, releaseDescriptor);
        } else {
            // no working copy modification
            if (!(releaseDescriptor.isUpdateWorkingCopyVersions())) {
                return project.getVersion();
            }

            defaultVersion = getDevelopmentVersion(projectId, releaseDescriptor);
        }
        // @todo validate default version, maybe with DefaultArtifactVersion

        String suggestedVersion = null;
        String nextVersion = defaultVersion;
        String messageFormat = null;
        try {
            while (nextVersion == null || ArtifactUtils.isSnapshot(nextVersion) != convertToSnapshot) {
                if (suggestedVersion == null) {
                    String baseVersion = null;
                    if (convertToSnapshot) {
                        baseVersion = getReleaseVersion(projectId, releaseDescriptor);
                    }
                    // unspecified and unmapped version, so use project version
                    if (baseVersion == null) {
                        baseVersion = project.getVersion();
                    }

                    try {
                        try {
                            suggestedVersion =
                                    resolveSuggestedVersion(baseVersion, releaseDescriptor, releaseEnvironment);
                        } catch (VersionParseException e) {
                            if (releaseDescriptor.isInteractive()) {
                                suggestedVersion =
                                        resolveSuggestedVersion("1.0", releaseDescriptor, releaseEnvironment);
                            } else {
                                throw new ReleaseExecutionException(
                                        "Error parsing version, cannot determine next " + "version: " + e.getMessage(),
                                        e);
                            }
                        }
                    } catch (PolicyException | VersionParseException e) {
                        throw new ReleaseExecutionException(e.getMessage(), e);
                    }
                }

                if (releaseDescriptor.isInteractive()) {
                    if (messageFormat == null) {
                        messageFormat = "What is the " + getContextString(releaseDescriptor) + " version for \"%s\"? ("
                                + buffer().project("%s") + ")";
                    }
                    String message = String.format(messageFormat, project.getName(), project.getArtifactId());
                    nextVersion = prompter.prompt(message, suggestedVersion);

                    // @todo validate next version, maybe with DefaultArtifactVersion
                } else if (defaultVersion == null) {
                    nextVersion = suggestedVersion;
                } else if (convertToSnapshot) {
                    throw new ReleaseExecutionException(defaultVersion + " is invalid, expected a snapshot");
                } else {
                    throw new ReleaseExecutionException(defaultVersion + " is invalid, expected a non-snapshot");
                }
            }
        } catch (PrompterException e) {
            throw new ReleaseExecutionException("Error reading version from input handler: " + e.getMessage(), e);
        }
        return nextVersion;
    }