summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android/databinding/tool/reflection/InjectedMethod.java
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/src/main/java/android/databinding/tool/reflection/InjectedMethod.java')
-rw-r--r--compiler/src/main/java/android/databinding/tool/reflection/InjectedMethod.java146
1 files changed, 146 insertions, 0 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/reflection/InjectedMethod.java b/compiler/src/main/java/android/databinding/tool/reflection/InjectedMethod.java
new file mode 100644
index 00000000..f47442b7
--- /dev/null
+++ b/compiler/src/main/java/android/databinding/tool/reflection/InjectedMethod.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 android.databinding.tool.reflection;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A class that can be used by ModelAnalyzer without any backing model. This is used
+ * for methods on ViewDataBinding subclasses that haven't been generated yet.
+ *
+ * @see ModelAnalyzer#injectViewDataBinding(String, Map, Map)
+ */
+public class InjectedMethod extends ModelMethod {
+ private final InjectedClass mContainingClass;
+ private final String mName;
+ private final String mReturnTypeName;
+ private final String[] mParameterTypeNames;
+ private ModelClass[] mParameterTypes;
+ private ModelClass mReturnType;
+ private boolean mIsStatic;
+
+ public InjectedMethod(InjectedClass containingClass, boolean isStatic, String name,
+ String returnType, String... parameters) {
+ mContainingClass = containingClass;
+ mName = name;
+ mIsStatic = isStatic;
+ mReturnTypeName = returnType;
+ mParameterTypeNames = parameters;
+ }
+
+ @Override
+ public ModelClass getDeclaringClass() {
+ return mContainingClass;
+ }
+
+ @Override
+ public ModelClass[] getParameterTypes() {
+ if (mParameterTypes == null) {
+ if (mParameterTypeNames == null) {
+ mParameterTypes = new ModelClass[0];
+ } else {
+ mParameterTypes = new ModelClass[mParameterTypeNames.length];
+ ModelAnalyzer modelAnalyzer = ModelAnalyzer.getInstance();
+ for (int i = 0; i < mParameterTypeNames.length; i++) {
+ mParameterTypes[i] = modelAnalyzer.findClass(mParameterTypeNames[i], null);
+ }
+ }
+ }
+ return mParameterTypes;
+ }
+
+ @Override
+ public String getName() {
+ return mName;
+ }
+
+ @Override
+ public ModelClass getReturnType(List<ModelClass> args) {
+ if (mReturnType == null) {
+ mReturnType = ModelAnalyzer.getInstance().findClass(mReturnTypeName, null);
+ }
+ return mReturnType;
+ }
+
+ @Override
+ public boolean isVoid() {
+ return getReturnType().isVoid();
+ }
+
+ @Override
+ public boolean isPublic() {
+ return true;
+ }
+
+ @Override
+ public boolean isProtected() {
+ return false;
+ }
+
+ @Override
+ public boolean isStatic() {
+ return mIsStatic;
+ }
+
+ @Override
+ public boolean isAbstract() {
+ return true;
+ }
+
+ @Override
+ public boolean isBindable() {
+ return false;
+ }
+
+ @Override
+ public int getMinApi() {
+ return 0;
+ }
+
+ @Override
+ public String getJniDescription() {
+ return TypeUtil.getInstance().getDescription(this);
+ }
+
+ @Override
+ public boolean isVarArgs() {
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("public ");
+ if (mIsStatic) {
+ sb.append("static ");
+ }
+ sb.append(mReturnTypeName)
+ .append(' ')
+ .append(mName)
+ .append("(");
+ if (mParameterTypeNames != null) {
+ for (int i = 0; i < mParameterTypeNames.length; i++) {
+ if (i != 0) {
+ sb.append(", ");
+ }
+ sb.append(mParameterTypeNames[i]);
+ }
+ }
+ sb.append(')');
+ return sb.toString();
+ }
+}