WALA/com.ibm.wala.core/src/com/ibm/wala/util/io/FileSuffixes.java

167 lines
4.6 KiB
Java

/*******************************************************************************
* Copyright (c) 2002 - 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.util.io;
import java.net.URI;
/**
* Some simple utilities used to manipulate Strings
*/
public class FileSuffixes {
private static final String CLASS_SUFFIX = ".class";
private static final String JAR_SUFFIX = ".jar";
private static final String WAR_SUFFIX = ".war";
private static final String DEX_SUFFIX = ".dex";
private static final String APK_SUFFIX = ".apk";
/**
* Does the URI refer to a .dex file?
*
* @param uri
* @return boolean
* @throws IllegalArgumentException if uri is null
*/
public static boolean isDexFile(final URI uri) {
if (uri == null) {
throw new IllegalArgumentException("uri is null");
}
if (uri.toString().startsWith("jar:")) {
try {
final String filePart = uri.toURL().getFile().toLowerCase();
return isDexFile(filePart);
} catch (java.net.MalformedURLException e) {
throw new IllegalArgumentException(e);
}
} else {
assert (uri.getPath() != null);
return isDexFile(uri.getPath());
}
}
/**
* Does the file name represent a .dex file?
*
* @param fileName name of a file
* @return boolean
* @throws IllegalArgumentException if fileName is null
*/
public static boolean isDexFile(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
return fileName.toLowerCase().endsWith(DEX_SUFFIX);
}
/**
* Does the file name represent a .dex file?
*
* @param fileName name of a file
* @return boolean
* @throws IllegalArgumentException if fileName is null
*/
public static boolean isApkFile(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
return fileName.toLowerCase().endsWith(APK_SUFFIX);
}
/**
* Does the file name represent a .class file?
*
* @param fileName name of a file
* @return boolean
* @throws IllegalArgumentException if fileName is null
*/
public static boolean isClassFile(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
return fileName.endsWith(CLASS_SUFFIX);
}
/**
* Does the file name represent a .java file?
*
* @param fileName name of a file
* @return boolean
* @throws IllegalArgumentException if fileName is null
*/
public static boolean isSourceFile(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
return fileName.endsWith(".java");
}
/**
* Does the file name represent a .jar file?
*
* @param fileName name of a file
* @return boolean
* @throws IllegalArgumentException if fileName is null
*/
public static boolean isJarFile(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
return fileName.endsWith(JAR_SUFFIX);
}
/**
* Does the file name represent a .war file?
*
* @param fileName name of a file
* @return boolean
* @throws IllegalArgumentException if fileName is null
*/
public static boolean isWarFile(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
return fileName.endsWith(WAR_SUFFIX);
}
/**
* Strip the ".class" or ".java" suffix from a file name
*
* TODO: generalize for all suffixes
*
* @param fileName the file name
* @throws IllegalArgumentException if fileName is null
*/
public static String stripSuffix(String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("fileName is null");
}
int suffixIndex = fileName.indexOf(CLASS_SUFFIX);
suffixIndex = (suffixIndex > -1) ? suffixIndex : fileName.indexOf(".java");
if (suffixIndex > -1) {
return fileName.substring(0, suffixIndex);
} else {
return fileName;
}
}
/**
* Does the URI point to a ressource in a jar-file
*/
public static boolean isRessourceFromJar(final URI uri) {
return uri.toString().startsWith("jar:"); // How Pretty
}
}