ExternalDependency (ExternalDependency dependency) { ExternalDependency newDep; if (dependency instanceof ExternalProjectDependency) { newDep = new DefaultExternalProjectDependency((ExternalProjectDependency)dependency); } else if (dependency instanceof ExternalLibraryDependency) { newDep = new DefaultExternalLibraryDependency((ExternalLibraryDependency)dependency); } else if (dependency instanceof FileCollectionDependency) { newDep = new DefaultFileCollectionDependency((FileCollectionDependency)dependency); } else if (dependency instanceof UnresolvedExternalDependency) { newDep = new DefaultUnresolvedExternalDependency((UnresolvedExternalDependency)dependency); } else { throw new AssertionError("unknown dependency object which implements: " + Arrays.toString(dependency.getClass().getInterfaces())); } return newDep; }