From 0e83ec01aced75179a2703555c11b08beb7ab771 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 24 Jan 2018 15:00:14 +0100 Subject: [android] - improve typing of expressions --- .../mapboxsdk/style/expressions/Expression.java | 41 +++++++++++++++++++--- .../style/expressions/ExpressionTest.java | 29 ++++++++------- .../activity/style/DataDrivenStyleActivity.java | 16 ++++----- .../activity/style/SymbolGeneratorActivity.java | 8 ++--- 4 files changed, 65 insertions(+), 29 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java index 4d09fcaac6..45b82f0ba1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java @@ -758,7 +758,7 @@ public class Expression { * @param input expression input * @return expression */ - public static Expression get(@NonNull Expression input) { + public static Expression get(@NonNull Expression input) { return new Expression<>("get", input); } @@ -770,7 +770,7 @@ public class Expression { * @param input string input * @return expression */ - public static Expression get(@NonNull String input) { + public static Expression get(@NonNull String input) { return get(literal(input)); } @@ -782,7 +782,7 @@ public class Expression { * @param object an expression object * @return expression */ - public static Expression get(@NonNull Expression key, @NonNull Expression object) { + public static Expression get(@NonNull Expression key, @NonNull Expression object) { return new Expression<>("get", key, object); } @@ -794,7 +794,7 @@ public class Expression { * @param object an expression object * @return expression */ - public static Expression get(@NonNull String key, @NonNull Expression object) { + public static Expression get(@NonNull String key, @NonNull Expression object) { return get(literal(key), object); } @@ -1758,4 +1758,37 @@ public class Expression { return output; } + // + // asType + // + + @SuppressWarnings("unchecked") + public Expression asNumber(){ + return (Expression) this; + } + + @SuppressWarnings("unchecked") + public Expression asString(){ + return (Expression) this; + } + + @SuppressWarnings("unchecked") + public Expression asColor(){ + return (Expression) this; + } + + @SuppressWarnings("unchecked") + public Expression asBoolean(){ + return (Expression) this; + } + + @SuppressWarnings("unchecked") + public Expression asObject(){ + return (Expression) this; + } + + @SuppressWarnings("unchecked") + public Expression asArray(){ + return (Expression) this; + } } \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java index eb1ce8bfaa..ba3eb4ed51 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java @@ -408,14 +408,14 @@ public class ExpressionTest { @Test public void testHasExpression() throws Exception { Object[] expected = new Object[] {"has", new Object[] {"get", "key"}, new Object[] {"properties"}}; - Object[] actual = has(get(literal("key")), properties()).toArray(); + Object[] actual = has(get(literal("key")).asString(), properties()).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @Test public void testHasExpressionLiteral() throws Exception { Object[] expected = new Object[] {"has", new Object[] {"get", "key"}, new Object[] {"properties"}}; - Object[] actual = has(get("key"), properties()).toArray(); + Object[] actual = has(get("key").asString(), properties()).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -521,7 +521,7 @@ public class ExpressionTest { public void testDivisionWithNestedGet() throws Exception { Object nestedGet = new Object[] {"get", "key"}; Object[] expected = new Object[] {"/", 2, nestedGet}; - Object[] actual = division(literal(2), get(literal("key"))).toArray(); + Object[] actual = division(literal(2), get(literal("key")).asNumber()).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -895,7 +895,7 @@ public class ExpressionTest { @Test public void testStepBasicLiteral() throws Exception { Object[] expected = new Object[] {"step", new Object[] {"get", "line-width"}, 11, 0, 111, 1, 1111}; - Object[] actual = step(get("line-width"), literal(11), stop(0, 111), stop(1, 1111)).toArray(); + Object[] actual = step(get("line-width").asNumber(), literal(11), stop(0, 111), stop(1, 1111)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -942,7 +942,7 @@ public class ExpressionTest { Object[] get = new Object[] {"get", "x"}; Object[] expected = new Object[] {"interpolate", exponential, get, 0, 100, 200}; Object[] actual = interpolate(exponential(literal(12)), - get(literal("x")), literal(0), literal(100), literal(200)).toArray(); + get(literal("x")).asNumber(), literal(0), literal(100), literal(200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -951,7 +951,7 @@ public class ExpressionTest { Object[] exponential = new Object[] {"exponential", 12}; Object[] get = new Object[] {"get", "x"}; Object[] expected = new Object[] {"interpolate", exponential, get, 0, 100, 100, 200}; - Object[] actual = interpolate(exponential(12), get("x"), stop(0, 100), stop(100, 200)).toArray(); + Object[] actual = interpolate(exponential(12), get("x").asNumber(), stop(0, 100), stop(100, 200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -961,7 +961,8 @@ public class ExpressionTest { Object[] exponential = new Object[] {"exponential", getX}; Object[] getY = new Object[] {"get", "y"}; Object[] expected = new Object[] {"interpolate", exponential, getY, 0, 100, 100, 200}; - Object[] actual = interpolate(exponential(get("x")), get("y"), stop(0, 100), stop(100, 200)).toArray(); + Object[] actual = interpolate(exponential(get("x").asNumber()), get("y").asNumber(), + stop(0, 100), stop(100, 200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -971,7 +972,7 @@ public class ExpressionTest { Object[] get = new Object[] {"get", "x"}; Object[] expected = new Object[] {"interpolate", cubicBezier, get, 0, 100, 100, 200}; Object[] actual = interpolate(cubicBezier(literal(1), literal(1), literal(1), literal(1)), - get(literal("x")), literal(0), literal(100), literal(100), literal(200)).toArray(); + get(literal("x")).asNumber(), literal(0), literal(100), literal(100), literal(200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -980,7 +981,8 @@ public class ExpressionTest { Object[] cubicBezier = new Object[] {"cubic-bezier", 1, 1, 1, 1}; Object[] get = new Object[] {"get", "x"}; Object[] expected = new Object[] {"interpolate", cubicBezier, get, 0, 100, 100, 200}; - Object[] actual = interpolate(cubicBezier(1, 1, 1, 1), get("x"), stop(0, 100), stop(100, 200)).toArray(); + Object[] actual = interpolate(cubicBezier(1, 1, 1, 1), get("x").asNumber(), + stop(0, 100), stop(100, 200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -991,8 +993,9 @@ public class ExpressionTest { Object[] getZ = new Object[] {"get", "z"}; Object[] cubicBezier = new Object[] {"cubic-bezier", getZ, 1, getY, 1}; Object[] expected = new Object[] {"interpolate", cubicBezier, getX, 0, 100, 200}; - Object[] actual = interpolate(cubicBezier(get(literal("z")), literal(1), - get(literal("y")), literal(1)), get(literal("x")), literal(0), literal(100), literal(200)).toArray(); + Object[] actual = interpolate(cubicBezier(get(literal("z")).asNumber(), literal(1), + get(literal("y")).asNumber(), literal(1)), get(literal("x")).asNumber(), literal(0), + literal(100), literal(200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } @@ -1003,8 +1006,8 @@ public class ExpressionTest { Object[] getZ = new Object[] {"get", "z"}; Object[] cubicBezier = new Object[] {"cubic-bezier", getZ, 1, getY, 1}; Object[] expected = new Object[] {"interpolate", cubicBezier, getX, 0, 100, 100, 200}; - Object[] actual = interpolate(cubicBezier(get("z"), literal(1), get("y"), - literal(1)), get("x"), stop(0, 100), stop(100, 200)).toArray(); + Object[] actual = interpolate(cubicBezier(get("z").asNumber(), literal(1), get("y").asNumber(), + literal(1)), get("x").asNumber(), stop(0, 100), stop(100, 200)).toArray(); assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } } \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java index cbac62bcc1..7e149df253 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java @@ -210,7 +210,7 @@ public class DataDrivenStyleActivity extends AppCompatActivity { fillColor( interpolate( exponential(0.5f), - get("stroke-width"), + get("stroke-width").asNumber(), stop(1f, color(Color.RED)), stop(5f, color(Color.BLUE)), stop(10f, color(Color.GREEN)) @@ -260,7 +260,7 @@ public class DataDrivenStyleActivity extends AppCompatActivity { layer.setProperties( fillColor( step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.CYAN), stop(1f, color(Color.RED)), stop(2f, color(Color.BLUE)), @@ -282,21 +282,21 @@ public class DataDrivenStyleActivity extends AppCompatActivity { exponential(1f), zoom(), stop(12, step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.BLACK), stop(1f, color(Color.RED)), stop(2f, color(Color.WHITE)), stop(3f, color(Color.BLUE)) )), stop(15, step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.BLACK), stop(1f, color(Color.YELLOW)), stop(2f, color(Color.LTGRAY)), stop(3f, color(Color.CYAN)) )), stop(18, step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.BLACK), stop(1f, color(Color.WHITE)), stop(2f, color(Color.GRAY)), @@ -319,21 +319,21 @@ public class DataDrivenStyleActivity extends AppCompatActivity { linear(), zoom(), stop(12, step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.BLACK), stop(1f, color(Color.RED)), stop(2f, color(Color.WHITE)), stop(3f, color(Color.BLUE)) )), stop(15, step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.BLACK), stop(1f, color(Color.YELLOW)), stop(2f, color(Color.LTGRAY)), stop(3f, color(Color.CYAN)) )), stop(18, step( - get("stroke-width"), + get("stroke-width").asNumber(), color(Color.BLACK), stop(1f, color(Color.WHITE)), stop(2f, color(Color.GRAY)), diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java index 1ef59db9b1..4863095fba 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java @@ -248,7 +248,7 @@ public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapR iconImage(get(literal(FEATURE_ID))), iconAllowOverlap(false), iconSize( - division(get(literal(FEATURE_RANK)), literal(2)) + division(get(literal(FEATURE_RANK)).asNumber(), literal(2)) ), iconAnchor(ICON_ANCHOR_BOTTOM), iconOffset(new Float[] {0.0f, -5.0f}), @@ -257,13 +257,13 @@ public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapR textField( concat( upcase(literal("a ")), - get(literal(FEATURE_TYPE)), + get(FEATURE_TYPE).asString(), downcase(literal(" IN ")), - get(literal(FEATURE_REGION)) + get(FEATURE_REGION).asString() ) ), textSize( - product(get(literal(FEATURE_RANK)), pi()) + product(get(FEATURE_RANK).asNumber(), pi()) ), textAnchor(TEXT_ANCHOR_TOP) ) -- cgit v1.2.1