From dc17643e2c76c2af677935f7dfb8860772d9d860 Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Tue, 31 Aug 2021 11:48:18 -0700 Subject: [PATCH] Reduce @SuppressWarnings("unchecked") a bit This is a mechanical refactoring CL to follow up my previous CL [1], which replaced our custom callback interfaces with AndroidFuture, which made us lose compile time checking in RemoteInputConnectionImpl. Although we are still effectively annotating types manually, this CL allows us to consolidate @SuppressWarnings("unchecked") into a single utility method rather than scattering such annotations into multiple methods. Other than clean up the code, there should be no observable behavior change in this CL. [1]: I74657826a99b11ca1f86932f8f41cca6e449cc8a b2d09de1f9131c0e87356441a46db709eb27a828 Bug: 192412909 Bug: 195699814 Test: presubmit Change-Id: I59a60d7291142bf4827a05ce84183e84457c32b8 --- .../RemoteInputConnectionImpl.java | 75 +++++++------------ 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java index 2d0b3f9e50256..74211fb974df2 100644 --- a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java +++ b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java @@ -43,6 +43,7 @@ import com.android.internal.infra.AndroidFuture; import com.android.internal.view.IInputContext; import java.lang.ref.WeakReference; +import java.util.function.Supplier; /** * Takes care of remote method invocations of {@link InputConnection} in the IME client side. @@ -222,9 +223,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getTextAfterCursor(int length, int flags, AndroidFuture future /* T=CharSequence */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getTextAfterCursor"); try { final InputConnection ic = getInputConnection(); @@ -241,7 +240,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getTextAfterCursor", mParentInputMethodManager, icProto); } - typedFuture.complete(result); + return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -251,9 +250,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getTextBeforeCursor(int length, int flags, AndroidFuture future /* T=CharSequence */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getTextBeforeCursor"); try { final InputConnection ic = getInputConnection(); @@ -270,7 +267,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getTextBeforeCursor", mParentInputMethodManager, icProto); } - typedFuture.complete(result); + return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -279,9 +276,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getSelectedText(int flags, AndroidFuture future /* T=CharSequence */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getSelectedText"); try { final InputConnection ic = getInputConnection(); @@ -298,7 +293,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getSelectedText", mParentInputMethodManager, icProto); } - typedFuture.complete(result); + return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -308,9 +303,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getSurroundingText(int beforeLength, int afterLength, int flags, AndroidFuture future /* T=SurroundingText */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getSurroundingText"); try { final InputConnection ic = getInputConnection(); @@ -327,7 +320,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getSurroundingText", mParentInputMethodManager, icProto); } - typedFuture.complete(result); + return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -336,9 +329,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getCursorCapsMode(int reqModes, AndroidFuture future /* T=Integer */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getCursorCapsMode"); try { final InputConnection ic = getInputConnection(); @@ -355,7 +346,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getCursorCapsMode", mParentInputMethodManager, icProto); } - typedFuture.complete(result); + return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -365,9 +356,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getExtractedText(ExtractedTextRequest request, int flags, AndroidFuture future /* T=ExtractedText */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getExtractedText"); try { final InputConnection ic = getInputConnection(); @@ -384,7 +373,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getExtractedText", mParentInputMethodManager, icProto); } - typedFuture.complete(result); + return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -695,20 +684,15 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void requestCursorUpdates(int cursorUpdateMode, AndroidFuture future /* T=Boolean */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#requestCursorUpdates"); try { final InputConnection ic = getInputConnection(); - final boolean result; if (ic == null || !isActive()) { Log.w(TAG, "requestCursorAnchorInfo on inactive InputConnection"); - result = false; - } else { - result = ic.requestCursorUpdates(cursorUpdateMode); + return false; } - typedFuture.complete(result); + return ic.requestCursorUpdates(cursorUpdateMode); } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -718,26 +702,19 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts, AndroidFuture future /* T=Boolean */) { - @SuppressWarnings("unchecked") - final AndroidFuture typedFuture = future; - dispatch(() -> { + dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#commitContent"); try { final InputConnection ic = getInputConnection(); - final boolean result; if (ic == null || !isActive()) { Log.w(TAG, "commitContent on inactive InputConnection"); - result = false; - } else { - if (inputContentInfo == null || !inputContentInfo.validate()) { - Log.w(TAG, "commitContent with invalid inputContentInfo=" - + inputContentInfo); - result = false; - } else { - result = ic.commitContent(inputContentInfo, flags, opts); - } + return false; } - typedFuture.complete(result); + if (inputContentInfo == null || !inputContentInfo.validate()) { + Log.w(TAG, "commitContent with invalid inputContentInfo=" + inputContentInfo); + return false; + } + return ic.commitContent(inputContentInfo, flags, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } @@ -771,4 +748,10 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { mH.post(runnable); } + + private void dispatch(@NonNull AndroidFuture untypedFuture, @NonNull Supplier supplier) { + @SuppressWarnings("unchecked") + final AndroidFuture future = untypedFuture; + dispatch(() -> future.complete(supplier.get())); + } }