@Override
  public String getNextClassName(String fullName, String shortName) {
    if (shortName == null) {
      return "class_" + (classCounter++);
    }

    int index = 0;
    while (index < shortName.length() && Character.isDigit(shortName.charAt(index))) {
      index++;
    }

    if (index == 0 || index == shortName.length()) {
      return "class_" + (classCounter++);
    }
    else {
      String name = shortName.substring(index);
      if (setNonStandardClassNames.contains(name)) {
        return "Inner" + name + "_" + (classCounter++);
      }
      else {
        setNonStandardClassNames.add(name);
        return "Inner" + name;
      }
    }
  }
Return {@code true} if, and only if identifier passed is compliant to JLS9 section 3.8 AND DOES NOT CONTAINS so-called "ignorable" characters.
Ignorable characters are removed by javac silently during compilation and thus may appear only in specially crafted obfuscated classes.
For more information about "ignorable" characters see <a href="https://bugs.openjdk.java.net/browse/JDK-7144981">JDK-7144981</a>.

@param identifier Identifier to be checked
@return {@code true} in case {@code identifier} passed can be used as an identifier; {@code false} otherwise.
src/org/jetbrains/java/decompiler/modules/renamer/ConverterHelper.java