#3126: Use suppliers instead of reflection for native impl generation.
This commit is contained in:
parent
a8b2f5268d
commit
cb738188de
@ -6,18 +6,19 @@ import java.io.FileOutputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import net.md_5.bungee.jni.cipher.BungeeCipher;
|
import net.md_5.bungee.jni.cipher.BungeeCipher;
|
||||||
|
|
||||||
public final class NativeCode<T>
|
public final class NativeCode<T>
|
||||||
{
|
{
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
private final Class<? extends T> javaImpl;
|
private final Supplier<? extends T> javaImpl;
|
||||||
private final Class<? extends T> nativeImpl;
|
private final Supplier<? extends T> nativeImpl;
|
||||||
//
|
//
|
||||||
private boolean loaded;
|
private boolean loaded;
|
||||||
|
|
||||||
public NativeCode(String name, Class<? extends T> javaImpl, Class<? extends T> nativeImpl)
|
public NativeCode(String name, Supplier<? extends T> javaImpl, Supplier<? extends T> nativeImpl)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.javaImpl = javaImpl;
|
this.javaImpl = javaImpl;
|
||||||
@ -26,13 +27,7 @@ public final class NativeCode<T>
|
|||||||
|
|
||||||
public T newInstance()
|
public T newInstance()
|
||||||
{
|
{
|
||||||
try
|
return ( loaded ) ? nativeImpl.get() : javaImpl.get();
|
||||||
{
|
|
||||||
return ( loaded ) ? nativeImpl.getDeclaredConstructor().newInstance() : javaImpl.getDeclaredConstructor().newInstance();
|
|
||||||
} catch ( ReflectiveOperationException ex )
|
|
||||||
{
|
|
||||||
throw new RuntimeException( "Error getting instance", ex );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean load()
|
public boolean load()
|
||||||
|
@ -25,9 +25,15 @@ public class JavaCipher implements BungeeCipher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public JavaCipher() throws GeneralSecurityException
|
public JavaCipher()
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
this.cipher = Cipher.getInstance( "AES/CFB8/NoPadding" );
|
this.cipher = Cipher.getInstance( "AES/CFB8/NoPadding" );
|
||||||
|
} catch ( GeneralSecurityException ex )
|
||||||
|
{
|
||||||
|
throw new RuntimeException( ex );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,7 +26,7 @@ public class NativeCipherTest
|
|||||||
private final SecretKey secret = new SecretKeySpec( new byte[ 16 ], "AES" );
|
private final SecretKey secret = new SecretKeySpec( new byte[ 16 ], "AES" );
|
||||||
private static final int BENCHMARK_COUNT = 4096;
|
private static final int BENCHMARK_COUNT = 4096;
|
||||||
//
|
//
|
||||||
private static final NativeCode<BungeeCipher> factory = new NativeCode<>( "native-cipher", JavaCipher.class, NativeCipher.class );
|
private static final NativeCode<BungeeCipher> factory = new NativeCode<>( "native-cipher", JavaCipher::new, NativeCipher::new );
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNative() throws Exception
|
public void testNative() throws Exception
|
||||||
|
@ -15,7 +15,7 @@ import org.junit.Test;
|
|||||||
public class NativeZlibTest
|
public class NativeZlibTest
|
||||||
{
|
{
|
||||||
|
|
||||||
private final NativeCode<BungeeZlib> factory = new NativeCode<>( "native-compress", JavaZlib.class, NativeZlib.class );
|
private final NativeCode<BungeeZlib> factory = new NativeCode<>( "native-compress", JavaZlib::new, NativeZlib::new );
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doTest() throws DataFormatException
|
public void doTest() throws DataFormatException
|
||||||
|
@ -31,7 +31,7 @@ public class EncryptionUtil
|
|||||||
public static final KeyPair keys;
|
public static final KeyPair keys;
|
||||||
@Getter
|
@Getter
|
||||||
private static final SecretKey secret = new SecretKeySpec( new byte[ 16 ], "AES" );
|
private static final SecretKey secret = new SecretKeySpec( new byte[ 16 ], "AES" );
|
||||||
public static final NativeCode<BungeeCipher> nativeFactory = new NativeCode<>( "native-cipher", JavaCipher.class, NativeCipher.class );
|
public static final NativeCode<BungeeCipher> nativeFactory = new NativeCode<>( "native-cipher", JavaCipher::new, NativeCipher::new );
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
|
@ -8,5 +8,5 @@ import net.md_5.bungee.jni.zlib.NativeZlib;
|
|||||||
public class CompressFactory
|
public class CompressFactory
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final NativeCode<BungeeZlib> zlib = new NativeCode<>( "native-compress", JavaZlib.class, NativeZlib.class );
|
public static final NativeCode<BungeeZlib> zlib = new NativeCode<>( "native-compress", JavaZlib::new, NativeZlib::new );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user