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
21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class TagInfo {
22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private String mName;
23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private String mText;
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private String mKind;
25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private SourcePositionInfo mPosition;
26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  TagInfo(String n, String k, String t, SourcePositionInfo sp) {
28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mName = n;
29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mText = t;
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mKind = k;
31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mPosition = sp;
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String name() {
35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mName;
36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String text() {
39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mText;
40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String kind() {
43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mKind;
44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  SourcePositionInfo position() {
47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mPosition;
48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  void setKind(String kind) {
51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mKind = kind;
52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public void makeHDF(Data data, String base) {
55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    data.setValue(base + ".name", name());
56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    data.setValue(base + ".text", text());
57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    data.setValue(base + ".kind", kind());
58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void makeHDF(Data data, String base, TagInfo[] tags) {
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    makeHDF(data, base, tags, null, 0, 0);
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void makeHDF(Data data, String base, InheritedTags tags) {
65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    makeHDF(data, base, tags.tags(), tags.inherited(), 0, 0);
66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private static int makeHDF(Data data, String base, TagInfo[] tags, InheritedTags inherited,
69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      int j, int depth) {
70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int i;
71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int len = tags.length;
72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (len == 0 && inherited != null) {
73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      j = makeHDF(data, base, inherited.tags(), inherited.inherited(), j, depth + 1);
74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      for (i = 0; i < len; i++, j++) {
76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        TagInfo t = tags[i];
77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        if (inherited != null && t.name().equals("@inheritDoc")) {
78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          j = makeHDF(data, base, inherited.tags(), inherited.inherited(), j, depth + 1);
79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        } else {
80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          if (t.name().equals("@inheritDoc")) {
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson            Errors.error(Errors.BAD_INHERITDOC, t.mPosition,
82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson                "@inheritDoc on class/method that is not inherited");
83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          }
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          t.makeHDF(data, base + "." + j);
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        }
86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return j;
89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
91