core: fix method definition
This commit is contained in:
@@ -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;"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
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() {"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user