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:
Xavier Ducrohet
2009-06-05 17:06:37 -07:00
committed by The Android Open Source Project
parent c91e5f15ba
commit c3c97d1db3

View File

@@ -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;
} }