summaryrefslogtreecommitdiffstats
path: root/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java
diff options
context:
space:
mode:
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>2014-08-28 20:52:43 +0400
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>2014-08-28 20:52:43 +0400
commit663631f0456fcc245dd835889f86541d75161c53 (patch)
treee183fa9777242e2900ff3648a726f05b190bc51b /src/org/jetbrains/java/decompiler/util/InterpreterUtil.java
parentf864084061806fda5510e50bfd2e69bf1dea406b (diff)
downloadfernflower-663631f0456fcc245dd835889f86541d75161c53.tar
fernflower-663631f0456fcc245dd835889f86541d75161c53.tar.gz
fernflower-663631f0456fcc245dd835889f86541d75161c53.tar.lz
fernflower-663631f0456fcc245dd835889f86541d75161c53.tar.xz
fernflower-663631f0456fcc245dd835889f86541d75161c53.zip
java-decompiler: post-import cleanup (classes moved)
Diffstat (limited to 'src/org/jetbrains/java/decompiler/util/InterpreterUtil.java')
-rw-r--r--src/org/jetbrains/java/decompiler/util/InterpreterUtil.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java b/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java
new file mode 100644
index 0000000..4914d36
--- /dev/null
+++ b/src/org/jetbrains/java/decompiler/util/InterpreterUtil.java
@@ -0,0 +1,157 @@
+/*
+ * Fernflower - The Analytical Java Decompiler
+ * http://www.reversed-java.com
+ *
+ * (C) 2008 - 2010, Stiver
+ *
+ * This software is NEITHER public domain NOR free software
+ * as per GNU License. See license.txt for more details.
+ *
+ * This software is distributed WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE.
+ */
+
+package org.jetbrains.java.decompiler.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.channels.FileChannel;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import org.jetbrains.java.decompiler.main.DecompilerContext;
+import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences;
+
+public class InterpreterUtil {
+
+ public static void copyFile(File in, File out) throws IOException {
+ FileChannel inChannel = new FileInputStream(in).getChannel();
+ FileChannel outChannel = new FileOutputStream(out).getChannel();
+ try {
+ // magic number for Windows, 64Mb - 32Kb)
+ int maxCount = (64 * 1024 * 1024) - (32 * 1024);
+ long size = inChannel.size();
+ long position = 0;
+ while (position < size) {
+ position += inChannel.transferTo(position, maxCount, outChannel);
+ }
+ } catch (IOException e) {
+ throw e;
+ }
+ finally {
+ if (inChannel != null) {
+ inChannel.close();
+ }
+ if (outChannel != null) {
+ outChannel.close();
+ }
+ }
+ }
+
+ public static void copyInputStream(InputStream in, OutputStream out)throws IOException {
+
+ byte[] buffer = new byte[1024];
+ int len;
+
+ while((len = in.read(buffer)) >= 0) {
+ out.write(buffer, 0, len);
+ }
+
+ }
+
+ public static String getIndentString(int length) {
+ String indent = (String) DecompilerContext.getProperty(IFernflowerPreferences.INDENT_STRING);
+ StringBuilder buf = new StringBuilder();
+ while(length-->0) {
+ buf.append(indent);
+ }
+ return buf.toString();
+ }
+
+
+ public static boolean equalSets(Collection<?> c1, Collection<?> c2) {
+
+ if(c1 == null) {
+ return c2 == null?true:false;
+ } else {
+ if(c2 == null) {
+ return false;
+ }
+ }
+
+ if(c1.size() != c2.size()) {
+ return false;
+ }
+
+ HashSet<?> set = new HashSet(c1);
+ set.removeAll(c2);
+
+ return (set.size() == 0);
+ }
+
+ public static boolean equalObjects(Object first, Object second) {
+ return first==null?second==null:first.equals(second);
+ }
+
+ public static boolean equalObjectArrays(Object[] first, Object[] second) {
+
+ if(first == null || second == null) {
+ return equalObjects(first, second);
+ } else {
+ if(first.length != second.length) {
+ return false;
+ }
+
+ for(int i=0;i<first.length;i++) {
+ if(!equalObjects(first[i], second[i])) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ public static boolean equalLists(List<?> first, List<?> second) {
+
+ if(first == null) {
+ return second == null;
+ } else if(second == null) {
+ return first == null;
+ }
+
+ if(first.size() == second.size()) {
+ for(int i=0;i<first.size();i++) {
+ if(!equalObjects(first.get(i), second.get(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ public static boolean isPrintableUnicode(char c) {
+ int t = Character.getType(c);
+ return t != Character.UNASSIGNED && t != Character.LINE_SEPARATOR && t != Character.PARAGRAPH_SEPARATOR &&
+ t != Character.CONTROL && t != Character.FORMAT && t != Character.PRIVATE_USE && t != Character.SURROGATE;
+ }
+
+ public static String charToUnicodeLiteral(int value) {
+ String sTemp = Integer.toHexString(value);
+ sTemp = ("0000"+sTemp).substring(sTemp.length());
+ return "\\u"+sTemp;
+ }
+
+ public static String makeUniqueKey(String name, String descriptor) {
+ return name+" "+descriptor;
+ }
+
+}