ShapeId implements ToShapeId, Comparable<ShapeId> { public static ShapeId from(String id) { return FACTORY.create(id); } private  ShapeId(String absoluteName, String namespace, String name, String member); private  ShapeId(String namespace, String name, String member); static ShapeId from(String id); static boolean isValidNamespace(CharSequence namespace); static boolean isValidIdentifier(CharSequence identifier); static ShapeId fromParts(String namespace, String name, String member); static ShapeId fromParts(String namespace, String name); static ShapeId fromRelative(String namespace, String relativeName); static ShapeId fromOptionalNamespace(String defaultNamespace, String shapeName); ShapeId withMember(String member); @Override ShapeId toShapeId(); @Override int compareTo(ShapeId other); ShapeId withoutMember(); String getNamespace(); String getName(); Optional<String> getMember(); String asRelativeReference(); ShapeId withNamespace(String namespace); @Override String toString(); @Override boolean equals(Object other); @Override int hashCode();  }
@Test public void fromAbsoluteWithoutName() { Assertions.assertThrows(IllegalArgumentException.class, () -> ShapeId.from("name.space#")); }
@Test public void fromAbsoluteWithoutNamespace() { Assertions.assertThrows(IllegalArgumentException.class, () -> ShapeId.from("Name$member")); }
@Test public void fromAbsoluteWithDoubleNamespace() { Assertions.assertThrows(IllegalArgumentException.class, () -> ShapeId.from("ns.foo#bar#Name")); }