Skip to content

Commit 8944762

Browse files
committed
Delegate statement semicolon appending to plugins when possible
1 parent 2e50dff commit 8944762

File tree

5 files changed

+31
-3
lines changed

5 files changed

+31
-3
lines changed

plugins/kotlin/src/main/java/org/vineflower/kotlin/KotlinChooser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public boolean isLanguage(StructClass cl) {
4343
StructAnnotationAttribute attr = cl.getAttribute((Key<StructAnnotationAttribute>) key);
4444
for (AnnotationExprent anno : attr.getAnnotations()) {
4545
if (anno.getClassName().equals("kotlin/Metadata")) {
46-
setContextVariables(cl);
46+
// setContextVariables(cl);
4747
return true;
4848
}
4949
}

plugins/kotlin/src/main/java/org/vineflower/kotlin/KotlinWriter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ public KotlinWriter() {
9292
javadocProvider = (IFabricJavadocProvider) DecompilerContext.getProperty(IFabricJavadocProvider.PROPERTY_NAME);
9393
}
9494

95+
@Override
96+
public boolean endsWithSemicolon(Exprent expr) {
97+
return false;
98+
}
99+
95100
private boolean invokeProcessors(TextBuffer buffer, ClassNode node) {
96101
ClassWrapper wrapper = node.getWrapper();
97102
if (wrapper == null) {

src/org/jetbrains/java/decompiler/api/plugin/StatementWriter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.jetbrains.java.decompiler.main.ClassesProcessor;
44
import org.jetbrains.java.decompiler.main.collectors.ImportCollector;
55
import org.jetbrains.java.decompiler.main.rels.ClassWrapper;
6+
import org.jetbrains.java.decompiler.modules.decompiler.exps.Exprent;
67
import org.jetbrains.java.decompiler.struct.StructClass;
78
import org.jetbrains.java.decompiler.struct.StructField;
89
import org.jetbrains.java.decompiler.struct.StructMethod;
@@ -16,4 +17,6 @@ public interface StatementWriter {
1617
void writeField(ClassWrapper wrapper, StructClass cl, StructField fd, TextBuffer buffer, int indent);
1718

1819
boolean writeMethod(ClassesProcessor.ClassNode node, StructMethod mt, int methodIndex, TextBuffer buffer, int indent);
20+
21+
boolean endsWithSemicolon(Exprent expr);
1922
}

src/org/jetbrains/java/decompiler/main/ClassWriter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public ClassWriter() {
6363
javadocProvider = (IFabricJavadocProvider) DecompilerContext.getProperty(IFabricJavadocProvider.PROPERTY_NAME);
6464
}
6565

66+
public boolean endsWithSemicolon(Exprent expr) {
67+
return !(expr instanceof SwitchHeadExprent ||
68+
expr instanceof MonitorExprent ||
69+
expr instanceof IfExprent ||
70+
(expr instanceof VarExprent && ((VarExprent)expr).isClassDef()));
71+
}
72+
6673
private static boolean invokeProcessors(TextBuffer buffer, ClassNode node) {
6774
ClassWrapper wrapper = node.getWrapper();
6875
if (wrapper == null) {

src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
22
package org.jetbrains.java.decompiler.modules.decompiler;
33

4+
import org.jetbrains.java.decompiler.api.Decompiler;
5+
import org.jetbrains.java.decompiler.api.plugin.LanguageSpec;
6+
import org.jetbrains.java.decompiler.api.plugin.StatementWriter;
47
import org.jetbrains.java.decompiler.code.CodeConstants;
58
import org.jetbrains.java.decompiler.code.Instruction;
69
import org.jetbrains.java.decompiler.code.InstructionSequence;
710
import org.jetbrains.java.decompiler.code.cfg.BasicBlock;
811
import org.jetbrains.java.decompiler.main.DecompilerContext;
912
import org.jetbrains.java.decompiler.main.collectors.ImportCollector;
13+
import org.jetbrains.java.decompiler.main.plugins.PluginContext;
1014
import org.jetbrains.java.decompiler.modules.decompiler.flow.DirectEdgeType;
1115
import org.jetbrains.java.decompiler.struct.gen.CodeType;
1216
import org.jetbrains.java.decompiler.util.collections.ListStack;
@@ -877,6 +881,9 @@ public static TextBuffer listToJava(List<? extends Exprent> lst, int indent) {
877881
return new TextBuffer();
878882
}
879883

884+
StructClass cl = DecompilerContext.getContextProperty(DecompilerContext.CURRENT_CLASS);
885+
LanguageSpec spec = PluginContext.getCurrentContext().getLanguageSpec(cl);
886+
880887
TextBuffer buf = new TextBuffer();
881888
lst = Exprent.sortIndexed(lst);
882889

@@ -898,8 +905,14 @@ public static TextBuffer listToJava(List<? extends Exprent> lst, int indent) {
898905
if (expr instanceof MonitorExprent && ((MonitorExprent)expr).getMonType() == MonitorExprent.Type.ENTER) {
899906
buf.append("{} // $VF: monitorenter "); // empty synchronized block
900907
}
901-
if (endsWithSemicolon(expr)) {
902-
buf.append(";");
908+
if (spec != null) {
909+
if (spec.writer.endsWithSemicolon(expr)) {
910+
buf.append(';');
911+
}
912+
} else {
913+
if (endsWithSemicolon(expr)) {
914+
buf.append(';');
915+
}
903916
}
904917
buf.appendLineSeparator();
905918
}

0 commit comments

Comments
 (0)