// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/VcsReference.java
// public class VcsReference extends BaseVcsReference {
// 
//     @Nullable
//     private final String _subPath;
// 
//     public static VcsReference vcsReference(@Nonnull VcsType type, @Nonnull String name, @Nonnull String plainUri, @Nullable String ref, @Nullable String subPath) throws VcsValidationException {
//         return new VcsReference(type, name, plainUri, ref, subPath);
//     }
// 
//     public VcsReference(@Nonnull VcsType type, @Nonnull String id, @Nonnull String plain, @Nullable String ref, @Nullable String subPath) throws VcsValidationException {
//         super(type, id, URI.create(plain), ref, defaultUpdatePolicy());
//         //noinspection ConstantConditions
//         if (type == null) {
//             throw new VcsValidationException("Empty type provided.");
//         }
//         if (isEmpty(plain)) {
//             throw new VcsValidationException("Empty uri provided.");
//         }
//         _subPath = subPath;
//     }
// 
//     public VcsReference(@Nonnull VcsType type, @Nonnull String id, @Nonnull URI uri, @Nullable String ref, @Nonnull UpdatePolicy updatePolicy, @Nullable String subPath) {
//         super(type, id, uri, ref, updatePolicy);
//         //noinspection ConstantConditions
//         if (type == null) {
//             throw new NullPointerException("type is null");
//         }
//         //noinspection ConstantConditions
//         if (uri == null) {
//             throw new NullPointerException("uri is null");
//         }
//         _subPath = subPath;
//     }
// 
//     @Nonnull
//     @Override
//     public VcsType getType() {
//         //noinspection ConstantConditions
//         return super.getType();
//     }
// 
//     @Override
//     @Nonnull
//     public URI getUri() {
//         //noinspection ConstantConditions
//         return super.getUri();
//     }
// 
//     @Nullable
//     public String getSubPath() {
//         return _subPath;
//     }
// }


import org.echocat.gradle.plugins.golang.vcs.VcsReference;
import javax.annotation.Nonnull;
import java.net.URI;
import java.util.Objects;
import java.util.regex.Matcher;
import static java.net.URI.create;
package org.echocat.gradle.plugins.golang.vcs.git;




public class GitVcsUri {

    @Nonnull
// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/VcsReference.java
// public class VcsReference extends BaseVcsReference {
// 
//     @Nullable
//     private final String _subPath;
// 
//     public static VcsReference vcsReference(@Nonnull VcsType type, @Nonnull String name, @Nonnull String plainUri, @Nullable String ref, @Nullable String subPath) throws VcsValidationException {
//         return new VcsReference(type, name, plainUri, ref, subPath);
//     }
// 
//     public VcsReference(@Nonnull VcsType type, @Nonnull String id, @Nonnull String plain, @Nullable String ref, @Nullable String subPath) throws VcsValidationException {
//         super(type, id, URI.create(plain), ref, defaultUpdatePolicy());
//         //noinspection ConstantConditions
//         if (type == null) {
//             throw new VcsValidationException("Empty type provided.");
//         }
//         if (isEmpty(plain)) {
//             throw new VcsValidationException("Empty uri provided.");
//         }
//         _subPath = subPath;
//     }
// 
//     public VcsReference(@Nonnull VcsType type, @Nonnull String id, @Nonnull URI uri, @Nullable String ref, @Nonnull UpdatePolicy updatePolicy, @Nullable String subPath) {
//         super(type, id, uri, ref, updatePolicy);
//         //noinspection ConstantConditions
//         if (type == null) {
//             throw new NullPointerException("type is null");
//         }
//         //noinspection ConstantConditions
//         if (uri == null) {
//             throw new NullPointerException("uri is null");
//         }
//         _subPath = subPath;
//     }
// 
//     @Nonnull
//     @Override
//     public VcsType getType() {
//         //noinspection ConstantConditions
//         return super.getType();
//     }
// 
//     @Override
//     @Nonnull
//     public URI getUri() {
//         //noinspection ConstantConditions
//         return super.getUri();
//     }
// 
//     @Nullable
//     public String getSubPath() {
//         return _subPath;
//     }
// }


// Path: src/main/java/org/echocat/gradle/plugins/golang/vcs/git/GitVcsUri.java
import org.echocat.gradle.plugins.golang.vcs.VcsReference;
import javax.annotation.Nonnull;
import java.net.URI;
import java.util.Objects;
import java.util.regex.Matcher;
import static java.net.URI.create;

package org.echocat.gradle.plugins.golang.vcs.git;




public class GitVcsUri {

    @Nonnull
    public static GitVcsUri gitVcsUriFor(@Nonnull VcsReference reference) {