java-decompiler: minor optimization
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 8 Oct 2014 11:27:11 +0000 (13:27 +0200)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 8 Oct 2014 11:27:11 +0000 (13:27 +0200)
plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java
plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/TextBuffer.java

index bdc2afa9d7529795bba9c5fbcee22ac362d88a74..2b61dc2e1fc4e993799f26ebb02f96ca04c03ec1 100644 (file)
@@ -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;
   }
index 32766ca030c21f13f5a90268d68a9aa8ebef035b..7dd3d2ff0fde65e62f065edc66e5ef55b931b084 100644 (file)
@@ -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;
+  }
 }