# HG changeset patch # User Michael Starzinger # Date 1301522659 -7200 # Node ID 75d12be4d1eab4effae8aad2bb7f5ac7798bfeb3 # Parent ff944d4bdfb7dfc369dd4c64414df782ea1e4922 Adapted parser interface to allow skipping. * dex/DexReader.java (accept): Added skip flags parameter. * dex/DexFile.java: Adapted to above change. * rewriter/DexRewriter.java: Likewise. diff -r ff944d4bdfb7 -r 75d12be4d1ea src/main/java/org/icedrobot/daneel/dex/DexFile.java --- a/src/main/java/org/icedrobot/daneel/dex/DexFile.java Wed Mar 30 23:40:28 2011 +0200 +++ b/src/main/java/org/icedrobot/daneel/dex/DexFile.java Thu Mar 31 00:04:19 2011 +0200 @@ -263,17 +263,13 @@ return buffer; } + @Override public String toString() { return header.toString(); } - /** - * Allows the given visitor to visit this DEX file. - * - * @param visitor The given DEX file visitor object. - */ @Override - public void accept(DexFileVisitor visitor) { + public void accept(DexFileVisitor visitor, int skip) { for (ClassDef classDef : classDefs.values()) { DexClassVisitor dcv = visitor.visitClass(classDef.getClassName()); if (dcv != null) @@ -282,16 +278,8 @@ visitor.visitEnd(); } - /** - * Allows the given visitor to visit a class inside this DEX file. - * - * @param className The name of the class to visit as a type descriptor. - * @param visitor The given DEX class visitor object. - * @throws ClassNotFoundException In case the given class is not defined - * inside this DEX file. - */ @Override - public void accept(String className, DexClassVisitor visitor) + public void accept(String className, DexClassVisitor visitor, int skip) throws ClassNotFoundException { ClassDef classDef = classDefs.get(className); if (classDef == null) diff -r ff944d4bdfb7 -r 75d12be4d1ea src/main/java/org/icedrobot/daneel/dex/DexReader.java --- a/src/main/java/org/icedrobot/daneel/dex/DexReader.java Wed Mar 30 23:40:28 2011 +0200 +++ b/src/main/java/org/icedrobot/daneel/dex/DexReader.java Thu Mar 31 00:04:19 2011 +0200 @@ -38,11 +38,41 @@ package org.icedrobot.daneel.dex; /** - * Common interface of DEX file reader. + * A common interface of a DEX file reader which is able to accept visitors. One + * implementation of such a reader is {@link DexFile}, which parses given DEX + * files. */ public interface DexReader { - public void accept(DexFileVisitor dv); + + /** Skip no information. Default behavior. */ + public static final int SKIP_NONE = 0; + + /** Skip {@code code_item} information. */ + public static final int SKIP_CODE = 0x1; + + /** Skip {@code debug_info_item} information. */ + public static final int SKIP_DEBUGINFO = 0x2; + + /** Skip {@code annotations_directory_item} information. */ + public static final int SKIP_ANNOTATIONS = 0x4; - public void accept(String className, DexClassVisitor cv) + /** + * Allows the given visitor to visit this DEX file. + * + * @param visitor The given DEX file visitor object. + * @param skip Flags indicating which information to skip while visiting. + */ + public void accept(DexFileVisitor visitor, int skip); + + /** + * Allows the given visitor to visit a class inside this DEX file. + * + * @param className The name of the class to visit as a type descriptor. + * @param visitor The given DEX class visitor object. + * @param skip Flags indicating which information to skip while visiting. + * @throws ClassNotFoundException In case the given class is not defined + * inside this DEX file. + */ + public void accept(String className, DexClassVisitor visitor, int skip) throws ClassNotFoundException; -} \ No newline at end of file +} diff -r ff944d4bdfb7 -r 75d12be4d1ea src/main/java/org/icedrobot/daneel/rewriter/DexRewriter.java --- a/src/main/java/org/icedrobot/daneel/rewriter/DexRewriter.java Wed Mar 30 23:40:28 2011 +0200 +++ b/src/main/java/org/icedrobot/daneel/rewriter/DexRewriter.java Thu Mar 31 00:04:19 2011 +0200 @@ -88,7 +88,7 @@ public static byte[] rewrite(String name, DexReader reader) throws ClassNotFoundException { ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); - reader.accept("L" + name.replace('.', '/') + ";", new DexRewriter(writer)); + reader.accept("L" + name.replace('.', '/') + ";", new DexRewriter(writer), 0); return writer.toByteArray(); } diff -r ff944d4bdfb7 -r 75d12be4d1ea src/main/java/org/icedrobot/daneel/rewriter/Main.java --- a/src/main/java/org/icedrobot/daneel/rewriter/Main.java Wed Mar 30 23:40:28 2011 +0200 +++ b/src/main/java/org/icedrobot/daneel/rewriter/Main.java Thu Mar 31 00:04:19 2011 +0200 @@ -65,7 +65,7 @@ protected Class findClass(String name) throws ClassNotFoundException { ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); - dexReader.accept('L'+name.replace('.', '/')+';', new DexRewriter(writer)); + dexReader.accept('L'+name.replace('.', '/')+';', new DexRewriter(writer), 0); byte[] array = writer.toByteArray(); CheckClassAdapter.verify(new ClassReader(array), true,