Mark Deprecated Classes and Methods
Put a line through classes and methods that are deprecated
in the coverage report. This could help prioritize writing tests.
Change-Id: I8ee80f0af9ba0ea759d10e054a012e28a354d982
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiClass.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiClass.java
index de2e3eb..101be7f 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiClass.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiClass.java
@@ -26,22 +26,31 @@
private final String mName;
+ private final boolean mDeprecated;
+
private final List<ApiConstructor> mApiConstructors = new ArrayList<ApiConstructor>();
private final List<ApiMethod> mApiMethods = new ArrayList<ApiMethod>();
- ApiClass(String name) {
- this.mName = name;
+ ApiClass(String name, boolean deprecated) {
+ mName = name;
+ mDeprecated = deprecated;
}
+ @Override
public int compareTo(ApiClass another) {
return mName.compareTo(another.mName);
}
+ @Override
public String getName() {
return mName;
}
+ public boolean isDeprecated() {
+ return mDeprecated;
+ }
+
public void addConstructor(ApiConstructor constructor) {
mApiConstructors.add(constructor);
}
@@ -97,6 +106,7 @@
return mApiConstructors.size() + mApiMethods.size();
}
+ @Override
public float getCoveragePercentage() {
return (float) getNumCoveredMethods() / getTotalMethods() * 100;
}
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiConstructor.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiConstructor.java
index b38bd34..8d721e6 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiConstructor.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiConstructor.java
@@ -27,13 +27,17 @@
private final List<String> mParameterTypes;
+ private final boolean mDeprecated;
+
private boolean mIsCovered;
- ApiConstructor(String name, List<String> parameterTypes) {
- this.mName = name;
- this.mParameterTypes = new ArrayList<String>(parameterTypes);
+ ApiConstructor(String name, List<String> parameterTypes, boolean deprecated) {
+ mName = name;
+ mParameterTypes = new ArrayList<String>(parameterTypes);
+ mDeprecated = deprecated;
}
+ @Override
public int compareTo(ApiConstructor another) {
return mParameterTypes.size() - another.mParameterTypes.size();
}
@@ -46,6 +50,10 @@
return Collections.unmodifiableList(mParameterTypes);
}
+ public boolean isDeprecated() {
+ return mDeprecated;
+ }
+
public boolean isCovered() {
return mIsCovered;
}
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiMethod.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiMethod.java
index eb67b8e..053cd12 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiMethod.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiMethod.java
@@ -29,14 +29,18 @@
private final String mReturnType;
+ private boolean mDeprecated;
+
private boolean mIsCovered;
- ApiMethod(String name, List<String> parameterTypes, String returnType) {
- this.mName = name;
- this.mParameterTypes = new ArrayList<String>(parameterTypes);
- this.mReturnType = returnType;
+ ApiMethod(String name, List<String> parameterTypes, String returnType, boolean deprecated) {
+ mName = name;
+ mParameterTypes = new ArrayList<String>(parameterTypes);
+ mReturnType = returnType;
+ mDeprecated = deprecated;
}
+ @Override
public int compareTo(ApiMethod another) {
return mName.compareTo(another.mName);
}
@@ -53,6 +57,10 @@
return mReturnType;
}
+ public boolean isDeprecated() {
+ return mDeprecated;
+ }
+
public boolean isCovered() {
return mIsCovered;
}
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiPackage.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiPackage.java
index f0ca889..ddc6fb4 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiPackage.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/ApiPackage.java
@@ -29,9 +29,10 @@
private final Map<String, ApiClass> mApiClassMap = new HashMap<String, ApiClass>();
ApiPackage(String name) {
- this.mName = name;
+ mName = name;
}
+ @Override
public String getName() {
return mName;
}
@@ -64,6 +65,7 @@
return total;
}
+ @Override
public float getCoveragePercentage() {
return (float) getNumCoveredMethods() / getTotalMethods() * 100;
}
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/CurrentXmlHandler.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/CurrentXmlHandler.java
index 5768e6c..f3abd86 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/CurrentXmlHandler.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/CurrentXmlHandler.java
@@ -36,6 +36,8 @@
private String mCurrentMethodReturnType;
+ private boolean mDeprecated;
+
private List<String> mCurrentParameterTypes = new ArrayList<String>();
private ApiCoverage mApiCoverage = new ApiCoverage();
@@ -49,27 +51,30 @@
throws SAXException {
super.startElement(uri, localName, name, attributes);
if ("package".equalsIgnoreCase(localName)) {
- mCurrentPackageName = CurrentXmlHandler.getValue(attributes, "name");
+ mCurrentPackageName = getValue(attributes, "name");
ApiPackage apiPackage = new ApiPackage(mCurrentPackageName);
mApiCoverage.addPackage(apiPackage);
} else if ("class".equalsIgnoreCase(localName)
|| "interface".equalsIgnoreCase(localName)) {
- mCurrentClassName = CurrentXmlHandler.getValue(attributes, "name");
+ mCurrentClassName = getValue(attributes, "name");
+ mDeprecated = isDeprecated(attributes);
- ApiClass apiClass = new ApiClass(mCurrentClassName);
+ ApiClass apiClass = new ApiClass(mCurrentClassName, mDeprecated);
ApiPackage apiPackage = mApiCoverage.getPackage(mCurrentPackageName);
apiPackage.addClass(apiClass);
} else if ("constructor".equalsIgnoreCase(localName)) {
+ mDeprecated = isDeprecated(attributes);
mCurrentParameterTypes.clear();
} else if ("method".equalsIgnoreCase(localName)) {
- mCurrentMethodName = CurrentXmlHandler.getValue(attributes, "name");
- mCurrentMethodReturnType = CurrentXmlHandler.getValue(attributes, "return");
+ mDeprecated = isDeprecated(attributes);
+ mCurrentMethodName = getValue(attributes, "name");
+ mCurrentMethodReturnType = getValue(attributes, "return");
mCurrentParameterTypes.clear();
} else if ("parameter".equalsIgnoreCase(localName)) {
- mCurrentParameterTypes.add(CurrentXmlHandler.getValue(attributes, "type"));
+ mCurrentParameterTypes.add(getValue(attributes, "type"));
}
}
@@ -82,13 +87,13 @@
return;
}
ApiConstructor apiConstructor = new ApiConstructor(mCurrentClassName,
- mCurrentParameterTypes);
+ mCurrentParameterTypes, mDeprecated);
ApiPackage apiPackage = mApiCoverage.getPackage(mCurrentPackageName);
ApiClass apiClass = apiPackage.getClass(mCurrentClassName);
apiClass.addConstructor(apiConstructor);
} else if ("method".equalsIgnoreCase(localName)) {
ApiMethod apiMethod = new ApiMethod(mCurrentMethodName, mCurrentParameterTypes,
- mCurrentMethodReturnType);
+ mCurrentMethodReturnType, mDeprecated);
ApiPackage apiPackage = mApiCoverage.getPackage(mCurrentPackageName);
ApiClass apiClass = apiPackage.getClass(mCurrentClassName);
apiClass.addMethod(apiMethod);
@@ -101,4 +106,8 @@
.replaceAll("<.+>", "")
.replace("$", ".");
}
+
+ private boolean isDeprecated(Attributes attributes) {
+ return "deprecated".equals(attributes.getValue("deprecated"));
+ }
}
\ No newline at end of file
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/HtmlReport.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/HtmlReport.java
index de9b7a6..9243fe0 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/HtmlReport.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/HtmlReport.java
@@ -37,11 +37,12 @@
class HtmlReport {
public static void printHtmlReport(final List<File> testApks, final ApiCoverage apiCoverage,
- final OutputStream out) throws IOException, TransformerException, InterruptedException {
+ final OutputStream out) throws IOException, TransformerException {
final PipedOutputStream xmlOut = new PipedOutputStream();
final PipedInputStream xmlIn = new PipedInputStream(xmlOut);
Thread t = new Thread(new Runnable() {
+ @Override
public void run() {
XmlReport.printXmlReport(testApks, apiCoverage, xmlOut);
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/XmlReport.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/XmlReport.java
index 68acf06..94ccbb4 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/XmlReport.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/XmlReport.java
@@ -72,12 +72,14 @@
out.println("<class name=\"" + apiClass.getName()
+ "\" numCovered=\"" + apiClass.getNumCoveredMethods()
+ "\" numTotal=\"" + apiClass.getTotalMethods()
+ + "\" deprecated=\"" + apiClass.isDeprecated()
+ "\" coveragePercentage=\""
+ Math.round(apiClass.getCoveragePercentage())
+ "\">");
for (ApiConstructor constructor : apiClass.getConstructors()) {
out.println("<constructor name=\"" + constructor.getName()
+ + "\" deprecated=\"" + constructor.isDeprecated()
+ "\" covered=\"" + constructor.isCovered() + "\">");
for (String parameterType : constructor.getParameterTypes()) {
@@ -90,6 +92,7 @@
for (ApiMethod method : apiClass.getMethods()) {
out.println("<method name=\"" + method.getName()
+ "\" returnType=\"" + method.getReturnType()
+ + "\" deprecated=\"" + method.isDeprecated()
+ "\" covered=\"" + method.isCovered() + "\">");
for (String parameterType : method.getParameterTypes()) {
diff --git a/tools/cts-api-coverage/src/res/api-coverage.xsl b/tools/cts-api-coverage/src/res/api-coverage.xsl
index 3743580..95994e2 100644
--- a/tools/cts-api-coverage/src/res/api-coverage.xsl
+++ b/tools/cts-api-coverage/src/res/api-coverage.xsl
@@ -71,6 +71,10 @@
.green {
background-color: #66FF66;
}
+
+ .deprecated {
+ text-decoration: line-through;
+ }
</style>
</head>
<body>
@@ -118,7 +122,7 @@
<xsl:template name="packageOrClassListItem">
<xsl:param name="bulletClass" />
-
+
<xsl:variable name="colorClass">
<xsl:choose>
<xsl:when test="@coveragePercentage <= 50">red</xsl:when>
@@ -127,8 +131,15 @@
</xsl:choose>
</xsl:variable>
+ <xsl:variable name="deprecatedClass">
+ <xsl:choose>
+ <xsl:when test="@deprecated = 'true'">deprecated</xsl:when>
+ <xsl:otherwise></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
<li class="{$bulletClass}" onclick="toggleVisibility('{@name}')">
- <span class="{$colorClass}">
+ <span class="{$colorClass} {$deprecatedClass}">
<b><xsl:value-of select="@name" /></b>
<xsl:value-of select="@coveragePercentage" />%
(<xsl:value-of select="@numCovered" />/<xsl:value-of select="@numTotal" />)
@@ -137,7 +148,15 @@
</xsl:template>
<xsl:template name="methodListItem">
- <span class="method">
+
+ <xsl:variable name="deprecatedClass">
+ <xsl:choose>
+ <xsl:when test="@deprecated = 'true'">deprecated</xsl:when>
+ <xsl:otherwise></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <span class="method {$deprecatedClass}">
<xsl:choose>
<xsl:when test="@covered = 'true'">[X]</xsl:when>
<xsl:otherwise>[ ]</xsl:otherwise>
@@ -147,7 +166,7 @@
</span>
<br />
</xsl:template>
-
+
<xsl:template name="formatParameters">(<xsl:for-each select="parameter">
<xsl:value-of select="@type" />
<xsl:if test="not(position() = last())">, </xsl:if>