Commit 43913d47 authored by Skylot's avatar Skylot

core: fix method definition

parent 9f51cabf
...@@ -110,6 +110,7 @@ public class ClassGen { ...@@ -110,6 +110,7 @@ public class ClassGen {
} }
annotationGen.addForClass(clsCode); annotationGen.addForClass(clsCode);
insertSourceFileInfo(clsCode, cls);
clsCode.startLine(af.makeString()); clsCode.startLine(af.makeString());
if (af.isInterface()) { if (af.isInterface()) {
if (af.isAnnotation()) if (af.isAnnotation())
...@@ -182,8 +183,6 @@ public class ClassGen { ...@@ -182,8 +183,6 @@ public class ClassGen {
public void makeClassBody(CodeWriter clsCode) throws CodegenException { public void makeClassBody(CodeWriter clsCode) throws CodegenException {
clsCode.add('{'); clsCode.add('{');
insertSourceFileInfo(clsCode, cls);
CodeWriter mthsCode = makeMethods(clsCode, cls.getMethods()); CodeWriter mthsCode = makeMethods(clsCode, cls.getMethods());
CodeWriter fieldsCode = makeFields(clsCode, cls, cls.getFields()); CodeWriter fieldsCode = makeFields(clsCode, cls, cls.getFields());
clsCode.add(fieldsCode); clsCode.add(fieldsCode);
...@@ -242,7 +241,9 @@ public class ClassGen { ...@@ -242,7 +241,9 @@ public class ClassGen {
LOG.error(ErrorsCounter.formatErrorMsg(mth, " Inconsistent code")); LOG.error(ErrorsCounter.formatErrorMsg(mth, " Inconsistent code"));
mthGen.makeMethodDump(code); mthGen.makeMethodDump(code);
} }
mthGen.addDefinition(code); if (mthGen.addDefinition(code)) {
code.add(' ');
}
code.add('{'); code.add('{');
insertSourceFileInfo(code, mth); insertSourceFileInfo(code, mth);
code.add(mthGen.makeInstructions(code.getIndent())); code.add(mthGen.makeInstructions(code.getIndent()));
...@@ -250,7 +251,7 @@ public class ClassGen { ...@@ -250,7 +251,7 @@ public class ClassGen {
} }
} catch (Throwable e) { } catch (Throwable e) {
String msg = ErrorsCounter.methodError(mth, "Method generation error", 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()) if (it.hasNext())
...@@ -424,7 +425,7 @@ public class ClassGen { ...@@ -424,7 +425,7 @@ public class ClassGen {
private void insertSourceFileInfo(CodeWriter code, AttrNode node) { private void insertSourceFileInfo(CodeWriter code, AttrNode node) {
IAttribute sourceFileAttr = node.getAttributes().get(AttributeType.SOURCE_FILE); IAttribute sourceFileAttr = node.getAttributes().get(AttributeType.SOURCE_FILE);
if (sourceFileAttr != null) { if (sourceFileAttr != null) {
code.startLine(1, "// compiled from: "); code.startLine("// compiled from: ");
code.add(((SourceFileAttr) sourceFileAttr).getFileName()); code.add(((SourceFileAttr) sourceFileAttr).getFileName());
} }
} }
......
...@@ -57,18 +57,17 @@ public class MethodGen { ...@@ -57,18 +57,17 @@ public class MethodGen {
return classGen; return classGen;
} }
public void addDefinition(CodeWriter code) { public boolean addDefinition(CodeWriter code) {
if (mth.getMethodInfo().isClassInit()) { if (mth.getMethodInfo().isClassInit()) {
code.startLine("static"); code.startLine("static");
code.attachAnnotation(mth); code.attachAnnotation(mth);
return; return true;
} }
if (mth.getAttributes().contains(AttributeFlag.ANONYMOUS_CONSTRUCTOR)) { if (mth.getAttributes().contains(AttributeFlag.ANONYMOUS_CONSTRUCTOR)) {
// don't add method name and arguments // don't add method name and arguments
code.startLine(); code.startLine();
code.attachAnnotation(mth); code.attachAnnotation(mth);
return; return false;
} }
annotationGen.addForMethod(code, mth); annotationGen.addForMethod(code, mth);
...@@ -110,10 +109,11 @@ public class MethodGen { ...@@ -110,10 +109,11 @@ public class MethodGen {
} }
} }
code.add(makeArguments(args)); code.add(makeArguments(args));
code.add(") "); code.add(")");
annotationGen.addThrows(mth, code); annotationGen.addThrows(mth, code);
code.attachAnnotation(mth); code.attachAnnotation(mth);
return true;
} }
public CodeWriter makeArguments(List<RegisterArg> args) { public CodeWriter makeArguments(List<RegisterArg> args) {
......
...@@ -57,5 +57,8 @@ public class TestAnnotations extends InternalJadxTest { ...@@ -57,5 +57,8 @@ public class TestAnnotations extends InternalJadxTest {
assertThat(code, containsString("@A(a = -11253)")); assertThat(code, containsString("@A(a = -11253)"));
assertThat(code, containsString("@V(false)")); assertThat(code, containsString("@V(false)"));
assertThat(code, not(containsString("@D()"))); 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% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment