|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.android.tools.lint.checks.ApiLookup
public class ApiLookup
Database for API checking: Allows quick lookup of a given class, method or field to see which API level it was introduced in.
This class is optimized for quick bytecode lookup used in conjunction with the ASM library: It has lookup methods that take internal JVM signatures, and for a method call for example it processes the owner, name and description parameters separately the way they are provided from ASM.
The Api
class provides access to the full Android API along with version
information, initialized from an XML file. This lookup class adds a binary cache around
the API to make initialization faster and to require fewer objects. It creates
a binary cache data structure, which fits in a single byte array, which means that
to open the database you can just read in the byte array and go. On one particular
machine, this takes about 30-50 ms versus 600-800ms for the full parse. It also
helps memory by placing everything in a compact byte array instead of needing separate
strings (2 bytes per character in a char[] for the 25k method entries, 11k field entries
and 6k class entries) - and it also avoids the same number of Map.Entry objects.
When creating the memory data structure it performs a few other steps to help memory:
Method Summary | |
---|---|
static ApiLookup |
get(com.android.tools.lint.client.api.LintClient client)
Returns an instance of the API database |
int |
getCallVersion(java.lang.String owner,
java.lang.String name,
java.lang.String desc)
Returns the API version required by the given method call. |
int |
getClassVersion(java.lang.String className)
Returns the API version required by the given class reference, or -1 if this is not a known API class. |
int |
getFieldVersion(java.lang.String owner,
java.lang.String name)
Returns the API version required to access the given field, or -1 if this is not a known API method. |
static boolean |
isRelevantClass(java.lang.String name)
Quick determination whether a given class name is possibly interesting; this is a quick package prefix check to determine whether we need to consider the class at all. |
static boolean |
isRelevantOwner(java.lang.String owner)
Returns true if the given owner (in VM format) is relevant to the database. |
boolean |
isValidJavaPackage(java.lang.String owner)
Returns true if the given owner (in VM format) is a valid Java package supported in any version of Android. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method Detail |
---|
@Nullable public static ApiLookup get(@NonNull com.android.tools.lint.client.api.LintClient client)
client
- the client to associate with this database - used only for
logging. The database object may be shared among repeated invocations,
and in that case client used will be the one originally passed in.
In other words, this parameter may be ignored if the client created
is not new.
public static boolean isRelevantClass(java.lang.String name)
name
- the class name in VM format (e.g. using / instead of .)
public int getClassVersion(@NonNull java.lang.String className)
className
- the internal name of the class, e.g. its
fully qualified name (as returned by Class.getName(), but with
'.' replaced by '/'.
public int getCallVersion(@NonNull java.lang.String owner, @NonNull java.lang.String name, @NonNull java.lang.String desc)
owner
, name
and desc
fields.
If the method is unknown it returns -1. Note that it may return -1 for
classes introduced in version 1; internally the database only stores
version data for version 2 and up.
owner
- the internal name of the method's owner class, e.g. its
fully qualified name (as returned by Class.getName(), but with
'.' replaced by '/'.name
- the method's namedesc
- the method's descriptor - see Type
public int getFieldVersion(@NonNull java.lang.String owner, @NonNull java.lang.String name)
owner
- the internal name of the method's owner class, e.g. its
fully qualified name (as returned by Class.getName(), but with
'.' replaced by '/'.name
- the method's name
public static boolean isRelevantOwner(@NonNull java.lang.String owner)
#getFieldVersion
etc methods.
owner
- the owner to look up
public boolean isValidJavaPackage(@NonNull java.lang.String owner)
owner
- the package, in VM format
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |