1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/*
2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc.
3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License");
5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License.
6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at
7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0
9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software
11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS,
12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and
14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License.
15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */
16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava;
18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data;
20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
21d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arnesonimport java.util.Collections;
22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.HashSet;
23d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arnesonimport java.util.Map;
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class ParameterInfo {
26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ParameterInfo(String name, String typeName, TypeInfo type, boolean isVarArg,
27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      SourcePositionInfo position) {
28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mName = name;
29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mTypeName = typeName;
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mType = type;
31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsVarArg = isVarArg;
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mPosition = position;
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
35d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  /**
36d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson   * Clone this Parameter, but replace the type according to the typeArgumentMapping provided.
37d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson   */
38d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  public ParameterInfo cloneWithTypeArguments(Map<String, TypeInfo> typeArgumentMapping) {
39d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson    return new ParameterInfo(
40d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson        mName, mTypeName, mType.getTypeWithArguments(typeArgumentMapping), mIsVarArg, mPosition);
41d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  }
42d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson
43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  TypeInfo type() {
44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mType;
45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String name() {
48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mName;
49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String typeName() {
52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mTypeName;
53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  SourcePositionInfo position() {
56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mPosition;
57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
58d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean isVarArg() {
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsVarArg;
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public void makeHDF(Data data, String base, boolean isLastVararg, HashSet<String> typeVariables) {
64d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson    makeHDF(data, base, isLastVararg, typeVariables, Collections.<String, TypeInfo>emptyMap());
65d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  }
66d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson
67d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  public void makeHDF(Data data, String base, boolean isLastVararg, HashSet<String> typeVariables,
68d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson      Map<String, TypeInfo> typeMapping) {
69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    data.setValue(base + ".name", this.name());
70d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson    type().getTypeWithArguments(typeMapping).makeHDF(
71d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson        data, base + ".type", isLastVararg, typeVariables);
72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void makeHDF(Data data, String base, ParameterInfo[] params, boolean isVararg,
75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      HashSet<String> typeVariables) {
76d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson    makeHDF(data, base, params, isVararg, typeVariables, Collections.<String, TypeInfo>emptyMap());
77d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  }
78d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson
79d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson  public static void makeHDF(Data data, String base, ParameterInfo[] params, boolean isVararg,
80d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson      HashSet<String> typeVariables, Map<String, TypeInfo> typeMapping) {
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    for (int i = 0; i < params.length; i++) {
82d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson      params[i].makeHDF(
83d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson          data, base + "." + i, isVararg && (i == params.length - 1), typeVariables, typeMapping);
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
86d6570b0b7f66519ba50c18d9e08db423bdf1341eJeff Arneson
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  /**
88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   * Returns true if this parameter's dimension information agrees
89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   * with the represented callee's dimension information.
90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   */
91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean matchesDimension(String dimension, boolean varargs) {
92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (varargs) {
93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      dimension += "[]";
94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mType.dimension().equals(dimension);
96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mName;
99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mTypeName;
100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  TypeInfo mType;
101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsVarArg;
102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  SourcePositionInfo mPosition;
103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
104