blob: 678de5468ae2f32a3c327cb8e5ae13576c654e41 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/*******************************************************************************
* Copyright (c) 2014 Jeff Martin.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Jeff Martin - initial API and implementation
******************************************************************************/
package cuchaz.enigma;
import java.awt.Desktop;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.jar.JarFile;
import javassist.CannotCompileException;
import javassist.CtClass;
import javassist.bytecode.Descriptor;
import com.google.common.io.CharStreams;
public class Util
{
public static int combineHashesOrdered( Object ... objs )
{
return combineHashesOrdered( Arrays.asList( objs ) );
}
public static int combineHashesOrdered( Iterable<Object> objs )
{
final int prime = 67;
int result = 1;
for( Object obj : objs )
{
result *= prime;
if( obj != null )
{
result += obj.hashCode();
}
}
return result;
}
public static void closeQuietly( Closeable closeable )
{
if( closeable != null )
{
try
{
closeable.close();
}
catch( IOException ex )
{
// just ignore any further exceptions
}
}
}
public static void closeQuietly( JarFile jarFile )
{
// silly library should implement Closeable...
if( jarFile != null )
{
try
{
jarFile.close();
}
catch( IOException ex )
{
// just ignore any further exceptions
}
}
}
public static String readStreamToString( InputStream in )
throws IOException
{
return CharStreams.toString( new InputStreamReader( in, "UTF-8" ) );
}
public static String readResourceToString( String path )
throws IOException
{
InputStream in = Util.class.getResourceAsStream( path );
if( in == null )
{
throw new IllegalArgumentException( "Resource not found! " + path );
}
return readStreamToString( in );
}
public static void openUrl( String url )
{
if( Desktop.isDesktopSupported() )
{
Desktop desktop = Desktop.getDesktop();
try
{
desktop.browse( new URI( url ) );
}
catch( IOException ex )
{
throw new Error( ex );
}
catch( URISyntaxException ex )
{
throw new IllegalArgumentException( ex );
}
}
}
public static void writeClass( CtClass c )
{
String name = Descriptor.toJavaName( c.getName() );
File file = new File( name + ".class" );
try( FileOutputStream out = new FileOutputStream( file ) )
{
out.write( c.toBytecode() );
}
catch( IOException | CannotCompileException ex )
{
throw new Error( ex );
}
}
}
|