blob: ff17e8d5c05069eaca66d9b52740507cdd979258 [file] [log] [blame]
/*
* Copyright (C) 2010 Google Inc.
*
* 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 com.google.doclava;
import java.util.ArrayList;
import java.util.Arrays;
public class AnnotationInstanceInfo implements Resolvable {
private ClassInfo mType;
private String mAnnotationName; // for debugging purposes TODO - remove
private ArrayList<AnnotationValueInfo> mElementValues;
private ArrayList<Resolution> mResolutions;
public AnnotationInstanceInfo() {
mType = null;
mElementValues = new ArrayList<AnnotationValueInfo>();
}
public AnnotationInstanceInfo(ClassInfo type, AnnotationValueInfo[] elementValues) {
mType = type;
mElementValues = new ArrayList<AnnotationValueInfo>(Arrays.asList(elementValues));
}
ClassInfo type() {
return mType;
}
public void setClass(ClassInfo cl) {
mType = cl;
}
public void setSimpleAnnotationName(String name) {
mAnnotationName = name;
}
ArrayList<AnnotationValueInfo> elementValues() {
return mElementValues;
}
public void addElementValue(AnnotationValueInfo info) {
mElementValues.add(info);
}
@Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append("@");
if (mType == null) {
str.append(mAnnotationName);
} else {
str.append(mType.qualifiedName());
}
str.append("(");
for (AnnotationValueInfo value : mElementValues) {
if (value.element() != null) {
str.append(value.element().name());
str.append("=");
}
str.append(value.valueString());
if (value != mElementValues.get(mElementValues.size()-1)) {
str.append(",");
}
}
str.append(")");
return str.toString();
}
public void addResolution(Resolution resolution) {
if (mResolutions == null) {
mResolutions = new ArrayList<Resolution>();
}
mResolutions.add(resolution);
}
public void printResolutions() {
System.out.println("Resolutions for Annotation:");
for (Resolution r : mResolutions) {
System.out.println(r);
}
}
public boolean resolveResolutions() {
ArrayList<Resolution> resolutions = mResolutions;
mResolutions = new ArrayList<Resolution>();
boolean allResolved = true;
for (Resolution resolution : resolutions) {
StringBuilder qualifiedClassName = new StringBuilder();
InfoBuilder.resolveQualifiedName(resolution.getValue(), qualifiedClassName,
resolution.getInfoBuilder());
// if we still couldn't resolve it, save it for the next pass
if ("".equals(qualifiedClassName.toString())) {
mResolutions.add(resolution);
allResolved = false;
} else if ("annotationTypeName".equals(resolution.getVariable())) {
setClass(InfoBuilder.Caches.obtainClass(qualifiedClassName.toString()));
}
}
return allResolved;
}
}