move several methods to AndroidCommonUtils

This commit is contained in:
Eugene Kudelevsky
2012-02-24 15:42:50 +04:00
parent 449d5ecc8b
commit 35c636ee83
13 changed files with 65 additions and 59 deletions
@@ -11,6 +11,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -37,6 +38,9 @@ public class AndroidCommonUtils {
private static Pattern R_PATTERN = Pattern.compile("R(\\$.*)?\\.class");
public static final Pattern COMPILER_MESSAGE_PATTERN = Pattern.compile("(.+):(\\d+):.+");
public static final String[] FILE_RESOURCE_TYPES = new String[]{"drawable", "anim", "layout", "values", "menu", "xml", "raw", "color"};
@NonNls public static final String PNG_EXTENSION = "png";
private static final String[] DRAWABLE_EXTENSIONS = new String[]{PNG_EXTENSION, "jpg", "gif"};
private AndroidCommonUtils() {
}
@@ -226,4 +230,35 @@ public class AndroidCommonUtils {
bis.close();
}
}
@Nullable
public static String getResourceTypeByDirName(@NotNull String name) {
final int index = name.indexOf('-');
final String type = index >= 0 ? name.substring(0, index) : name;
return ArrayUtil.find(FILE_RESOURCE_TYPES, type) >= 0 ? type : null;
}
@NotNull
public static String getResourceName(@NotNull String resourceType, @NotNull String fileName) {
final String extension = FileUtil.getExtension(fileName);
final String s = FileUtil.getNameWithoutExtension(fileName);
return resourceType.equals("drawable") &&
ArrayUtil.find(DRAWABLE_EXTENSIONS, extension) >= 0 &&
s.endsWith(".9") &&
extension.equals(PNG_EXTENSION)
? s.substring(0, s.length() - 2)
: s;
}
@NotNull
public static String getResourceTypeByTagName(@NotNull String tagName) {
if (tagName.equals("declare-styleable")) {
tagName = "styleable";
}
else if (tagName.endsWith("-array")) {
tagName = "array";
}
return tagName;
}
}
@@ -24,7 +24,7 @@ import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.util.Processor;
import org.jetbrains.android.resourceManagers.LocalResourceManager;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.annotations.NotNull;
/**
@@ -49,7 +49,7 @@ public class AndroidReferenceSearchExecutor extends QueryExecutorBase<PsiReferen
String resType = manager.getFileResourceType((PsiFile)refElement);
if (resType != null) {
String resName = AndroidResourceUtil.getResourceName(resType, vFile.getName());
String resName = AndroidCommonUtils.getResourceName(resType, vFile.getName());
// unless references can be found by a simple CachedBasedRefSearcher
if (!resName.equals(vFile.getNameWithoutExtension()) && StringUtil.isNotEmpty(resName)) {
params.getOptimizer().searchWord(resName, params.getEffectiveSearchScope(), true, refElement);
@@ -46,6 +46,7 @@ import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.resourceManagers.LocalResourceManager;
import org.jetbrains.android.resourceManagers.ResourceManager;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -203,11 +204,11 @@ public class AndroidRenameResourceProcessor extends RenamePsiElementProcessor {
if (type == null) return;
String name = file.getName();
if (AndroidResourceUtil.getResourceName(type, name).equals(AndroidResourceUtil.getResourceName(type, newName))) {
if (AndroidCommonUtils.getResourceName(type, name).equals(AndroidCommonUtils.getResourceName(type, newName))) {
return;
}
List<PsiFile> resourceFiles = manager.findResourceFiles(type, AndroidResourceUtil.getResourceName(type, name));
List<PsiFile> resourceFiles = manager.findResourceFiles(type, AndroidCommonUtils.getResourceName(type, name));
List<PsiFile> alternativeResources = new ArrayList<PsiFile>();
for (PsiFile resourceFile : resourceFiles) {
if (!resourceFile.getManager().areElementsEquivalent(file, resourceFile) && resourceFile.getName().equals(name)) {
@@ -231,7 +232,7 @@ public class AndroidRenameResourceProcessor extends RenamePsiElementProcessor {
}
PsiField[] resFields = AndroidResourceUtil.findResourceFieldsForFileResource(file, false);
for (PsiField resField : resFields) {
String newFieldName = AndroidResourceUtil.getResourceName(type, newName);
String newFieldName = AndroidCommonUtils.getResourceName(type, newName);
allRenames.put(resField, newFieldName);
}
}
@@ -40,6 +40,7 @@ import org.jetbrains.android.dom.resources.ResourceElement;
import org.jetbrains.android.dom.resources.Resources;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.resourceManagers.LocalResourceManager;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
@@ -201,13 +202,13 @@ public class AndroidResourcesLineMarkerProvider implements LineMarkerProvider {
public void run() {
List<VirtualFile> resourceSubdirs = resManager.getResourceSubdirs(null);
for (VirtualFile dir : resourceSubdirs) {
String resType = AndroidResourceUtil.getResourceTypeByDirName(dir.getName());
String resType = AndroidCommonUtils.getResourceTypeByDirName(dir.getName());
if (resType != null) {
for (VirtualFile resourceFile : dir.getChildren()) {
if (!resourceFile.isDirectory()) {
PsiFile resourcePsiFile = psiManager.findFile(resourceFile);
if (resourcePsiFile != null) {
String resName = AndroidResourceUtil.getResourceName(resType, resourceFile.getName());
String resName = AndroidCommonUtils.getResourceName(resType, resourceFile.getName());
MyResourceEntry key = new MyResourceEntry(resName, resType);
List<PsiElement> list = result.get(key);
if (list == null) {
@@ -36,6 +36,7 @@ import gnu.trove.THashMap;
import org.jetbrains.android.dom.manifest.Manifest;
import org.jetbrains.android.dom.manifest.ManifestDomFileDescription;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -109,7 +110,7 @@ public class AndroidXmlSchemaProvider extends XmlSchemaProvider {
return false;
}
final String resType = AndroidResourceUtil.getResourceTypeByDirName(parent.getName());
final String resType = AndroidCommonUtils.getResourceTypeByDirName(parent.getName());
if (resType == null) {
return false;
}
@@ -24,6 +24,7 @@ import org.jetbrains.android.sdk.AndroidSdkUtils;
import org.jetbrains.android.uipreview.DeviceConfiguratorPanel;
import org.jetbrains.android.uipreview.InvalidOptionValueException;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
@@ -142,7 +143,7 @@ public class CreateXmlResourceDialog extends DialogWrapper {
return new ValidationInfo("specify module", myModuleCombo);
}
else if (!ResourceFolderType.VALUES.getName().equals(
AndroidResourceUtil.getResourceTypeByDirName(directoryName))) {
AndroidCommonUtils.getResourceTypeByDirName(directoryName))) {
return new ValidationInfo("directory name is not appropriate for value resources");
}
@@ -16,7 +16,7 @@ import org.jetbrains.android.compiler.tools.AndroidApt;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.sdk.AndroidPlatform;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -218,7 +218,7 @@ public class AndroidPngFilesCachingCompiler implements SourceGeneratingCompiler
collectPngFiles(child, visited);
}
}
else if (AndroidUtils.PNG_EXTENSION.equals(file.getExtension())) {
else if (AndroidCommonUtils.PNG_EXTENSION.equals(file.getExtension())) {
myTimestamps.put(file.getPath(), file.getTimeStamp());
}
}
@@ -32,6 +32,7 @@ import org.jetbrains.android.dom.wrappers.FileResourceElementWrapper;
import org.jetbrains.android.dom.wrappers.ValueResourceElementWrapper;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.resourceManagers.ResourceManager;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.annotations.NotNull;
@@ -86,7 +87,7 @@ public class AndroidResourceReference extends PsiReferenceBase.Poly<XmlElement>
String resType = value.getResourceType();
if (resType != null && newElementName != null) {
myValue.setValue(ResourceValue.referenceTo(value.getPrefix(), value.getPackage(), resType,
AndroidResourceUtil.getResourceName(resType, newElementName)));
AndroidCommonUtils.getResourceName(resType, newElementName)));
}
return myValue.getXmlTag();
}
@@ -41,6 +41,7 @@ import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.resourceManagers.LocalResourceManager;
import org.jetbrains.android.resourceManagers.ResourceManager;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -172,7 +173,7 @@ public class ResourceReferenceConverter extends ResolvingConverter<ResourceValue
final LocalResourceManager manager = facet.getLocalResourceManager();
for (VirtualFile resSubdir : manager.getResourceSubdirs(null)) {
final String resType = AndroidResourceUtil.getResourceTypeByDirName(resSubdir.getName());
final String resType = AndroidCommonUtils.getResourceTypeByDirName(resSubdir.getName());
if (resType != null && com.android.resources.ResourceType.getEnum(resType) != null) {
result.add(resType);
@@ -33,7 +33,7 @@ import org.jetbrains.android.compiler.AndroidCompileUtil;
import org.jetbrains.android.dom.manifest.Manifest;
import org.jetbrains.android.fileTypes.AndroidIdlFileType;
import org.jetbrains.android.fileTypes.AndroidRenderscriptFileType;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.android.util.ResourceEntry;
import org.jetbrains.annotations.NotNull;
@@ -203,7 +203,7 @@ class AndroidResourceFilesListener extends VirtualFileAdapter {
final VirtualFile resourceDir = AndroidRootUtil.getResourceDir(myFacet);
if (gp == resourceDir &&
ResourceFolderType.VALUES.getName().equals(AndroidResourceUtil.getResourceTypeByDirName(parent.getName()))) {
ResourceFolderType.VALUES.getName().equals(AndroidCommonUtils.getResourceTypeByDirName(parent.getName()))) {
myFacet.getLocalResourceManager().invalidateAttributeDefinitions();
}
@@ -38,6 +38,7 @@ import org.jetbrains.android.dom.attrs.AttributeDefinitions;
import org.jetbrains.android.dom.resources.ResourceElement;
import org.jetbrains.android.dom.resources.Resources;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.android.util.AndroidResourceUtil;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.android.util.ResourceEntry;
@@ -102,7 +103,7 @@ public abstract class ResourceManager {
for (final VirtualFile resFile : dir.getChildren()) {
String extension = resFile.getExtension();
if (extensions.length == 0 || extensionSet.contains(extension)) {
String s = AndroidResourceUtil.getResourceName(resType, resFile.getName());
String s = AndroidCommonUtils.getResourceName(resType, resFile.getName());
if (resName == null || AndroidUtils.equal(resName, s, distinguishDelimetersInName)) {
PsiFile file = ApplicationManager.getApplication().runReadAction(new Computable<PsiFile>() {
@Nullable
@@ -197,7 +198,7 @@ public abstract class ResourceManager {
if (possibleResDir == null || !isResourceDir(possibleResDir.getVirtualFile())) {
return null;
}
String type = AndroidResourceUtil.getResourceTypeByDirName(dir.getName());
String type = AndroidCommonUtils.getResourceTypeByDirName(dir.getName());
if (type == null) return null;
return type;
}
@@ -211,7 +212,7 @@ public abstract class ResourceManager {
for (VirtualFile dir : dirs) {
for (VirtualFile resourceFile : dir.getChildren()) {
if (resourceFile.isDirectory()) continue;
result.add(AndroidResourceUtil.getResourceName(resourceType, resourceFile.getName()));
result.add(AndroidCommonUtils.getResourceName(resourceType, resourceFile.getName()));
}
}
return result;
@@ -23,7 +23,6 @@ import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModulePackageIndex;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
@@ -57,12 +56,10 @@ public class AndroidResourceUtil {
public static final String NEW_ID_PREFIX = "@+id/";
public static final String[] VALUE_RESOURCE_TYPES =
new String[]{"drawable", "dimen", "color", "string", "style", "array", "id", "bool", "integer", "integer-array"};
private static final String[] DRAWABLE_EXTENSIONS = new String[]{AndroidUtils.PNG_EXTENSION, "jpg", "gif"};
public static final Set<String> REFERABLE_RESOURCE_TYPES = new HashSet<String>();
public static final String[] FILE_RESOURCE_TYPES = new String[]{"drawable", "anim", "layout", "values", "menu", "xml", "raw", "color"};
static {
addAll(REFERABLE_RESOURCE_TYPES, FILE_RESOURCE_TYPES);
addAll(REFERABLE_RESOURCE_TYPES, AndroidCommonUtils.FILE_RESOURCE_TYPES);
addAll(REFERABLE_RESOURCE_TYPES, VALUE_RESOURCE_TYPES);
REFERABLE_RESOURCE_TYPES.remove("values");
}
@@ -194,7 +191,7 @@ public class AndroidResourceUtil {
return PsiField.EMPTY_ARRAY;
}
final String resourceName = getResourceName(resourceType, file.getName());
final String resourceName = AndroidCommonUtils.getResourceName(resourceType, file.getName());
return findResourceFields(facet, resourceType, resourceName, onlyInOwnPackages);
}
@@ -253,7 +250,7 @@ public class AndroidResourceUtil {
String resClassName = tag.getName();
resClassName = resClassName.equals("item")
? tag.getAttributeValue("type", null)
: getResourceTypeByTagName(resClassName);
: AndroidCommonUtils.getResourceTypeByTagName(resClassName);
if (resClassName != null) {
final String resourceName = tag.getAttributeValue("name");
return resourceName != null ? resClassName : null;
@@ -261,17 +258,6 @@ public class AndroidResourceUtil {
return null;
}
@NotNull
public static String getResourceTypeByTagName(@NotNull String tagName) {
if (tagName.equals("declare-styleable")) {
tagName = "styleable";
}
else if (tagName.endsWith("-array")) {
tagName = "array";
}
return tagName;
}
@Nullable
public static String getResourceClassName(@NotNull PsiField field) {
final PsiClass resourceClass = field.getContainingClass();
@@ -395,16 +381,9 @@ public class AndroidResourceUtil {
throw new IllegalArgumentException("Incorrect resource type");
}
@Nullable
public static String getResourceTypeByDirName(@NotNull String name) {
final int index = name.indexOf('-');
final String type = index >= 0 ? name.substring(0, index) : name;
return ArrayUtil.find(FILE_RESOURCE_TYPES, type) >= 0 ? type : null;
}
@NotNull
public static List<VirtualFile> getResourceSubdirs(@Nullable String resourceType, @NotNull VirtualFile[] resourceDirs) {
if (ArrayUtil.find(FILE_RESOURCE_TYPES, resourceType) < 0 && resourceType != null) {
if (ArrayUtil.find(AndroidCommonUtils.FILE_RESOURCE_TYPES, resourceType) < 0 && resourceType != null) {
return Collections.emptyList();
}
final List<VirtualFile> dirs = new ArrayList<VirtualFile>();
@@ -418,7 +397,7 @@ public class AndroidResourceUtil {
}
else {
for (VirtualFile child : resourcesDir.getChildren()) {
String type = getResourceTypeByDirName(child.getName());
String type = AndroidCommonUtils.getResourceTypeByDirName(child.getName());
if (resourceType.equals(type)) dirs.add(child);
}
}
@@ -434,19 +413,6 @@ public class AndroidResourceUtil {
return resourceType + "s.xml";
}
@NotNull
public static String getResourceName(@NotNull String resourceType, @NotNull String fileName) {
final String extension = FileUtil.getExtension(fileName);
final String s = FileUtil.getNameWithoutExtension(fileName);
return resourceType.equals("drawable") &&
ArrayUtil.find(DRAWABLE_EXTENSIONS, extension) >= 0 &&
s.endsWith(".9") &&
extension.equals(AndroidUtils.PNG_EXTENSION)
? s.substring(0, s.length() - 2)
: s;
}
@NotNull
public static List<ResourceElement> getValueResourcesFromElement(@NotNull String resourceType, @NotNull Resources resources) {
final List<ResourceElement> result = new ArrayList<ResourceElement>();
@@ -126,8 +126,6 @@ public class AndroidUtils {
@NonNls public static final String ANDROID_TARGET_PROPERTY = "target";
@NonNls public static final String ANDROID_LIBRARY_REFERENCE_PROPERTY_PREFIX = "android.library.reference.";
@NonNls public static final String PNG_EXTENSION = "png";
private AndroidUtils() {
}