public static String typeToSignature(Type type) {
		return switch (type) {
			case Class<?> cls -> "L" + classToInternalName(cls) + ";";
			case GenericArrayType arr -> "[" + typeToSignature(arr.getGenericComponentType());
			case ParameterizedType pt -> "L" + rawToInternalName(pt.getRawType()) + "<" +
				Stream.of(pt.getActualTypeArguments())
						.map(a -> typeToSignature(a))
						.collect(Collectors.joining(",")) +
				">;";
			case WildcardType wt -> wildToSignature(wt);
			default -> throw new UnsupportedOperationException();
		};
	}
Get the signature of the given type

<p>
For the use case this supports, probably the best way to obtain a {@link Type} is via
{@link TypeLiteral}.

<p>
As of the JVM 21, internal type signatures are derived as:

<ul>
<li>{@code sig(my.MyType) = Lmy/MyType.class;}</li>
<li>{@code sig(my.MyType[]) = [sig(my.MyType)}</li>
<li>{@code sig(my.MyType<Yet, Another, ...>) = Lmy/MyType<sig(Yet), sig(Another), ...>;}</li>
<li>Wildcard types as in {@link #wildToSignature(WildcardType)}</li>
<li>Type variables are not supported by these utilities</li>
</ul>

@param type the type
@return the signature
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitJvmTypeUtils.java