IJ-CR-153375 [java-decompiler] IDEA-289211 set limits for some cases in decompiler

- change messages
- add test cases

GitOrigin-RevId: 8347f136818567abccf56a4c110b77456870fd4e
This commit is contained in:
Mikhail Pyltsin
2025-01-28 12:41:42 +00:00
committed by intellij-monorepo-bot
parent 9bc89d57d1
commit 0c6294eea6
5 changed files with 21 additions and 19 deletions
@@ -27,8 +27,6 @@ action.show.decompiled.name=Show Decompiled Class
decompiling.progress=Decompiling {0}
max.direct.nodes.count.message=Limits for direct nodes are exceeded, limits can be increased in Settings->Advanced settings->Java Bytecode Decompiler
max.variable.nodes.count.message=Limits for variable nodes are exceeded, limits can be increased in Settings->Advanced settings->Java Bytecode Decompiler
advanced.setting.decompiler.max.direct.nodes.count=Max count of direct nodes
advanced.setting.decompiler.max.variable.nodes.count=Max count of variable nodes
advanced.setting.group.decompiler=Java Bytecode Decompiler
@@ -131,10 +131,7 @@ class IdeaDecompiler : ClassFileDecompilers.Light() {
if (Registry.`is`("decompiler.dump.original.lines")) {
options[IFernflowerPreferences.DUMP_ORIGINAL_LINES] = "1"
}
options[IFernflowerPreferences.MAX_DIRECT_NODES_COUNT_MESSAGE] = IdeaDecompilerBundle.message("max.direct.nodes.count.message")
options[IFernflowerPreferences.MAX_DIRECT_NODES_COUNT] = AdvancedSettings.getInt("decompiler.max.direct.nodes.count")
options[IFernflowerPreferences.MAX_DIRECT_VARIABLE_NODES_COUNT_MESSAGE] = IdeaDecompilerBundle.message("max.variable.nodes.count.message")
options[IFernflowerPreferences.MAX_DIRECT_VARIABLE_NODE_COUNT] = AdvancedSettings.getInt("decompiler.max.variable.nodes.count")
val provider = MyBytecodeProvider(files)
@@ -80,6 +80,11 @@ class IdeaDecompilerTest : LightJavaCodeInsightFixtureTestCase() {
val file = getTestFile("${IdeaTestUtil.getMockJdk18Path().path}/jre/lib/rt.jar!/java/lang/String.class")
val decompiled = IdeaDecompiler().getText(file).toString()
assertTrue(decompiled, decompiled.contains("Limits for direct nodes are exceeded"))
//small methods are decompiled normally
assertTrue(decompiled, decompiled.contains("""
public String(char[] var1) {
this.value = Arrays.copyOf(var1, var1.length);
}""".trimIndent()))
}
finally {
AdvancedSettings.setInt(advancedSetting, previousCount)
@@ -94,6 +99,14 @@ class IdeaDecompilerTest : LightJavaCodeInsightFixtureTestCase() {
val file = getTestFile("${IdeaTestUtil.getMockJdk18Path().path}/jre/lib/rt.jar!/java/lang/String.class")
val decompiled = IdeaDecompiler().getText(file).toString()
assertTrue(decompiled, decompiled.contains("Limits for variable nodes are exceeded"))
//small methods are decompiled normally
assertTrue(decompiled, decompiled.contains(
"""
public char[] toCharArray() {
char[] var1 = new char[this.value.length];
System.arraycopy(this.value, 0, var1, 0, this.value.length);
return var1;
}""".trimIndent()))
}
finally {
AdvancedSettings.setInt(advancedSetting, previousCount)