Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -751,12 +751,7 @@ private <T> Single<T> invoke(Type returnType, Class<?> returnClass, String metho
// run continuations on a separate thread
Subject<Object> pendingCall = irq.getPendingCall();
pendingCall.subscribe(result -> {
// Primitive types can't be cast with the Class cast function
if (returnClass.isPrimitive()) {
subject.onSuccess((T)result);
} else {
subject.onSuccess((T)returnClass.cast(result));
}
subject.onSuccess(Utils.<T>cast(returnClass, result));
}, error -> subject.onError(error));

// Make sure the actual send is after setting up the callbacks otherwise there is a race
Expand Down Expand Up @@ -813,12 +808,7 @@ private <T> Observable<T> stream(Type returnType, Class<?> returnClass, String m
ReplaySubject<T> subject = ReplaySubject.create();
Subject<Object> pendingCall = irq.getPendingCall();
pendingCall.subscribe(result -> {
// Primitive types can't be cast with the Class cast function
if (returnClass.isPrimitive()) {
subject.onNext((T)result);
} else {
subject.onNext((T)returnClass.cast(result));
}
subject.onNext(Utils.<T>cast(returnClass, result));
}, error -> subject.onError(error),
() -> subject.onComplete());

Expand Down Expand Up @@ -907,7 +897,7 @@ public Subscription on(String target, Action callback) {
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
public <T1> Subscription on(String target, Action1<T1> callback, Class<T1> param1) {
ActionBase action = params -> callback.invoke(param1.cast(params[0]));
ActionBase action = params -> callback.invoke(Utils.<T1>cast(param1, params[0]));
return registerHandler(target, action, param1);

}
Expand All @@ -926,7 +916,7 @@ public <T1> Subscription on(String target, Action1<T1> callback, Class<T1> param
*/
public <T1, T2> Subscription on(String target, Action2<T1, T2> callback, Class<T1> param1, Class<T2> param2) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]));
};
return registerHandler(target, action, param1, param2);
}
Expand All @@ -948,7 +938,7 @@ public <T1, T2> Subscription on(String target, Action2<T1, T2> callback, Class<T
public <T1, T2, T3> Subscription on(String target, Action3<T1, T2, T3> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]));
};
return registerHandler(target, action, param1, param2, param3);
}
Expand All @@ -972,7 +962,8 @@ public <T1, T2, T3> Subscription on(String target, Action3<T1, T2, T3> callback,
public <T1, T2, T3, T4> Subscription on(String target, Action4<T1, T2, T3, T4> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]));
};
return registerHandler(target, action, param1, param2, param3, param4);
}
Expand All @@ -998,8 +989,8 @@ public <T1, T2, T3, T4> Subscription on(String target, Action4<T1, T2, T3, T4> c
public <T1, T2, T3, T4, T5> Subscription on(String target, Action5<T1, T2, T3, T4, T5> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5);
}
Expand Down Expand Up @@ -1027,8 +1018,8 @@ public <T1, T2, T3, T4, T5> Subscription on(String target, Action5<T1, T2, T3, T
public <T1, T2, T3, T4, T5, T6> Subscription on(String target, Action6<T1, T2, T3, T4, T5, T6> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5, Class<T6> param6) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]), param6.cast(params[5]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]), Utils.<T6>cast(param6, params[5]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5, param6);
}
Expand Down Expand Up @@ -1058,8 +1049,8 @@ public <T1, T2, T3, T4, T5, T6> Subscription on(String target, Action6<T1, T2, T
public <T1, T2, T3, T4, T5, T6, T7> Subscription on(String target, Action7<T1, T2, T3, T4, T5, T6, T7> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5, Class<T6> param6, Class<T7> param7) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]), param6.cast(params[5]), param7.cast(params[6]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]), Utils.<T6>cast(param6, params[5]), Utils.<T7>cast(param7, params[6]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5, param6, param7);
}
Expand Down Expand Up @@ -1091,8 +1082,9 @@ public <T1, T2, T3, T4, T5, T6, T7> Subscription on(String target, Action7<T1, T
public <T1, T2, T3, T4, T5, T6, T7, T8> Subscription on(String target, Action8<T1, T2, T3, T4, T5, T6, T7, T8> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5, Class<T6> param6, Class<T7> param7, Class<T8> param8) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]), param6.cast(params[5]), param7.cast(params[6]), param8.cast(params[7]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]), Utils.<T6>cast(param6, params[5]), Utils.<T7>cast(param7, params[6]),
Utils.<T8>cast(param8, params[7]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5, param6, param7, param8);
}
Expand All @@ -1108,9 +1100,10 @@ public <T1, T2, T3, T4, T5, T6, T7, T8> Subscription on(String target, Action8<T
* @param <T1> The first argument type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1> Subscription on(String target, Action1<T1> callback, Type param1) {
ActionBase action = params -> callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]));
ActionBase action = params -> {
callback.invoke(Utils.<T1>cast(param1, params[0]));
};
return registerHandler(target, action, param1);
}

Expand All @@ -1127,10 +1120,9 @@ public <T1> Subscription on(String target, Action1<T1> callback, Type param1) {
* @param <T2> The second parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2> Subscription on(String target, Action2<T1, T2> callback, Type param1, Type param2) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]));
};
return registerHandler(target, action, param1, param2);
}
Expand All @@ -1150,12 +1142,10 @@ public <T1, T2> Subscription on(String target, Action2<T1, T2> callback, Type pa
* @param <T3> The third parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2, T3> Subscription on(String target, Action3<T1, T2, T3> callback,
Type param1, Type param2, Type param3) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]),
(T3)Utils.typeToClass(param3).cast(params[2]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]));
};
return registerHandler(target, action, param1, param2, param3);
}
Expand All @@ -1177,12 +1167,11 @@ public <T1, T2, T3> Subscription on(String target, Action3<T1, T2, T3> callback,
* @param <T4> The fourth parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2, T3, T4> Subscription on(String target, Action4<T1, T2, T3, T4> callback,
Type param1, Type param2, Type param3, Type param4) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]),
(T3)Utils.typeToClass(param3).cast(params[2]), (T4)Utils.typeToClass(param4).cast(params[3]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]));
};
return registerHandler(target, action, param1, param2, param3, param4);
}
Expand All @@ -1206,13 +1195,11 @@ public <T1, T2, T3, T4> Subscription on(String target, Action4<T1, T2, T3, T4> c
* @param <T5> The fifth parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T5> Subscription on(String target, Action5<T1, T2, T3, T4, T5> callback,
Type param1, Type param2, Type param3, Type param4, Type param5) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]),
(T3)Utils.typeToClass(param3).cast(params[2]), (T4)Utils.typeToClass(param4).cast(params[3]),
(T5)Utils.typeToClass(param5).cast(params[4]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5);
}
Expand All @@ -1238,13 +1225,11 @@ public <T1, T2, T3, T4, T5> Subscription on(String target, Action5<T1, T2, T3, T
* @param <T6> The sixth parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T5, T6> Subscription on(String target, Action6<T1, T2, T3, T4, T5, T6> callback,
Type param1, Type param2, Type param3, Type param4, Type param5, Type param6) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]),
(T3)Utils.typeToClass(param3).cast(params[2]), (T4)Utils.typeToClass(param4).cast(params[3]),
(T5)Utils.typeToClass(param5).cast(params[4]), (T6)Utils.typeToClass(param6).cast(params[5]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]), Utils.<T6>cast(param6, params[5]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5, param6);
}
Expand Down Expand Up @@ -1272,14 +1257,11 @@ public <T1, T2, T3, T4, T5, T6> Subscription on(String target, Action6<T1, T2, T
* @param <T7> The seventh parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T5, T6, T7> Subscription on(String target, Action7<T1, T2, T3, T4, T5, T6, T7> callback,
Type param1, Type param2, Type param3, Type param4, Type param5, Type param6, Type param7) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]),
(T3)Utils.typeToClass(param3).cast(params[2]), (T4)Utils.typeToClass(param4).cast(params[3]),
(T5)Utils.typeToClass(param5).cast(params[4]), (T6)Utils.typeToClass(param6).cast(params[5]),
(T7)Utils.typeToClass(param7).cast(params[6]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]), Utils.<T6>cast(param6, params[5]), Utils.<T7>cast(param7, params[6]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5, param6, param7);
}
Expand Down Expand Up @@ -1309,15 +1291,13 @@ public <T1, T2, T3, T4, T5, T6, T7> Subscription on(String target, Action7<T1, T
* @param <T8> The eighth parameter type.
* @return A {@link Subscription} that can be disposed to unsubscribe from the hub method.
*/
@SuppressWarnings("unchecked")
public <T1, T2, T3, T4, T5, T6, T7, T8> Subscription on(String target, Action8<T1, T2, T3, T4, T5, T6, T7, T8> callback,
Type param1, Type param2, Type param3, Type param4, Type param5, Type param6, Type param7,
Type param8) {
ActionBase action = params -> {
callback.invoke((T1)Utils.typeToClass(param1).cast(params[0]), (T2)Utils.typeToClass(param2).cast(params[1]),
(T3)Utils.typeToClass(param3).cast(params[2]), (T4)Utils.typeToClass(param4).cast(params[3]),
(T5)Utils.typeToClass(param5).cast(params[4]), (T6)Utils.typeToClass(param6).cast(params[5]),
(T7)Utils.typeToClass(param7).cast(params[6]), (T8)Utils.typeToClass(param8).cast(params[7]));
callback.invoke(Utils.<T1>cast(param1, params[0]), Utils.<T2>cast(param2, params[1]), Utils.<T3>cast(param3, params[2]),
Utils.<T4>cast(param4, params[3]), Utils.<T5>cast(param5, params[4]), Utils.<T6>cast(param6, params[5]), Utils.<T7>cast(param7, params[6]),
Utils.<T8>cast(param8, params[7]));
};
return registerHandler(target, action, param1, param2, param3, param4, param5, param6, param7, param8);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,18 @@ public static Class<?> typeToClass(Type type) {
throw new UnsupportedOperationException("Cannot handle type class: " + type.getClass());
}
}

@SuppressWarnings("unchecked")
public static <T> T cast(Class<?> returnClass, Object obj) {
// Primitive types can't be cast with the Class cast function
if (returnClass.isPrimitive()) {
return (T) obj;
} else {
return (T)returnClass.cast(obj);
}
}

public static <T> T cast(Type returnType, Object obj) {
return cast(typeToClass(returnType), obj);
}
}
Loading