mirror of
https://github.com/pxb1988/dex2jar.git
synced 2024-11-23 05:10:11 +00:00
update antlr to 4.9.3 (#599)
Co-authored-by: Nico Mexis <nico.mexis@kabelmail.de>
This commit is contained in:
parent
7fafa42fa6
commit
ee63470357
@ -1,9 +1,9 @@
|
||||
apply plugin: 'antlr'
|
||||
|
||||
dependencies {
|
||||
compile 'org.antlr:antlr4-runtime:4.5'
|
||||
compile 'org.antlr:antlr4-runtime:4.9.3' // Newer versions only for Java 11+
|
||||
compile project(':dex-reader')
|
||||
antlr 'org.antlr:antlr4:4.5'
|
||||
antlr 'org.antlr:antlr4:4.9.3' // Newer versions only for Java 11+
|
||||
compile project(':d2j-base-cmd')
|
||||
compile project(':dex-writer')
|
||||
testImplementation "com.android.tools.smali:smali-baksmali:3.0.3"
|
||||
|
@ -33,7 +33,7 @@ HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
|
||||
|
||||
fragment
|
||||
ESC_SEQ
|
||||
: '\\' ('b'|'t'|'n'|'f'|'r'|'\''|'\"'|'\\')
|
||||
: '\\' ('b'|'t'|'n'|'f'|'r'|'\''|'"'|'\\')
|
||||
| UNICODE_ESC
|
||||
| OCTAL_ESC
|
||||
;
|
||||
@ -58,7 +58,7 @@ fragment
|
||||
FRAGMENT_ARRAY_TYPE: ('[')+ (FRAGMENT_PRIMITIVE_TYPE|FRAGMENT_OBJECT_TYPE);
|
||||
|
||||
fragment
|
||||
FRAGMENT_ID: (ESC_SEQ| ~('\\'|'\r'|'\n'|'\t'|' '|':'|'-'|'='|','|'{'|'}'|'('|')'|'+'|'\"'|'\''|'#'|'/'|'.'|';'|'@'))+;
|
||||
FRAGMENT_ID: (ESC_SEQ| ~('\\'|'\r'|'\n'|'\t'|' '|':'|'-'|'='|','|'{'|'}'|'('|')'|'+'|'"'|'\''|'#'|'/'|'.'|';'|'@'))+;
|
||||
fragment
|
||||
FRAGMENT_METHOD_PROTO: '(' (FRAGMENT_OBJECT_TYPE|FRAGMENT_ARRAY_TYPE|FRAGMENT_PRIMITIVE_TYPE)* ')' ('V' | FRAGMENT_OBJECT_TYPE|FRAGMENT_ARRAY_TYPE|FRAGMENT_PRIMITIVE_TYPE)
|
||||
;
|
||||
|
@ -21,7 +21,11 @@ import com.googlecode.d2j.node.DexFileNode;
|
||||
import com.googlecode.d2j.smali.antlr4.SmaliLexer;
|
||||
import com.googlecode.d2j.smali.antlr4.SmaliParser;
|
||||
import com.googlecode.d2j.visitors.DexFileVisitor;
|
||||
import org.antlr.v4.runtime.*;
|
||||
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CodePointCharStream;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -37,22 +41,19 @@ import java.nio.file.attribute.BasicFileAttributes;
|
||||
public class Smali {
|
||||
public static void smaliFile(Path path, DexFileVisitor dcv) throws IOException {
|
||||
try (Reader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
|
||||
ANTLRInputStream is = new ANTLRInputStream(reader);
|
||||
is.name = path.toString();
|
||||
CodePointCharStream is = CharStreams.fromReader(reader, path.toString());
|
||||
smali0(dcv, is);
|
||||
}
|
||||
}
|
||||
|
||||
public static void smaliFile(String name, String buff, DexFileVisitor dcv) throws IOException {
|
||||
ANTLRInputStream is = new ANTLRInputStream(buff);
|
||||
is.name = name;
|
||||
public static void smaliFile(String name, String buff, DexFileVisitor dcv) {
|
||||
CodePointCharStream is = CharStreams.fromString(buff, name);
|
||||
smali0(dcv, is);
|
||||
}
|
||||
|
||||
public static void smaliFile(String name, InputStream in, DexFileVisitor dcv) throws IOException {
|
||||
try (InputStreamReader reader = new InputStreamReader(in, StandardCharsets.UTF_8)) {
|
||||
ANTLRInputStream is = new ANTLRInputStream(reader);
|
||||
is.name = name;
|
||||
CodePointCharStream is = CharStreams.fromReader(reader, name);
|
||||
smali0(dcv, is);
|
||||
}
|
||||
}
|
||||
@ -63,13 +64,13 @@ public class Smali {
|
||||
return dfn.clzs.size() > 0 ? dfn.clzs.get(0) : null;
|
||||
}
|
||||
|
||||
public static DexClassNode smaliFile2Node(String name, String buff) throws IOException {
|
||||
public static DexClassNode smaliFile2Node(String name, String buff) {
|
||||
DexFileNode dfn = new DexFileNode();
|
||||
smaliFile(name, buff, dfn);
|
||||
return dfn.clzs.size() > 0 ? dfn.clzs.get(0) : null;
|
||||
}
|
||||
|
||||
private static void smali0(DexFileVisitor dcv, CharStream is) throws IOException {
|
||||
private static void smali0(DexFileVisitor dcv, CharStream is) {
|
||||
SmaliLexer lexer = new SmaliLexer(is);
|
||||
CommonTokenStream ts = new CommonTokenStream(lexer);
|
||||
SmaliParser parser = new SmaliParser(ts);
|
||||
@ -79,10 +80,9 @@ public class Smali {
|
||||
}
|
||||
}
|
||||
|
||||
public static void smaliFile(String fileName, char[] data, DexFileVisitor dcv) throws IOException {
|
||||
public static void smaliFile(String fileName, char[] data, DexFileVisitor dcv) {
|
||||
// System.err.println("parsing " + f.getAbsoluteFile());
|
||||
ANTLRInputStream is = new ANTLRInputStream(data, data.length);
|
||||
is.name = fileName;
|
||||
CodePointCharStream is = CharStreams.fromString(new String(data), fileName);
|
||||
smali0(dcv, is);
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,10 @@ public class SmaliTest {
|
||||
for (File f : fs) {
|
||||
if (f.getName().endsWith(".dex") || f.getName().endsWith(".apk")) {
|
||||
System.out.println(f.getName());
|
||||
if (f.getName().equals("dex040.dex")) {
|
||||
// FIXME smali 3.0.3 not support space in SimpleName
|
||||
continue;
|
||||
}
|
||||
dotest(f);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user