diff --git a/src/org/jetbrains/java/decompiler/main/ClassWriter.java b/src/org/jetbrains/java/decompiler/main/ClassWriter.java index bdc2afa..2b61dc2 100644 --- a/src/org/jetbrains/java/decompiler/main/ClassWriter.java +++ b/src/org/jetbrains/java/decompiler/main/ClassWriter.java @@ -220,7 +220,7 @@ public class ClassWriter { } // FIXME: fields don't matter at the moment - total_offset_lines = buffer.substring(start_class_def).toString().split(lineSeparator, -1).length - 1; + total_offset_lines = buffer.count(lineSeparator, start_class_def); // methods for (StructMethod mt : cl.getMethods()) { @@ -812,8 +812,7 @@ public class ClassWriter { if (root != null && !methodWrapper.decompiledWithErrors) { // check for existence try { - - tracer.incrementCurrentSourceLine(buffer.substring(start_index_method).split(lineSeparator, -1).length - 1); + tracer.incrementCurrentSourceLine(buffer.count(lineSeparator, start_index_method)); String code = root.toJava(indent + 1, tracer); @@ -842,7 +841,7 @@ public class ClassWriter { // save total lines // TODO: optimize - tracer.setCurrentSourceLine(buffer.substring(start_index_method).split(lineSeparator, -1).length - 1); + tracer.setCurrentSourceLine(buffer.count(lineSeparator, start_index_method)); return !hideMethod; } diff --git a/src/org/jetbrains/java/decompiler/main/TextBuffer.java b/src/org/jetbrains/java/decompiler/main/TextBuffer.java index 32766ca..7dd3d2f 100644 --- a/src/org/jetbrains/java/decompiler/main/TextBuffer.java +++ b/src/org/jetbrains/java/decompiler/main/TextBuffer.java @@ -17,7 +17,10 @@ package org.jetbrains.java.decompiler.main; import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; /** * Allows to connect text with resulting lines @@ -172,4 +175,13 @@ public class TextBuffer { } myStringBuilder.insert(offset, s); } + + public int count(String substring, int from) { + int count = 0, length = substring.length(), p = from; + while ((p = myStringBuilder.indexOf(substring, p)) > 0) { + ++count; + p += length; + } + return count; + } }