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