8009686: Generated javadoc documentation should be able to display type annotation on an array

Reviewed-by: jjg
This commit is contained in:
Bhavesh Patel 2013-04-13 18:48:29 -07:00
parent 3044b19d21
commit 56d97d6507
13 changed files with 237 additions and 43 deletions

View file

@ -95,15 +95,6 @@ public interface ExecutableMemberDoc extends MemberDoc {
*/ */
Type receiverType(); Type receiverType();
/**
* Get the receiver annotations of this executable element.
* Return an empty array if there are none.
*
* @return the receiver annotations of this executable element.
* @since 1.8
*/
AnnotationDesc[] receiverAnnotations();
/** /**
* Return the throws tags in this method. * Return the throws tags in this method.
* *

View file

@ -160,4 +160,13 @@ public interface Type {
* @since 1.5 * @since 1.5
*/ */
AnnotationTypeDoc asAnnotationTypeDoc(); AnnotationTypeDoc asAnnotationTypeDoc();
/**
* If this type is an array type, return the element type of the
* array. Otherwise, return null.
*
* @return a <code>Type</code> representing the element type or null.
* @since 1.8
*/
Type getElementType();
} }

View file

@ -157,9 +157,9 @@ public class LinkFactoryImpl extends LinkFactory {
if (!isFirst) { if (!isFirst) {
linkInfo.displayLength += 1; linkInfo.displayLength += 1;
output.append(" "); output.append(" ");
isFirst = false;
} }
output.append(anno); output.append(anno);
isFirst = false;
} }
if (!annos.isEmpty()) { if (!annos.isEmpty()) {
linkInfo.displayLength += 1; linkInfo.displayLength += 1;

View file

@ -60,6 +60,13 @@ public class LinkOutputImpl implements LinkOutput {
(String) o : ((LinkOutputImpl)o).toString()); (String) o : ((LinkOutputImpl)o).toString());
} }
/**
* {@inheritDoc}
*/
public void insert(int offset, Object o) {
output.insert(offset, o.toString());
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */

View file

@ -61,7 +61,7 @@ public abstract class LinkFactory {
//Just a primitive. //Just a primitive.
linkInfo.displayLength += type.typeName().length(); linkInfo.displayLength += type.typeName().length();
linkOutput.append(type.typeName()); linkOutput.append(type.typeName());
} else if (type.asAnnotatedType() != null) { } else if (type.asAnnotatedType() != null && type.dimension().length() == 0) {
linkOutput.append(getTypeAnnotationLinks(linkInfo)); linkOutput.append(getTypeAnnotationLinks(linkInfo));
linkInfo.type = type.asAnnotatedType().underlyingType(); linkInfo.type = type.asAnnotatedType().underlyingType();
linkOutput.append(getLinkOutput(linkInfo)); linkOutput.append(getLinkOutput(linkInfo));
@ -141,8 +141,21 @@ public abstract class LinkFactory {
linkInfo.displayLength += 3; linkInfo.displayLength += 3;
linkOutput.append("..."); linkOutput.append("...");
} else { } else {
while (type != null && type.dimension().length() > 0) {
linkInfo.displayLength += type.dimension().length(); linkInfo.displayLength += type.dimension().length();
linkOutput.append(type.dimension()); if (type.asAnnotatedType() != null) {
linkInfo.type = type;
linkOutput.append(" ");
linkOutput.append(getTypeAnnotationLinks(linkInfo));
linkOutput.append("[]");
type = type.asAnnotatedType().underlyingType().getElementType();
} else {
linkOutput.append("[]");
type = type.getElementType();
}
}
linkInfo.type = type;
linkOutput.insert(0, getTypeAnnotationLinks(linkInfo));
} }
return linkOutput; return linkOutput;
} else if (linkInfo.classDoc != null) { } else if (linkInfo.classDoc != null) {

View file

@ -44,4 +44,12 @@ public interface LinkOutput {
* @param o the object to append. * @param o the object to append.
*/ */
public void append(Object o); public void append(Object o);
/**
* Insert the given object into the output sequence.
*
* @param offset the offset.
* @param o the object to be inserted.
*/
public void insert(int offset, Object o);
} }

View file

@ -61,6 +61,10 @@ abstract class AbstractTypeImpl implements com.sun.javadoc.Type {
return type.tsym.getQualifiedName().toString(); return type.tsym.getQualifiedName().toString();
} }
public com.sun.javadoc.Type getElementType() {
return null;
}
public String simpleTypeName() { public String simpleTypeName() {
return type.tsym.name.toString(); return type.tsym.name.toString();
} }

View file

@ -108,6 +108,10 @@ public class ClassDocImpl extends ProgramElementDocImpl implements ClassDoc {
this.tsym = sym; this.tsym = sym;
} }
public com.sun.javadoc.Type getElementType() {
return null;
}
/** /**
* Returns the flags in terms of javac's flags * Returns the flags in terms of javac's flags
*/ */

View file

@ -210,24 +210,6 @@ public abstract class ExecutableMemberDocImpl
return (recvtype != null) ? TypeMaker.getType(env, recvtype, false, true) : null; return (recvtype != null) ? TypeMaker.getType(env, recvtype, false, true) : null;
} }
public AnnotationDesc[] receiverAnnotations() {
// TODO: change how receiver annotations are output!
Type recvtype = sym.type.asMethodType().recvtype;
if (recvtype == null) {
return new AnnotationDesc[0];
}
if (!recvtype.isAnnotated()) {
return new AnnotationDesc[0];
}
List<? extends Compound> typeAnnos = ((com.sun.tools.javac.code.Type.AnnotatedType)recvtype).typeAnnotations;
AnnotationDesc result[] = new AnnotationDesc[typeAnnos.length()];
int i = 0;
for (Attribute.Compound a : typeAnnos) {
result[i++] = new AnnotationDescImpl(env, a);
}
return result;
}
/** /**
* Return the formal type parameters of this method or constructor. * Return the formal type parameters of this method or constructor.
* Return an empty array if there are none. * Return an empty array if there are none.

View file

@ -63,6 +63,10 @@ class PrimitiveType implements com.sun.javadoc.Type {
return name; return name;
} }
public com.sun.javadoc.Type getElementType() {
return null;
}
/** /**
* Return qualified name of type excluding any dimension information. * Return qualified name of type excluding any dimension information.
*<p> *<p>

View file

@ -222,6 +222,10 @@ public class TypeMaker {
private com.sun.javadoc.Type skipArraysCache = null; private com.sun.javadoc.Type skipArraysCache = null;
public com.sun.javadoc.Type getElementType() {
return TypeMaker.getType(env, env.types.elemtype(arrayType));
}
private com.sun.javadoc.Type skipArrays() { private com.sun.javadoc.Type skipArrays() {
if (skipArraysCache == null) { if (skipArraysCache == null) {
Type t; Type t;

View file

@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 8005091 * @bug 8005091 8009686
* @summary Make sure that type annotations are displayed correctly * @summary Make sure that type annotations are displayed correctly
* @author Bhavesh Patel * @author Bhavesh Patel
* @library ../lib/ * @library ../lib/
@ -34,7 +34,7 @@
public class TestTypeAnnotations extends JavadocTester { public class TestTypeAnnotations extends JavadocTester {
//Test information. //Test information.
private static final String BUG_ID = "8005091"; private static final String BUG_ID = "8005091-8009686";
//Javadoc arguments. //Javadoc arguments.
private static final String[] ARGS = new String[] { private static final String[] ARGS = new String[] {
@ -45,18 +45,37 @@ public class TestTypeAnnotations extends JavadocTester {
private static final String[][] NEGATED_TEST = NO_TEST; private static final String[][] NEGATED_TEST = NO_TEST;
private static final String[][] TEST = { private static final String[][] TEST = {
// Test for type annotations on Class Extends (ClassExtends.java). // Test for type annotations on Class Extends (ClassExtends.java).
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "MyClass.html",
"extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
"in typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedClass.html\" " +
"title=\"class in typeannos\">ParameterizedClass</a>&lt;<a href=\"" +
"../typeannos/ClassExtB.html\" title=\"annotation in typeannos\">" +
"@ClassExtB</a> java.lang.String&gt;"
},
*/
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "MyClass.html", {BUG_ID + FS + "typeannos" + FS + "MyClass.html",
"implements <a href=\"../typeannos/ClassExtB.html\" title=\"" + "implements <a href=\"../typeannos/ClassExtB.html\" title=\"" +
"annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, " + "annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, " +
"<a href=\"../typeannos/ParameterizedInterface.html\" title=\"" + "<a href=\"../typeannos/ClassExtA.html\" title=\"annotation in " +
"interface in typeannos\">ParameterizedInterface</a>&lt;java.lang.String&gt;</pre>" "typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedInterface.html\" " +
"title=\"interface in typeannos\">ParameterizedInterface</a>&lt;" +
"<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
"typeannos\">@ClassExtB</a> java.lang.String&gt;</pre>"
}, },
*/
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "MyInterface.html", {BUG_ID + FS + "typeannos" + FS + "MyInterface.html",
"extends <a href=\"../typeannos/ParameterizedInterface.html\" title" + "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
"=\"interface in typeannos\">ParameterizedInterface</a>&lt;java." + "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/" +
"lang.String&gt;, <a href=\"../typeannos/ClassExtB.html\" title=\"" + "ParameterizedInterface.html\" title=\"interface in typeannos\">" +
"annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence</pre>" "ParameterizedInterface</a>&lt;<a href=\"../typeannos/ClassExtA.html\" " +
"title=\"annotation in typeannos\">@ClassExtA</a> java.lang.String&gt;, " +
"<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
"typeannos\">@ClassExtB</a> java.lang.CharSequence</pre>"
}, },
*/
// Test for type annotations on Class Parameters (ClassParameters.java). // Test for type annotations on Class Parameters (ClassParameters.java).
{BUG_ID + FS + "typeannos" + FS + "ExtendsBound.html", {BUG_ID + FS + "typeannos" + FS + "ExtendsBound.html",
@ -64,11 +83,21 @@ public class TestTypeAnnotations extends JavadocTester {
"href=\"../typeannos/ClassParamA.html\" title=\"annotation in " + "href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
"typeannos\">@ClassParamA</a> java.lang.String&gt;</span>" "typeannos\">@ClassParamA</a> java.lang.String&gt;</span>"
}, },
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "ExtendsGeneric.html",
"<pre> class <span class=\"strong\">ExtendsGeneric&lt;K extends " +
"<a href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
"typeannos\">@ClassParamA</a> <a href=\"../typeannos/Unannotated.html\" " +
"title=\"class in typeannos\">Unannotated</a>&lt;<a href=\"" +
"../typeannos/ClassParamB.html\" title=\"annotation in typeannos\">" +
"@ClassParamB</a> java.lang.String&gt;&gt;</span>"
},
*/
{BUG_ID + FS + "typeannos" + FS + "TwoBounds.html", {BUG_ID + FS + "typeannos" + FS + "TwoBounds.html",
"class <span class=\"strong\">TwoBounds&lt;K extends <a href=\"" + "<pre> class <span class=\"strong\">TwoBounds&lt;K extends <a href=\"" +
"../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" + "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
"@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos" + "@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos/" +
"/ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB" + "ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB" +
"</a> java.lang.String&gt;</span>" "</a> java.lang.String&gt;</span>"
}, },
{BUG_ID + FS + "typeannos" + FS + "Complex1.html", {BUG_ID + FS + "typeannos" + FS + "Complex1.html",
@ -89,12 +118,86 @@ public class TestTypeAnnotations extends JavadocTester {
"</a> java.lang.Runnable&gt;</span>" "</a> java.lang.Runnable&gt;</span>"
}, },
// Test for type annotations on fields (Fields.java).
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
"<pre><a href=\"../typeannos/Parameterized.html\" title=\"class in " +
"typeannos\">Parameterized</a>&lt;<a href=\"../typeannos/FldA.html\" " +
"title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
"href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
"@FldB</a> java.lang.String&gt; bothTypeArgs</pre>"
},
*/
{BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
"<pre><a href=\"../typeannos/FldA.html\" title=\"annotation in " +
"typeannos\">@FldA</a> java.lang.String <a href=\"../typeannos/" +
"FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] " +
"array1Deep</pre>"
},
{BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
"<pre>java.lang.String[] <a href=\"../typeannos/FldB.html\" " +
"title=\"annotation in typeannos\">@FldB</a> [] array2SecondOld</pre>"
},
{BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
"<pre><a href=\"../typeannos/FldD.html\" title=\"annotation in " +
"typeannos\">@FldD</a> java.lang.String <a href=\"../typeannos/" +
"FldC.html\" title=\"annotation in typeannos\">@FldC</a> <a href=\"" +
"../typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA" +
"</a> [] <a href=\"../typeannos/FldC.html\" title=\"annotation in " +
"typeannos\">@FldC</a> <a href=\"../typeannos/FldB.html\" title=\"" +
"annotation in typeannos\">@FldB</a> [] array2Deep</pre>"
},
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "ModifiedScoped.html",
"<pre>public final&nbsp;<a href=\"../typeannos/Parameterized.html\" " +
"title=\"class in typeannos\">Parameterized</a>&lt;<a href=\"../" +
"typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> " +
"<a href=\"../typeannos/Parameterized.html\" title=\"class in " +
"typeannos\">Parameterized</a>&lt;<a href=\"../typeannos/FldA.html\" " +
"title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
"href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
"@FldB</a> java.lang.String&gt;,<a href=\"../typeannos/FldB.html\" " +
"title=\"annotation in typeannos\">@FldB</a> java.lang.String&gt; " +
"nestedParameterized</pre>"
},
*/
{BUG_ID + FS + "typeannos" + FS + "ModifiedScoped.html",
"<pre>public final&nbsp;<a href=\"../typeannos/FldA.html\" " +
"title=\"annotation in typeannos\">@FldA</a> java.lang.String[][] " +
"array2</pre>"
},
// Test for type annotations on method return types (MethodReturnType.java). // Test for type annotations on method return types (MethodReturnType.java).
{BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html", {BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html",
"<pre>public&nbsp;&lt;T&gt;&nbsp;<a href=\"../typeannos/MRtnA.html\" " + "<pre>public&nbsp;&lt;T&gt;&nbsp;<a href=\"../typeannos/MRtnA.html\" " +
"title=\"annotation in typeannos\">@MRtnA</a> java.lang.String" + "title=\"annotation in typeannos\">@MRtnA</a> java.lang.String" +
"&nbsp;method()</pre>" "&nbsp;method()</pre>"
}, },
{BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html",
"<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
"typeannos\">@MRtnA</a> java.lang.String <a href=\"../typeannos/" +
"MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> [] <a " +
"href=\"../typeannos/MRtnB.html\" title=\"annotation in typeannos\">" +
"@MRtnB</a> []&nbsp;array2Deep()</pre>"
},
{BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html",
"<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
"typeannos\">@MRtnA</a> java.lang.String[][]&nbsp;array2()</pre>"
},
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "MtdModifiedScoped.html",
"<pre>public final&nbsp;<a href=\"../typeannos/MtdParameterized.html\" " +
"title=\"class in typeannos\">MtdParameterized</a>&lt;<a href=\"../" +
"typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> " +
"<a href=\"../typeannos/MtdParameterized.html\" title=\"class in " +
"typeannos\">MtdParameterized</a>&lt;<a href=\"../typeannos/MRtnA." +
"html\" title=\"annotation in typeannos\">@MRtnA</a> java.lang." +
"String,<a href=\"../typeannos/MRtnB.html\" title=\"annotation in " +
"typeannos\">@MRtnB</a> java.lang.String&gt;,<a href=\"../typeannos/" +
"MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> java." +
"lang.String&gt;&nbsp;nestedMtdParameterized()</pre>"
},
*/
// Test for type annotations on method type parameters (MethodTypeParameters.java). // Test for type annotations on method type parameters (MethodTypeParameters.java).
{BUG_ID + FS + "typeannos" + FS + "UnscopedUnmodified.html", {BUG_ID + FS + "typeannos" + FS + "UnscopedUnmodified.html",
@ -102,11 +205,63 @@ public class TestTypeAnnotations extends JavadocTester {
"annotation in typeannos\">@MTyParamA</a> java.lang.String&gt;" + "annotation in typeannos\">@MTyParamA</a> java.lang.String&gt;" +
"&nbsp;void&nbsp;methodExtends()</pre>" "&nbsp;void&nbsp;methodExtends()</pre>"
}, },
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "UnscopedUnmodified.html",
"<pre>&lt;K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
"annotation in typeannos\">@MTyParamA</a> <a href=\"../typeannos/" +
"MtdTyParameterized.html\" title=\"class in typeannos\">" +
"MtdTyParameterized</a>&lt;<a href=\"../typeannos/MTyParamB.html\" " +
"title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
"&gt;&gt;&nbsp;void&nbsp;nestedExtends()</pre>"
},
*/
{BUG_ID + FS + "typeannos" + FS + "PublicModifiedMethods.html", {BUG_ID + FS + "typeannos" + FS + "PublicModifiedMethods.html",
"<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/" + "<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/" +
"MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " + "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
"java.lang.String&gt;&nbsp;void&nbsp;methodExtends()</pre>" "java.lang.String&gt;&nbsp;void&nbsp;methodExtends()</pre>"
}, },
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "PublicModifiedMethods.html",
"<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/" +
"MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
"java.lang.String,V extends <a href=\"../typeannos/MTyParamA.html\" " +
"title=\"annotation in typeannos\">@MTyParamA</a> <a href=\"../" +
"typeannos/MtdTyParameterized.html\" title=\"class in typeannos\">" +
"MtdTyParameterized</a>&lt;<a href=\"../typeannos/MTyParamB.html\" " +
"title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
"&gt;&gt;&nbsp;void&nbsp;dual()</pre>"
},
*/
// Test for type annotations on parameters (Parameters.java).
{BUG_ID + FS + "typeannos" + FS + "Parameters.html",
"<pre>void&nbsp;unannotated(<a href=\"../typeannos/" +
"ParaParameterized.html\" title=\"class in typeannos\">" +
"ParaParameterized</a>&lt;java.lang.String,java.lang.String&gt;" +
"&nbsp;a)</pre>"
},
/* @ignore 8012173
{BUG_ID + FS + "typeannos" + FS + "Parameters.html",
"<pre>void&nbsp;nestedParaParameterized(<a href=\"../typeannos/" +
"ParaParameterized.html\" title=\"class in typeannos\">" +
"ParaParameterized</a>&lt;<a href=\"../typeannos/ParamA.html\" " +
"title=\"annotation in typeannos\">@ParamA</a> <a href=\"../" +
"typeannos/ParaParameterized.html\" title=\"class in typeannos\">" +
"ParaParameterized</a>&lt;<a href=\"../typeannos/ParamA.html\" " +
"title=\"annotation in typeannos\">@ParamA</a> java.lang.String," +
"<a href=\"../typeannos/ParamB.html\" title=\"annotation in " +
"typeannos\">@ParamB</a> java.lang.String&gt;,<a href=\"../" +
"typeannos/ParamB.html\" title=\"annotation in typeannos\">@ParamB" +
"</a> java.lang.String&gt;&nbsp;a)</pre>"
},
*/
{BUG_ID + FS + "typeannos" + FS + "Parameters.html",
"<pre>void&nbsp;array2Deep(<a href=\"../typeannos/ParamA.html\" " +
"title=\"annotation in typeannos\">@ParamA</a> java.lang.String " +
"<a href=\"../typeannos/ParamA.html\" title=\"annotation in " +
"typeannos\">@ParamA</a> [] <a href=\"../typeannos/ParamB.html\" " +
"title=\"annotation in typeannos\">@ParamB</a> []&nbsp;a)</pre>"
},
// Test for type annotations on throws (Throws.java). // Test for type annotations on throws (Throws.java).
{BUG_ID + FS + "typeannos" + FS + "ThrDefaultUnmodified.html", {BUG_ID + FS + "typeannos" + FS + "ThrDefaultUnmodified.html",
@ -148,6 +303,13 @@ public class TestTypeAnnotations extends JavadocTester {
"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>" "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
}, },
// Test for type annotations on type parameters (TypeParameters.java).
{BUG_ID + FS + "typeannos" + FS + "TestMethods.html",
"<pre>&lt;K,V extends <a href=\"../typeannos/TyParaA.html\" title=\"" +
"annotation in typeannos\">@TyParaA</a> java.lang.String&gt;&nbsp;" +
"void&nbsp;secondAnnotated()</pre>"
},
// Test for type annotations on wildcard type (Wildcards.java). // Test for type annotations on wildcard type (Wildcards.java).
{BUG_ID + FS + "typeannos" + FS + "BoundTest.html", {BUG_ID + FS + "typeannos" + FS + "BoundTest.html",
"<pre>void&nbsp;wcExtends(<a href=\"../typeannos/MyList.html\" " + "<pre>void&nbsp;wcExtends(<a href=\"../typeannos/MyList.html\" " +

View file

@ -40,7 +40,7 @@ class DefaultScope {
@FldA String [] array1; @FldA String [] array1;
@FldA String @FldB [] array1Deep; @FldA String @FldB [] array1Deep;
@FldA String [] [] array2; @FldA String [] [] array2;
@FldA String @FldA [] @FldB [] array2Deep; @FldD String @FldC @FldA [] @FldC @FldB [] array2Deep;
String @FldA [] [] array2First; String @FldA [] [] array2First;
String [] @FldB [] array2Second; String [] @FldB [] array2Second;
@ -74,3 +74,9 @@ class Parameterized<K, V> { }
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@Documented @Documented
@interface FldB { } @interface FldB { }
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@Documented
@interface FldC { }
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@Documented
@interface FldD { }