code: func namedTypeJava(javaKind string, solKind abi.Type) string {
  	switch javaKind {
  	case "byte[]":
  		return "Binary"
  	case "byte[][]":
  		return "Binaries"
  	case "string":
  		return "String"
  	case "string[]":
  		return "Strings"
  	case "boolean":
  		return "Bool"
  	case "boolean[]":
  		return "Bools"
  	case "BigInt[]":
  		return "BigInts"
  	default:
  		parts := regexp.MustCompile(`(u)?int([0-9]*)(\[[0-9]*\])?`).FindStringSubmatch(solKind.String())
  		if len(parts) != 4 {
  			return javaKind
  		}
  		switch parts[2] {
  		case "8", "16", "32", "64":
  			if parts[3] == "" {
  				return capitalise(fmt.Sprintf("%sint%s", parts[1], parts[2]))
  			}
  			return capitalise(fmt.Sprintf("%sint%ss", parts[1], parts[2]))
  
  		default:
  			return javaKind
  		}
  	}
  }
docs: // namedTypeJava converts some primitive data types to named variants that can
  // be used as parts of method names.