Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public boolean visit(ClassNode cls) throws JadxException {
try {
return decompilePass.visit(cls);
} catch (Throwable e) {
LOG.error("Error in decompile pass: {}, class: {}", this, cls, e);
cls.addError("Error in decompile pass: " + this, e);
return false;
}
}
Expand All @@ -49,7 +49,7 @@ public void visit(MethodNode mth) throws JadxException {
try {
decompilePass.visit(mth);
} catch (Throwable e) {
LOG.error("Error in decompile pass: {}, method: {}", this, mth, e);
mth.addError("Error in decompile pass: " + this, e);
}
}

Expand Down
8 changes: 8 additions & 0 deletions jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
Expand Down Expand Up @@ -744,4 +745,11 @@ protected JavaVariable toJavaVariable(VarNode varNode) {
assertThat(javaVariable).isNotNull();
return javaVariable;
}

public File getResourceFile(String filePath) {
URL resource = getClass().getClassLoader().getResource(filePath);
assertThat(resource).as("Resource not found: %s", filePath).isNotNull();
String resPath = resource.getFile();
return new File(resPath);
}
}
3 changes: 2 additions & 1 deletion jadx-plugins/jadx-kotlin-metadata/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ plugins {
dependencies {
api(project(":jadx-core"))

implementation("org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.9.0")
implementation("org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20")

testImplementation(project.project(":jadx-core").sourceSets.getByName("test").output)
testImplementation("org.apache.commons:commons-lang3:3.19.0")

testRuntimeOnly(project(":jadx-plugins:jadx-smali-input"))
testRuntimeOnly(project(":jadx-plugins:jadx-java-input"))
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package jadx.plugins.kotlin.metadata.utils

import jadx.core.dex.nodes.ClassNode
import kotlinx.metadata.KmClass
import kotlinx.metadata.isData
import kotlinx.metadata.jvm.KotlinClassMetadata
import kotlin.metadata.KmClass
import kotlin.metadata.isData
import kotlin.metadata.jvm.KotlinClassMetadata

// don't expose kotlinx.metadata.* types ?
class KmClassWrapper private constructor(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package jadx.plugins.kotlin.metadata.utils

import kotlinx.metadata.KmFunction
import kotlinx.metadata.KmProperty
import kotlinx.metadata.jvm.fieldSignature
import kotlinx.metadata.jvm.signature
import kotlin.metadata.KmFunction
import kotlin.metadata.KmProperty
import kotlin.metadata.jvm.fieldSignature
import kotlin.metadata.jvm.signature

inline val KmFunction.shortId: String? get() = signature?.toString()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import jadx.api.plugins.input.data.annotations.EncodedValue
import jadx.api.plugins.input.data.annotations.IAnnotation
import jadx.core.dex.nodes.ClassNode
import jadx.plugins.kotlin.metadata.model.KotlinMetadataConsts
import kotlinx.metadata.jvm.KotlinClassMetadata
import kotlinx.metadata.jvm.Metadata
import kotlin.metadata.jvm.KotlinClassMetadata
import kotlin.metadata.jvm.Metadata

fun ClassNode.getMetadata(): Metadata? {
val annotation: IAnnotation? = getAnnotation(KotlinMetadataConsts.KOTLIN_METADATA_ANNOTATION)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import jadx.plugins.kotlin.metadata.model.ClassAliasRename
import jadx.plugins.kotlin.metadata.model.CompanionRename
import jadx.plugins.kotlin.metadata.model.FieldRename
import jadx.plugins.kotlin.metadata.model.MethodArgRename
import kotlinx.metadata.KmClass
import kotlin.metadata.KmClass

object KotlinMetadataUtils {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package jadx.plugins.kotlin.metadata.tests

import jadx.tests.api.IntegrationTest
import jadx.tests.api.utils.assertj.JadxAssertions.assertThat
import org.junit.jupiter.api.Test

class TestJavaParser : IntegrationTest() {

@Test
fun test() {
val sampleCls = getResourceFile("samples/MainKt.class")
assertThat(getClassNodeFromFiles(listOf(sampleCls), "MainKt"))
.code()
.doesNotContain("Exception occurred when reading Kotlin metadata")
}
}
Binary file not shown.