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