diff --git a/plugins/windows/src/main/java/net/java/games/input/DataQueue.java b/plugins/windows/src/main/java/net/java/games/input/DataQueue.java index 4274699..a530bc6 100644 --- a/plugins/windows/src/main/java/net/java/games/input/DataQueue.java +++ b/plugins/windows/src/main/java/net/java/games/input/DataQueue.java @@ -32,19 +32,21 @@ *****************************************************************************/ package net.java.games.input; +import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; /** * @author elias * @version 1.0 */ -final class DataQueue { - private final Object[] elements; +final class DataQueue { + private final T[] elements; private int position; private int limit; - public DataQueue(int size, Class element_type) { - this.elements= new Object[size]; + @SuppressWarnings("unchecked") + public DataQueue(int size, Class element_type) { + this.elements= (T[])Array.newInstance(element_type, size); for (int i = 0; i < elements.length; i++) { try { elements[i] = element_type.getDeclaredConstructor().newInstance(); @@ -68,12 +70,12 @@ final class DataQueue { return limit; } - public final Object get(int index) { + public final T get(int index) { assert index < limit; return elements[index]; } - public final Object get() { + public final T get() { if (!hasRemaining()) return null; return get(position++); @@ -91,7 +93,7 @@ final class DataQueue { } private final void swap(int index1, int index2) { - Object temp = elements[index1]; + T temp = elements[index1]; elements[index1] = elements[index2]; elements[index2] = temp; } @@ -113,7 +115,7 @@ final class DataQueue { this.position = position; } - public final Object[] getElements() { + public final T[] getElements() { return elements; } } diff --git a/plugins/windows/src/main/java/net/java/games/input/IDirectInputDevice.java b/plugins/windows/src/main/java/net/java/games/input/IDirectInputDevice.java index 928f398..3fb29f7 100644 --- a/plugins/windows/src/main/java/net/java/games/input/IDirectInputDevice.java +++ b/plugins/windows/src/main/java/net/java/games/input/IDirectInputDevice.java @@ -1,10 +1,4 @@ /* - * %W% %E% - * - * Copyright 2002 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - */ -/***************************************************************************** * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -201,16 +195,16 @@ final class IDirectInputDevice { private final int dev_subtype; private final String instance_name; private final String product_name; - private final List objects = new ArrayList(); - private final List effects = new ArrayList(); - private final List rumblers = new ArrayList(); + private final List objects = new ArrayList<>(); + private final List effects = new ArrayList<>(); + private final List rumblers = new ArrayList<>(); private final int[] device_state; - private final Map object_to_component = new HashMap(); + private final Map object_to_component = new HashMap<>(); private final boolean axes_in_relative_mode; private boolean released; - private DataQueue queue; + private DataQueue queue; private int button_counter; private int current_format_offset; @@ -242,7 +236,7 @@ final class IDirectInputDevice { boolean all_relative = true; boolean has_axis = false; for (int i = 0; i < objects.size(); i++) { - DIDeviceObject obj = (DIDeviceObject)objects.get(i); + DIDeviceObject obj = objects.get(i); if (obj.isAxis()) { has_axis = true; if (!obj.isRelative()) { @@ -272,10 +266,10 @@ final class IDirectInputDevice { } public final Rumbler[] getRumblers() { - return (Rumbler[])rumblers.toArray(new Rumbler[]{}); + return rumblers.toArray(new Rumbler[]{}); } - private final List createRumblers() throws IOException { + private final List createRumblers() throws IOException { DIDeviceObject x_axis = lookupObjectByGUID(GUID_XAxis); // DIDeviceObject y_axis = lookupObjectByGUID(GUID_YAxis); if(x_axis == null/* || y_axis == null*/) @@ -283,7 +277,7 @@ final class IDirectInputDevice { DIDeviceObject[] axes = {x_axis/*, y_axis*/}; long[] directions = {0/*, 0*/}; for (int i = 0; i < effects.size(); i++) { - DIEffectInfo info = (DIEffectInfo)effects.get(i); + DIEffectInfo info = effects.get(i); if ((info.getEffectType() & 0xff) == DIEFT_PERIODIC && (info.getDynamicParams() & DIEP_GAIN) != 0) { rumblers.add(createPeriodicRumbler(axes, directions, info)); @@ -304,7 +298,7 @@ final class IDirectInputDevice { private final DIDeviceObject lookupObjectByGUID(int guid_id) { for (int i = 0; i < objects.size(); i++) { - DIDeviceObject object = (DIDeviceObject)objects.get(i); + DIDeviceObject object = objects.get(i); if (guid_id == object.getGUIDType()) return object; } @@ -321,11 +315,11 @@ final class IDirectInputDevice { * for the int size (4 bytes) */ int format_offset = event.getFormatOffset()/4; - return (DIDeviceObject)objects.get(format_offset); + return objects.get(format_offset); } public final DIComponent mapObject(DIDeviceObject object) { - return (DIComponent)object_to_component.get(object); + return object_to_component.get(object); } public final void registerComponent(DIDeviceObject object, DIComponent component) { @@ -342,7 +336,7 @@ final class IDirectInputDevice { } public synchronized final boolean getNextEvent(DIDeviceObjectData data) { - DIDeviceObjectData next_event = (DIDeviceObjectData)queue.get(); + DIDeviceObjectData next_event = queue.get(); if (next_event == null) return false; data.set(next_event); @@ -375,7 +369,7 @@ final class IDirectInputDevice { } private final static native int nUnacquire(long address); - private final boolean getDeviceData(DataQueue queue) throws IOException { + private final boolean getDeviceData(DataQueue queue) throws IOException { int res = nGetDeviceData(address, 0, queue, queue.getElements(), queue.position(), queue.remaining()); if (res != DI_OK && res != DI_BUFFEROVERFLOW) { if (res == DIERR_NOTACQUIRED) { @@ -386,7 +380,7 @@ final class IDirectInputDevice { } return true; } - private final static native int nGetDeviceData(long address, int flags, DataQueue queue, Object[] queue_elements, int position, int remaining); + private final static native int nGetDeviceData(long address, int flags, DataQueue queue, Object[] queue_elements, int position, int remaining); private final void getDeviceState(int[] device_state) throws IOException { int res = nGetDeviceState(address, device_state); @@ -420,7 +414,7 @@ final class IDirectInputDevice { return dev_type; } - public final List getObjects() { + public final List getObjects() { return objects; } @@ -509,7 +503,7 @@ final class IDirectInputDevice { int res = nSetBufferSize(address, size); if (res != DI_OK && res != DI_PROPNOEFFECT && res != DI_POLLEDDEVICE) throw new IOException("Failed to set buffer size (" + Integer.toHexString(res) + ")"); - queue = new DataQueue(size, DIDeviceObjectData.class); + queue = new DataQueue<>(size, DIDeviceObjectData.class); queue.position(queue.limit()); acquire(); } @@ -540,6 +534,7 @@ final class IDirectInputDevice { throw new IOException("Device is released"); } + @SuppressWarnings("deprecation") protected void finalize() { release(); } diff --git a/plugins/windows/src/main/java/net/java/games/input/RawDevice.java b/plugins/windows/src/main/java/net/java/games/input/RawDevice.java index 4841234..c7b0696 100644 --- a/plugins/windows/src/main/java/net/java/games/input/RawDevice.java +++ b/plugins/windows/src/main/java/net/java/games/input/RawDevice.java @@ -89,12 +89,12 @@ final class RawDevice { private final int type; /* Events from the event queue thread end here */ - private DataQueue keyboard_events; - private DataQueue mouse_events; + private DataQueue keyboard_events; + private DataQueue mouse_events; /* After processing in poll*(), the events are placed here */ - private DataQueue processed_keyboard_events; - private DataQueue processed_mouse_events; + private DataQueue processed_keyboard_events; + private DataQueue processed_mouse_events; /* mouse state */ private final boolean[] button_states = new boolean[5]; @@ -123,7 +123,7 @@ final class RawDevice { /* Careful, this is called from the event queue thread */ public final synchronized void addMouseEvent(long millis, int flags, int button_flags, int button_data, long raw_buttons, long last_x, long last_y, long extra_information) { if (mouse_events.hasRemaining()) { - RawMouseEvent event = (RawMouseEvent)mouse_events.get(); + RawMouseEvent event = mouse_events.get(); event.set(millis, flags, button_flags, button_data, raw_buttons, last_x, last_y, extra_information); } } @@ -131,7 +131,7 @@ final class RawDevice { /* Careful, this is called from the event queue thread */ public final synchronized void addKeyboardEvent(long millis, int make_code, int flags, int vkey, int message, long extra_information) { if (keyboard_events.hasRemaining()) { - RawKeyboardEvent event = (RawKeyboardEvent)keyboard_events.get(); + RawKeyboardEvent event = keyboard_events.get(); event.set(millis, make_code, flags, vkey, message, extra_information); } } @@ -140,10 +140,10 @@ final class RawDevice { relative_x = relative_y = wheel = 0; mouse_events.flip(); while (mouse_events.hasRemaining()) { - RawMouseEvent event = (RawMouseEvent)mouse_events.get(); + RawMouseEvent event = mouse_events.get(); boolean has_update = processMouseEvent(event); if (has_update && processed_mouse_events.hasRemaining()) { - RawMouseEvent processed_event = (RawMouseEvent)processed_mouse_events.get(); + RawMouseEvent processed_event = processed_mouse_events.get(); processed_event.set(event); } } @@ -153,10 +153,10 @@ final class RawDevice { public final synchronized void pollKeyboard() { keyboard_events.flip(); while (keyboard_events.hasRemaining()) { - RawKeyboardEvent event = (RawKeyboardEvent)keyboard_events.get(); + RawKeyboardEvent event = keyboard_events.get(); boolean has_update = processKeyboardEvent(event); if (has_update && processed_keyboard_events.hasRemaining()) { - RawKeyboardEvent processed_event = (RawKeyboardEvent)processed_keyboard_events.get(); + RawKeyboardEvent processed_event = processed_keyboard_events.get(); processed_event.set(event); } } @@ -250,7 +250,7 @@ final class RawDevice { processed_keyboard_events.compact(); return false; } - RawKeyboardEvent next_event = (RawKeyboardEvent)processed_keyboard_events.get(); + RawKeyboardEvent next_event = processed_keyboard_events.get(); event.set(next_event); processed_keyboard_events.compact(); return true; @@ -262,7 +262,7 @@ final class RawDevice { processed_mouse_events.compact(); return false; } - RawMouseEvent next_event = (RawMouseEvent)processed_mouse_events.get(); + RawMouseEvent next_event = processed_mouse_events.get(); if ((next_event.getFlags() & MOUSE_MOVE_ABSOLUTE) != 0) { event_relative_x = next_event.getLastX() - event_last_x; event_relative_y = next_event.getLastY() - event_last_y; @@ -284,10 +284,10 @@ final class RawDevice { } public final void setBufferSize(int size) { - keyboard_events = new DataQueue(size, RawKeyboardEvent.class); - mouse_events = new DataQueue(size, RawMouseEvent.class); - processed_keyboard_events = new DataQueue(size, RawKeyboardEvent.class); - processed_mouse_events = new DataQueue(size, RawMouseEvent.class); + keyboard_events = new DataQueue<>(size, RawKeyboardEvent.class); + mouse_events = new DataQueue<>(size, RawMouseEvent.class); + processed_keyboard_events = new DataQueue<>(size, RawKeyboardEvent.class); + processed_mouse_events = new DataQueue<>(size, RawMouseEvent.class); } public final int getType() {