diff options
4 files changed, 76 insertions, 15 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceType.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceType.java index f09719c..4555913 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceType.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ResourceType.java @@ -23,17 +23,25 @@ public enum ResourceType { ANIM("anim", "Animation"), //$NON-NLS-1$ ARRAY("array", "Array", "string-array", "integer-array"), //$NON-NLS-1$ //$NON-NLS-3$ //$NON-NLS-4$ ATTR("attr", "Attr"), //$NON-NLS-1$ + BOOL("bool", "Boolean"), //$NON-NLS-1$ COLOR("color", "Color"), //$NON-NLS-1$ + DECLARE_STYLEABLE("declare-styleable", "Declare Stylable"), //$NON-NLS-1$ DIMEN("dimen", "Dimension"), //$NON-NLS-1$ DRAWABLE("drawable", "Drawable"), //$NON-NLS-1$ + FRACTION("fraction", "Fraction"), //$NON-NLS-1$ ID("id", "ID"), //$NON-NLS-1$ + INTEGER("integer", "Integer"), //$NON-NLS-1$ LAYOUT("layout", "Layout"), //$NON-NLS-1$ MENU("menu", "Menu"), //$NON-NLS-1$ + PLURALS("plurals", "Plurals"), //$NON-NLS-1$ RAW("raw", "Raw"), //$NON-NLS-1$ STRING("string", "String"), //$NON-NLS-1$ STYLE("style", "Style"), //$NON-NLS-1$ STYLEABLE("styleable", "Styleable"), //$NON-NLS-1$ - XML("xml", "XML"); //$NON-NLS-1$ + XML("xml", "XML"), //$NON-NLS-1$ + // this is not actually used. Only there because they get parsed and since we want to + // detect new resource type, we need to have this one exist. + PUBLIC("public", "###"); //$NON-NLS-1$ //$NON-NLS-2$ private final String mName; private final String mDisplayName; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java index 4b45f6e..c96182d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationship.java @@ -28,39 +28,48 @@ import java.util.Set; * {@link ResourceFolderType}. */ public final class FolderTypeRelationship { - + private final static HashMap<ResourceType, ResourceFolderType[]> mTypeToFolderMap = new HashMap<ResourceType, ResourceFolderType[]>(); - + private final static HashMap<ResourceFolderType, ResourceType[]> mFolderToTypeMap = new HashMap<ResourceFolderType, ResourceType[]>(); - + // generate the relationships. static { HashMap<ResourceType, List<ResourceFolderType>> typeToFolderMap = new HashMap<ResourceType, List<ResourceFolderType>>(); - + HashMap<ResourceFolderType, List<ResourceType>> folderToTypeMap = new HashMap<ResourceFolderType, List<ResourceType>>(); add(ResourceType.ANIM, ResourceFolderType.ANIM, typeToFolderMap, folderToTypeMap); add(ResourceType.ARRAY, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); + add(ResourceType.ATTR, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); + add(ResourceType.BOOL, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.COLOR, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.COLOR, ResourceFolderType.COLOR, typeToFolderMap, folderToTypeMap); + add(ResourceType.DECLARE_STYLEABLE, ResourceFolderType.VALUES, typeToFolderMap, + folderToTypeMap); add(ResourceType.DIMEN, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.DRAWABLE, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.DRAWABLE, ResourceFolderType.DRAWABLE, typeToFolderMap, folderToTypeMap); + add(ResourceType.FRACTION, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.ID, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); + add(ResourceType.INTEGER, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.LAYOUT, ResourceFolderType.LAYOUT, typeToFolderMap, folderToTypeMap); add(ResourceType.MENU, ResourceFolderType.MENU, typeToFolderMap, folderToTypeMap); + add(ResourceType.PLURALS, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); + add(ResourceType.PUBLIC, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.RAW, ResourceFolderType.RAW, typeToFolderMap, folderToTypeMap); add(ResourceType.STRING, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.STYLE, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); + add(ResourceType.STYLEABLE, ResourceFolderType.VALUES, typeToFolderMap, folderToTypeMap); add(ResourceType.XML, ResourceFolderType.XML, typeToFolderMap, folderToTypeMap); - + optimize(typeToFolderMap, folderToTypeMap); } - + /** * Returns a list of {@link ResourceType}s that can be generated from files inside a folder * of the specified type. @@ -74,7 +83,7 @@ public final class FolderTypeRelationship { } return new ResourceType[0]; } - + /** * Returns a list of {@link ResourceFolderType} that can contain files generating resources * of the specified type. @@ -88,7 +97,7 @@ public final class FolderTypeRelationship { } return new ResourceFolderType[0]; } - + /** * Returns true if the {@link ResourceType} and the {@link ResourceFolderType} values match. * @param resType the resource type. @@ -98,7 +107,7 @@ public final class FolderTypeRelationship { */ public static boolean match(ResourceType resType, ResourceFolderType folderType) { ResourceFolderType[] array = mTypeToFolderMap.get(resType); - + if (array != null && array.length > 0) { for (ResourceFolderType fType : array) { if (fType == folderType) { @@ -106,17 +115,17 @@ public final class FolderTypeRelationship { } } } - + return false; } - + /** * Adds a {@link ResourceType} - {@link ResourceFolderType} relationship. this indicates that * a file in the folder can generate a resource of the specified type. * @param type The resourceType * @param folder The {@link ResourceFolderType} - * @param folderToTypeMap - * @param typeToFolderMap + * @param folderToTypeMap + * @param typeToFolderMap */ private static void add(ResourceType type, ResourceFolderType folder, HashMap<ResourceType, List<ResourceFolderType>> typeToFolderMap, @@ -130,7 +139,7 @@ public final class FolderTypeRelationship { if (folderList.indexOf(folder) == -1) { folderList.add(folder); } - + // now we add the type to the list associated with the folder. List<ResourceType> typeList = folderToTypeMap.get(folder); if (typeList == null) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java index ae56f67..a96a4e8 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java @@ -136,6 +136,7 @@ public final class MultiResourceFile extends ResourceFile implements IValueResou */ public void addResourceValue(String resType, ResourceValue value) { ResourceType type = ResourceType.getEnum(resType); + assert type != null; if (type != null) { HashMap<String, ResourceValue> list = mResourceItems.get(type); diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java new file mode 100644 index 0000000..a865ded --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/eclipse/adt/internal/resources/manager/FolderTypeRelationShipTest.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.resources.manager; + +import com.android.ide.eclipse.adt.internal.resources.ResourceType; + +import junit.framework.TestCase; + +public class FolderTypeRelationShipTest extends TestCase { + + public void testResourceType() { + // all resource type should be in the FolderTypeRelationShip map. + // loop on all the enum, and make sure there's at least one folder type for it. + for (ResourceType type : ResourceType.values()) { + assertTrue(type.getDisplayName(), + FolderTypeRelationship.getRelatedFolders(type).length > 0); + } + } + + public void testResourceFolderType() { + // all resource folder type should generate at least one type of resource. + // loop on all the enum, and make sure there's at least one res type for it. + for (ResourceFolderType type : ResourceFolderType.values()) { + assertTrue(type.getName(), + FolderTypeRelationship.getRelatedResourceTypes(type).length > 0); + } + } + +} |