16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#ifndef AAPT_RESOLVER_H 186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define AAPT_RESOLVER_H 196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Maybe.h" 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Resource.h" 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "ResourceValues.h" 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <androidfw/ResourceTypes.h> 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/** 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Resolves symbolic references (package:type/entry) into resource IDs/objects. 306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 3124aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinskiclass IResolver { 326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskipublic: 3324aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski virtual ~IResolver() {}; 346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Holds the result of a resource name lookup. 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski struct Entry { 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * The ID of the resource. ResourceId::isValid() may 416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * return false if the resource has not been assigned 426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * an ID. 436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ResourceId id; 456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * If the resource is an attribute, this will point 486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * to a valid Attribute object, or else it will be 496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * nullptr. 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski const Attribute* attr; 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski }; 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Returns a ResourceID if the name is found. The ResourceID 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * may not be valid if the resource was not assigned an ID. 576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 5824aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski virtual Maybe<ResourceId> findId(const ResourceName& name) = 0; 596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski /** 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Returns an Entry if the name is found. Entry::attr 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * may be nullptr if the resource is not an attribute. 636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 6424aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski virtual Maybe<Entry> findAttribute(const ResourceName& name) = 0; 656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 6624aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski /** 6724aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski * Find a resource by ID. Resolvers may contain resources without 6824aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski * resource IDs assigned to them. 6924aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski */ 7024aad163bc88cb10d2275385e9afc3de7f342d65Adam Lesinski virtual Maybe<ResourceName> findName(ResourceId resId) = 0; 716f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 726f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 736f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_RESOLVER_H 76