1d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/*
2d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Copyright (C) 2015 The Android Open Source Project
3d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar *
4d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
5d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * you may not use this file except in compliance with the License.
6d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * You may obtain a copy of the License at
7d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar *
8d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
9d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar *
10d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Unless required by applicable law or agreed to in writing, software
11d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
12d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * See the License for the specific language governing permissions and
14d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * limitations under the License.
15d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */
16d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool.expr;
18d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
19731b74f7f44e67312a1fc4161c4e0aae221b2417Yigit Boyarimport android.databinding.tool.processing.ErrorMessages;
20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelAnalyzer;
21fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.ModelClass;
22fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.util.L;
232611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyarimport android.databinding.tool.util.Preconditions;
24d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
252611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyarimport java.util.ArrayList;
26d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.List;
27d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
28d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class IdentifierExpr extends Expr {
29d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    String mName;
30d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    String mUserDefinedType;
31d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    IdentifierExpr(String name) {
32d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar        mName = name;
33d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
34d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
35d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    public String getName() {
36d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar        return mName;
37d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
38d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
39d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    /**
40d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar     * If this is root, its type should be set while parsing the XML document
41d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar     * @param userDefinedType The type of this identifier
42d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar     */
43d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    public void setUserDefinedType(String userDefinedType) {
44d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar        mUserDefinedType = userDefinedType;
45d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
46d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
47d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    @Override
48d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    protected String computeUniqueKey() {
492611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyar        return join(mName, super.computeUniqueKey());
50d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
51d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
5243596c2b2997e40b709627419732100d78a62ff0Yigit Boyar    public String getUserDefinedType() {
5343596c2b2997e40b709627419732100d78a62ff0Yigit Boyar        return mUserDefinedType;
5443596c2b2997e40b709627419732100d78a62ff0Yigit Boyar    }
5543596c2b2997e40b709627419732100d78a62ff0Yigit Boyar
56d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    @Override
57d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    public boolean isDynamic() {
58d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar        return true;
59d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
60d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
61d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    @Override
6279fc7f3727815ab35bb1bb2e060bfb7db3176eedGeorge Mount    protected ModelClass resolveType(final ModelAnalyzer modelAnalyzer) {
63731b74f7f44e67312a1fc4161c4e0aae221b2417Yigit Boyar        Preconditions.checkNotNull(mUserDefinedType, ErrorMessages.UNDEFINED_VARIABLE, mName);
64a7e767e576adebcddf043ad34ccb8dd167f777b3George Mount        return modelAnalyzer.findClass(mUserDefinedType, getModel().getImports());
65d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
66d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar
67d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    @Override
68d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    protected List<Dependency> constructDependencies() {
692611838bffef5a009ca71e3e9e59a93f29b098edYigit Boyar        return new ArrayList<>();
70d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar    }
7118243f6f1b7527272ef4feccdf4327d80d9f2241George Mount
7218243f6f1b7527272ef4feccdf4327d80d9f2241George Mount    @Override
7318243f6f1b7527272ef4feccdf4327d80d9f2241George Mount    protected String asPackage() {
7418243f6f1b7527272ef4feccdf4327d80d9f2241George Mount        return mUserDefinedType == null ? mName : null;
7518243f6f1b7527272ef4feccdf4327d80d9f2241George Mount    }
76d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar}
77