[java-decompiler] cleanup (text rearranging mode dropped)
This commit is contained in:
@@ -835,9 +835,6 @@ public class ClassWriter {
|
|||||||
// We do not have line information for method start, lets have it here for now
|
// We do not have line information for method start, lets have it here for now
|
||||||
StructLineNumberTableAttribute lineNumberTable =
|
StructLineNumberTableAttribute lineNumberTable =
|
||||||
(StructLineNumberTableAttribute)mt.getAttributes().getWithKey(StructGeneralAttribute.ATTRIBUTE_LINE_NUMBER_TABLE);
|
(StructLineNumberTableAttribute)mt.getAttributes().getWithKey(StructGeneralAttribute.ATTRIBUTE_LINE_NUMBER_TABLE);
|
||||||
if (lineNumberTable != null && DecompilerContext.getOption(IFernflowerPreferences.USE_DEBUG_LINE_NUMBERS)) {
|
|
||||||
buffer.setCurrentLine(lineNumberTable.getFirstLine() - 1);
|
|
||||||
}
|
|
||||||
buffer.append('{').appendLineSeparator();
|
buffer.append('{').appendLineSeparator();
|
||||||
tracer.incrementCurrentSourceLine();
|
tracer.incrementCurrentSourceLine();
|
||||||
|
|
||||||
@@ -851,10 +848,6 @@ public class ClassWriter {
|
|||||||
|
|
||||||
hideMethod = (clinit || dinit || hideConstructor(wrapper, init, throwsExceptions, paramCount)) && code.length() == 0;
|
hideMethod = (clinit || dinit || hideConstructor(wrapper, init, throwsExceptions, paramCount)) && code.length() == 0;
|
||||||
|
|
||||||
if (!hideMethod && lineNumberTable != null && DecompilerContext.getOption(IFernflowerPreferences.USE_DEBUG_LINE_NUMBERS)) {
|
|
||||||
mapLines(code, lineNumberTable, tracer, startLine);
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer.append(code);
|
buffer.append(code);
|
||||||
}
|
}
|
||||||
catch (Throwable ex) {
|
catch (Throwable ex) {
|
||||||
@@ -888,38 +881,6 @@ public class ClassWriter {
|
|||||||
return !hideMethod;
|
return !hideMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void mapLines(TextBuffer code, StructLineNumberTableAttribute table, BytecodeMappingTracer tracer, int startLine) {
|
|
||||||
// build line start offsets map
|
|
||||||
HashMap<Integer, Set<Integer>> lineStartOffsets = new HashMap<Integer, Set<Integer>>();
|
|
||||||
for (Map.Entry<Integer, Integer> entry : tracer.getMapping().entrySet()) {
|
|
||||||
Integer lineNumber = entry.getValue() - startLine;
|
|
||||||
Set<Integer> curr = lineStartOffsets.get(lineNumber);
|
|
||||||
if (curr == null) {
|
|
||||||
curr = new TreeSet<Integer>(); // requires natural sorting!
|
|
||||||
}
|
|
||||||
curr.add(entry.getKey());
|
|
||||||
lineStartOffsets.put(lineNumber, curr);
|
|
||||||
}
|
|
||||||
String lineSeparator = DecompilerContext.getNewLineSeparator();
|
|
||||||
StringBuilder text = code.getOriginalText();
|
|
||||||
int pos = text.indexOf(lineSeparator);
|
|
||||||
int lineNumber = 0;
|
|
||||||
while (pos != -1) {
|
|
||||||
Set<Integer> startOffsets = lineStartOffsets.get(lineNumber);
|
|
||||||
if (startOffsets != null) {
|
|
||||||
for (Integer offset : startOffsets) {
|
|
||||||
int number = table.findLineNumber(offset);
|
|
||||||
if (number >= 0) {
|
|
||||||
code.setLineMapping(number, pos);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pos = text.indexOf(lineSeparator, pos+1);
|
|
||||||
lineNumber++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean hideConstructor(ClassWrapper wrapper, boolean init, boolean throwsExceptions, int paramCount) {
|
private static boolean hideConstructor(ClassWrapper wrapper, boolean init, boolean throwsExceptions, int paramCount) {
|
||||||
if (!init || throwsExceptions || paramCount > 0 || !DecompilerContext.getOption(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR)) {
|
if (!init || throwsExceptions || paramCount > 0 || !DecompilerContext.getOption(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -156,6 +156,6 @@ public class DecompilerContext {
|
|||||||
|
|
||||||
public static String getNewLineSeparator() {
|
public static String getNewLineSeparator() {
|
||||||
return getOption(IFernflowerPreferences.NEW_LINE_SEPARATOR) ?
|
return getOption(IFernflowerPreferences.NEW_LINE_SEPARATOR) ?
|
||||||
IFernflowerPreferences.LINE_SEPARATOR_LIN : IFernflowerPreferences.LINE_SEPARATOR_WIN;
|
IFernflowerPreferences.LINE_SEPARATOR_UNX : IFernflowerPreferences.LINE_SEPARATOR_WIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,17 +42,6 @@ public class TextBuffer {
|
|||||||
myStringBuilder = new StringBuilder(text);
|
myStringBuilder = new StringBuilder(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCurrentLine(int line) {
|
|
||||||
setLineMapping(line, myStringBuilder.length()+1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLineMapping(int line, int offset) {
|
|
||||||
if (line >= 0) {
|
|
||||||
checkMapCreated();
|
|
||||||
myLineToOffsetMapping.put(line, offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TextBuffer append(String str) {
|
public TextBuffer append(String str) {
|
||||||
myStringBuilder.append(str);
|
myStringBuilder.append(str);
|
||||||
return this;
|
return this;
|
||||||
@@ -301,15 +290,12 @@ public class TextBuffer {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringBuilder getOriginalText() {
|
|
||||||
return myStringBuilder;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Map<Integer, Set<Integer>> myLineMapping = null; // new to original
|
private Map<Integer, Set<Integer>> myLineMapping = null; // new to original
|
||||||
|
|
||||||
public void dumpOriginalLineNumbers(int[] lineMapping) {
|
public void dumpOriginalLineNumbers(int[] lineMapping) {
|
||||||
if (lineMapping.length > 0) {
|
if (lineMapping.length > 0) {
|
||||||
myLineMapping = new HashMap<Integer, Set<Integer>>();
|
myLineMapping = new HashMap<Integer, Set<Integer>>();
|
||||||
for (int i = 0; i < lineMapping.length; i+=2) {
|
for (int i = 0; i < lineMapping.length; i += 2) {
|
||||||
int key = lineMapping[i + 1];
|
int key = lineMapping[i + 1];
|
||||||
Set<Integer> existing = myLineMapping.get(key);
|
Set<Integer> existing = myLineMapping.get(key);
|
||||||
if (existing == null) {
|
if (existing == null) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2000-2014 JetBrains s.r.o.
|
* Copyright 2000-2015 JetBrains s.r.o.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -44,7 +44,6 @@ public interface IFernflowerPreferences {
|
|||||||
String IDEA_NOT_NULL_ANNOTATION = "inn";
|
String IDEA_NOT_NULL_ANNOTATION = "inn";
|
||||||
String LAMBDA_TO_ANONYMOUS_CLASS = "lac";
|
String LAMBDA_TO_ANONYMOUS_CLASS = "lac";
|
||||||
String BYTECODE_SOURCE_MAPPING = "bsm";
|
String BYTECODE_SOURCE_MAPPING = "bsm";
|
||||||
String USE_DEBUG_LINE_NUMBERS = "udl";
|
|
||||||
|
|
||||||
String LOG_LEVEL = "log";
|
String LOG_LEVEL = "log";
|
||||||
String MAX_PROCESSING_METHOD = "mpm";
|
String MAX_PROCESSING_METHOD = "mpm";
|
||||||
@@ -58,7 +57,7 @@ public interface IFernflowerPreferences {
|
|||||||
String UNIT_TEST_MODE = "__unit_test_mode__";
|
String UNIT_TEST_MODE = "__unit_test_mode__";
|
||||||
|
|
||||||
String LINE_SEPARATOR_WIN = "\r\n";
|
String LINE_SEPARATOR_WIN = "\r\n";
|
||||||
String LINE_SEPARATOR_LIN = "\n";
|
String LINE_SEPARATOR_UNX = "\n";
|
||||||
|
|
||||||
Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>() {{
|
Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>() {{
|
||||||
put(REMOVE_BRIDGE, "1");
|
put(REMOVE_BRIDGE, "1");
|
||||||
@@ -83,7 +82,6 @@ public interface IFernflowerPreferences {
|
|||||||
put(IDEA_NOT_NULL_ANNOTATION, "1");
|
put(IDEA_NOT_NULL_ANNOTATION, "1");
|
||||||
put(LAMBDA_TO_ANONYMOUS_CLASS, "0");
|
put(LAMBDA_TO_ANONYMOUS_CLASS, "0");
|
||||||
put(BYTECODE_SOURCE_MAPPING, "0");
|
put(BYTECODE_SOURCE_MAPPING, "0");
|
||||||
put(USE_DEBUG_LINE_NUMBERS, "0");
|
|
||||||
|
|
||||||
put(LOG_LEVEL, IFernflowerLogger.Severity.INFO.name());
|
put(LOG_LEVEL, IFernflowerLogger.Severity.INFO.name());
|
||||||
put(MAX_PROCESSING_METHOD, "0");
|
put(MAX_PROCESSING_METHOD, "0");
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2000-2014 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.jetbrains.java.decompiler;
|
|
||||||
|
|
||||||
import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class LineNumbersMatchTest extends SingleClassesTestBase {
|
|
||||||
@Override
|
|
||||||
protected Map<String, Object> getDecompilerOptions() {
|
|
||||||
return new HashMap<String, Object>() {{
|
|
||||||
put(IFernflowerPreferences.USE_DEBUG_LINE_NUMBERS, "1");
|
|
||||||
}};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test public void testMatch1() { doTest("pkg/TestLineNumbersMatch"); }
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -1,22 +0,0 @@
|
|||||||
package pkg;
|
|
||||||
|
|
||||||
class TestLineNumbersMatch {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void m1(boolean b) {
|
|
||||||
if(b) {
|
|
||||||
System.out.println("a");
|
|
||||||
} else {
|
|
||||||
System.out.println("b");
|
|
||||||
} }
|
|
||||||
|
|
||||||
void m2() {
|
|
||||||
(new Runnable() {
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
System.out.println("run with me");
|
|
||||||
}
|
|
||||||
}).run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* Weird comment here.
|
|
||||||
*/
|
|
||||||
package pkg;
|
|
||||||
|
|
||||||
class TestLineNumbersMatch {
|
|
||||||
void m1(boolean b) {
|
|
||||||
if (b)
|
|
||||||
System.out.println("a");
|
|
||||||
else
|
|
||||||
System.out.println("b");
|
|
||||||
}
|
|
||||||
|
|
||||||
void m2() {
|
|
||||||
new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
System.out.println("run with me");
|
|
||||||
}
|
|
||||||
}.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user