/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.tonicsystems.jarjar.util; import java.io.File; import java.util.regex.Pattern; import javax.annotation.Nonnull; /** * * @author shevek */ public class ClassNameUtils { private static final Pattern ARRAY_FOR_NAME_PATTERN = Pattern.compile("\\[L[\\p{javaJavaIdentifierPart}\\.]+?;"); /** * Returns true if the given string looks like a Java array name. * @param value The name to inspect. * @return true if the given string looks like a Java array name. */ // also used by KeepProcessor public static boolean isArrayForName(String value) { // Type type = Type.getType(value); // type.getSort() == ARRAY; // type.getElementType(); return ARRAY_FOR_NAME_PATTERN.matcher(value).matches(); } // TODO: use this for package remapping too? /** * Returns true if the String looks like a Java type name. * @param value The name to inspect. * @return true if the String looks like a Java type name. */ public static boolean isForName(@Nonnull String value) { if (value.equals("")) return false; for (int i = 0, len = value.length(); i < len; i++) { char c = value.charAt(i); if (c != '.' && !Character.isJavaIdentifierPart(c)) return false; } return true; } @Nonnull public static String javaNameToPath(@Nonnull String className) { return className.replace('.', '/') + ClassNameUtils.EXT_CLASS; } @Nonnull public static String pathToJavaName(@Nonnull String path) { if (isClass(path)) path = path.substring(0, path.length() - EXT_CLASS.length()); return path.replace('/', '.'); } public static final String EXT_CLASS = ".class"; public static boolean isClass(@Nonnull String name) { return hasExtension(name, EXT_CLASS); } public static boolean hasExtension(@Nonnull File file, @Nonnull String ext) { return hasExtension(file.getName(), ext); } public static boolean hasExtension(@Nonnull String name, @Nonnull String ext) { if (name.length() < ext.length()) return false; String actual = name.substring(name.length() - ext.length()); return actual.equalsIgnoreCase(ext); } }