AI 149620: mkstubs should ignore all the methods/fields/classes with default access.
External bug: http://code.google.com/p/android/issues/detail?id=2806 BUG=1901455 Automated import of CL 149620
This commit is contained in:
committed by
The Android Open Source Project
parent
c91e5f15ba
commit
c3c97d1db3
@@ -26,7 +26,7 @@ import org.objectweb.asm.Opcodes;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A class visitor that filters out all members (fields, methods and inner classes) that are
|
* A class visitor that filters out all members (fields, methods and inner classes) that are
|
||||||
* either private or rejected by the {@link Filter}.
|
* either private, default-access or rejected by the {@link Filter}.
|
||||||
*/
|
*/
|
||||||
class FilterClassAdapter extends ClassAdapter {
|
class FilterClassAdapter extends ClassAdapter {
|
||||||
|
|
||||||
@@ -50,12 +50,12 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
public void visitEnd() {
|
public void visitEnd() {
|
||||||
super.visitEnd();
|
super.visitEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Visits a field.
|
* Visits a field.
|
||||||
*
|
*
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
* name = mArg
|
* name = mArg
|
||||||
* desc = Ljava/Lang/String;
|
* desc = Ljava/Lang/String;
|
||||||
@@ -64,11 +64,11 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public FieldVisitor visitField(int access, String name, String desc,
|
public FieldVisitor visitField(int access, String name, String desc,
|
||||||
String signature, Object value) {
|
String signature, Object value) {
|
||||||
// exclude private fields
|
// only accept public/protected fields
|
||||||
if ((access & Opcodes.ACC_PRIVATE) != 0) {
|
if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter on field name
|
// filter on field name
|
||||||
String filterName = String.format("%s#%s", mClassName, name);
|
String filterName = String.format("%s#%s", mClassName, name);
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
System.out.println("- Remove field " + filterName);
|
System.out.println("- Remove field " + filterName);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO we should produce an error if a filtered desc/signature is being used.
|
// TODO we should produce an error if a filtered desc/signature is being used.
|
||||||
|
|
||||||
return super.visitField(access, name, desc, signature, value);
|
return super.visitField(access, name, desc, signature, value);
|
||||||
@@ -84,9 +84,9 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Visits a method.
|
* Visits a method.
|
||||||
*
|
*
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
* name = <init>
|
* name = <init>
|
||||||
* desc = ()V
|
* desc = ()V
|
||||||
@@ -96,11 +96,11 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
public MethodVisitor visitMethod(int access, String name, String desc,
|
public MethodVisitor visitMethod(int access, String name, String desc,
|
||||||
String signature, String[] exceptions) {
|
String signature, String[] exceptions) {
|
||||||
|
|
||||||
// exclude private methods
|
// only accept public/protected methods
|
||||||
if ((access & Opcodes.ACC_PRIVATE) != 0) {
|
if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter on method name using the non-generic descriptor
|
// filter on method name using the non-generic descriptor
|
||||||
String filterName = String.format("%s#%s%s", mClassName, name, desc);
|
String filterName = String.format("%s#%s%s", mClassName, name, desc);
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
// filter on method name using the generic signature
|
// filter on method name using the generic signature
|
||||||
if (signature != null) {
|
if (signature != null) {
|
||||||
filterName = String.format("%s#%s%s", mClassName, name, signature);
|
filterName = String.format("%s#%s%s", mClassName, name, signature);
|
||||||
|
|
||||||
if (!mFilter.accept(filterName)) {
|
if (!mFilter.accept(filterName)) {
|
||||||
System.out.println("- Remove method " + filterName);
|
System.out.println("- Remove method " + filterName);
|
||||||
return null;
|
return null;
|
||||||
@@ -126,7 +126,7 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
|
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
|
||||||
|
|
||||||
// TODO produce an error if a filtered annotation type is being used
|
// TODO produce an error if a filtered annotation type is being used
|
||||||
return super.visitAnnotation(desc, visible);
|
return super.visitAnnotation(desc, visible);
|
||||||
}
|
}
|
||||||
@@ -139,8 +139,8 @@ class FilterClassAdapter extends ClassAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public void visitInnerClass(String name, String outerName, String innerName, int access) {
|
public void visitInnerClass(String name, String outerName, String innerName, int access) {
|
||||||
|
|
||||||
// exclude private methods
|
// only accept public/protected inner classes
|
||||||
if ((access & Opcodes.ACC_PRIVATE) != 0) {
|
if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user