提交 43913d47 编写于 作者: S Skylot

core: fix method definition

上级 9f51cabf
......@@ -110,6 +110,7 @@ public class ClassGen {
}
annotationGen.addForClass(clsCode);
insertSourceFileInfo(clsCode, cls);
clsCode.startLine(af.makeString());
if (af.isInterface()) {
if (af.isAnnotation())
......@@ -182,8 +183,6 @@ public class ClassGen {
public void makeClassBody(CodeWriter clsCode) throws CodegenException {
clsCode.add('{');
insertSourceFileInfo(clsCode, cls);
CodeWriter mthsCode = makeMethods(clsCode, cls.getMethods());
CodeWriter fieldsCode = makeFields(clsCode, cls, cls.getFields());
clsCode.add(fieldsCode);
......@@ -242,7 +241,9 @@ public class ClassGen {
LOG.error(ErrorsCounter.formatErrorMsg(mth, " Inconsistent code"));
mthGen.makeMethodDump(code);
}
mthGen.addDefinition(code);
if (mthGen.addDefinition(code)) {
code.add(' ');
}
code.add('{');
insertSourceFileInfo(code, mth);
code.add(mthGen.makeInstructions(code.getIndent()));
......@@ -250,7 +251,7 @@ public class ClassGen {
}
} catch (Throwable e) {
String msg = ErrorsCounter.methodError(mth, "Method generation error", e);
code.startLine("/* " + msg + CodeWriter.NL + Utils.getStackTrace(e) + "*/");
code.startLine("/* " + msg + CodeWriter.NL + Utils.getStackTrace(e) + " */");
}
if (it.hasNext())
......@@ -424,7 +425,7 @@ public class ClassGen {
private void insertSourceFileInfo(CodeWriter code, AttrNode node) {
IAttribute sourceFileAttr = node.getAttributes().get(AttributeType.SOURCE_FILE);
if (sourceFileAttr != null) {
code.startLine(1, "// compiled from: ");
code.startLine("// compiled from: ");
code.add(((SourceFileAttr) sourceFileAttr).getFileName());
}
}
......
......@@ -57,18 +57,17 @@ public class MethodGen {
return classGen;
}
public void addDefinition(CodeWriter code) {
public boolean addDefinition(CodeWriter code) {
if (mth.getMethodInfo().isClassInit()) {
code.startLine("static");
code.attachAnnotation(mth);
return;
return true;
}
if (mth.getAttributes().contains(AttributeFlag.ANONYMOUS_CONSTRUCTOR)) {
// don't add method name and arguments
code.startLine();
code.attachAnnotation(mth);
return;
return false;
}
annotationGen.addForMethod(code, mth);
......@@ -110,10 +109,11 @@ public class MethodGen {
}
}
code.add(makeArguments(args));
code.add(") ");
code.add(")");
annotationGen.addThrows(mth, code);
code.attachAnnotation(mth);
return true;
}
public CodeWriter makeArguments(List<RegisterArg> args) {
......
......@@ -57,5 +57,8 @@ public class TestAnnotations extends InternalJadxTest {
assertThat(code, containsString("@A(a = -11253)"));
assertThat(code, containsString("@V(false)"));
assertThat(code, not(containsString("@D()")));
assertThat(code, containsString("int a();"));
assertThat(code, containsString("float value() default 1.1f;"));
}
}
package jadx.tests.internal;
import jadx.api.InternalJadxTest;
import jadx.core.dex.nodes.ClassNode;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
public class TestStaticMethod extends InternalJadxTest {
public static class TestCls {
static {
f();
}
private static void f() {
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
String code = cls.getCode().toString();
assertThat(code, containsString("static {"));
assertThat(code, containsString("private static void f() {"));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册