public static DataType getPointerType(String descriptor, DataTypeManager dtManager) {
		int lastBracket = descriptor.lastIndexOf("[");
		String baseTypeOfArray = descriptor.substring(lastBracket + 1, lastBracket + 2);
		DataType baseType = null;
		switch (baseTypeOfArray.charAt(0)) {
			case BASE_TYPE_BYTE:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_BYTE, dtManager);
				break;
			case BASE_TYPE_BOOLEAN:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_BOOLEAN, dtManager);
				break;
			case BASE_TYPE_CHAR:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_CHAR, dtManager);
				break;
			case BASE_TYPE_DOUBLE:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_DOUBLE, dtManager);
				break;
			case BASE_TYPE_FLOAT:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_FLOAT, dtManager);
				break;
			case BASE_TYPE_INT:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_INT, dtManager);
				break;
			case BASE_TYPE_LONG:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_LONG, dtManager);
				break;
			case BASE_TYPE_SHORT:
				baseType = ArrayMethods.getArrayBaseType(JavaClassConstants.T_SHORT, dtManager);
				break;
			case BASE_TYPE_REFERENCE:
				return dtManager.getPointer(DWordDataType.dataType);

			default:
				throw new IllegalArgumentException(
					"Invalid array base type category: " + baseTypeOfArray);
		}
		return dtManager.getPointer(baseType);
	}
Returns the data type of a pointer to the type represented by descriptor
@param descriptor description of base type
@param dtManager data type manager of program
@return pointer data type
Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/DescriptorDecoder.java