/* * 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 mElementValues; private ArrayList mResolutions; public AnnotationInstanceInfo() { mType = null; mElementValues = new ArrayList(); } public AnnotationInstanceInfo(ClassInfo type, AnnotationValueInfo[] elementValues) { mType = type; mElementValues = new ArrayList(Arrays.asList(elementValues)); } ClassInfo type() { return mType; } public void setClass(ClassInfo cl) { mType = cl; } public void setSimpleAnnotationName(String name) { mAnnotationName = name; } ArrayList 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(); } mResolutions.add(resolution); } public void printResolutions() { System.out.println("Resolutions for Annotation:"); for (Resolution r : mResolutions) { System.out.println(r); } } public boolean resolveResolutions() { ArrayList resolutions = mResolutions; mResolutions = new ArrayList(); 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; } }