NamedType.h revision cb0ba5213057de39aa164f2f9a3691370bcbfe6b
11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/* 21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project 31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License. 61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at 71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software 111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and 141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License. 151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */ 161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef NAMED_TYPE_H_ 18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 19c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define NAMED_TYPE_H_ 20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 21a4b53d0da8c1c6889c361fd30b913adc364163bcYifan Hong#include "Location.h" 22a4b53d0da8c1c6889c361fd30b913adc364163bcYifan Hong#include "Type.h" 2331629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber 247ae3d54cb65f1309cb643b83a2040225ad5f3128Steven Moreland#include <hidl-util/FQName.h> 257ae3d54cb65f1309cb643b83a2040225ad5f3128Steven Moreland 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <string> 27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 29c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 30cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakovstruct Scope; 31cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakov 32c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct NamedType : public Type { 33cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakov NamedType(const char* localName, const Location& loc, Scope* mParent); 3431629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber 3539fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber bool isNamedType() const override; 3639fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber 3731629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber void setFullName(const FQName &fullName); 38c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 39bfd7621b737387ded85d81c5ef9ec0f7cc35635fAndreas Huber const FQName &fqName() const; 40979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland 410e00de41d11a83ce3becb0dbd20b799acceb19a7Andreas Huber std::string localName() const; 42979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland 43979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland /* short for fqName().cppName() */ 4431629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber std::string fullName() const; 45979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland /* short for fqName().cppLocalName() */ 46979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland std::string partialCppName() const; 47979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland /* short for fqName().fullJavaName() */ 482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber std::string fullJavaName() const; 49c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 50a4b53d0da8c1c6889c361fd30b913adc364163bcYifan Hong // returns null if no location is set for this type. 51a4b53d0da8c1c6889c361fd30b913adc364163bcYifan Hong const Location &location() const; 52a4b53d0da8c1c6889c361fd30b913adc364163bcYifan Hong 53f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong void emitDump( 54f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 55f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 56f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const override; 57f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 58cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakov Scope* parent() const; 59cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakov 60cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakov private: 6131629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber std::string mLocalName; 6231629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber FQName mFullName; 63a4b53d0da8c1c6889c361fd30b913adc364163bcYifan Hong Location mLocation; 64cb0ba5213057de39aa164f2f9a3691370bcbfe6bTimur Iskhakov Scope* const mParent; 65c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 66c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(NamedType); 67c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 68c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 69c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 70c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 71c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // NAMED_TYPE_H_ 72c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 73