You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2016/12/05 18:39:56 UTC

nifi git commit: NIFI-3149 Adding proper literal support for number operators ('-' and '+') to ANTLR parser and UI highlighting

Repository: nifi
Updated Branches:
  refs/heads/master 2b6d6c25d -> 7633fe35c


NIFI-3149 Adding proper literal support for number operators ('-' and '+') to ANTLR parser and UI highlighting

This closes #1298


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/7633fe35
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/7633fe35
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/7633fe35

Branch: refs/heads/master
Commit: 7633fe35c1e73037b00e8d3a098546c6fde8d53c
Parents: 2b6d6c2
Author: jpercivall <JP...@apache.org>
Authored: Mon Dec 5 12:37:52 2016 -0500
Committer: Matt Burgess <ma...@apache.org>
Committed: Mon Dec 5 13:34:54 2016 -0500

----------------------------------------------------------------------
 .../language/antlr/AttributeExpressionLexer.g   |  9 +--
 .../expression/language/TestQuery.java          | 68 +++++++++++---------
 .../webapp/js/jquery/nfeditor/languages/nfel.js | 11 ++--
 3 files changed, 48 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/7633fe35/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
index 9375579..f09eba8 100644
--- a/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
+++ b/nifi-commons/nifi-expression-language/src/main/antlr3/org/apache/nifi/attribute/expression/language/antlr/AttributeExpressionLexer.g
@@ -77,12 +77,13 @@ COLON	: ':';
 COMMA	: ',';
 DOT		: '.';
 SEMICOLON : ';';
-WHOLE_NUMBER	: ('0'..'9')+;
+WHOLE_NUMBER : OP? ('0'..'9')+;
 
-DECIMAL :    ('0'..'9')+ '.' ('0'..'9')* EXP?
-           | '.' ('0'..'9')+ EXP?
-           | ('0'..'9')+ EXP;
+DECIMAL :    OP? ('0'..'9')+ '.' ('0'..'9')* EXP?
+           | OP? '.' ('0'..'9')+ EXP?
+           | OP? ('0'..'9')+ EXP;
 
+fragment OP: ('+'|'-');
 fragment EXP : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
 
 TRUE	: 'true';

http://git-wip-us.apache.org/repos/asf/nifi/blob/7633fe35/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java b/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
index b8eacc8..f47fbbb 100644
--- a/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
+++ b/nifi-commons/nifi-expression-language/src/test/java/org/apache/nifi/attribute/expression/language/TestQuery.java
@@ -1063,7 +1063,13 @@ public class TestQuery {
         verifyEquals("${literal(\"5.5\")}", attributes, "5.5");
 
         verifyEquals("${literal(5.5):toNumber()}", attributes, 5L);
+        verifyEquals("${literal(-5.5):toNumber()}", attributes, -5L);
+        verifyEquals("${literal(+5.5):toNumber()}", attributes, 5L);
+
         verifyEquals("${literal(5.5):toDecimal()}", attributes, 5.5D);
+        verifyEquals("${literal(-5.5):toDecimal()}", attributes, -5.5D);
+        verifyEquals("${literal(+5.5):toDecimal()}", attributes, 5.5D);
+
         verifyEquals("${literal('0xF.Fp10'):toDecimal()}", attributes, 0xF.Fp10D);
 
         verifyEquals("${literal('0x1234567890ABCDEF'):toNumber()}", attributes, 0x1234567890ABCDEFL);
@@ -1079,49 +1085,49 @@ public class TestQuery {
 
         // Test decimal format X.X
         verifyEquals("${literal(5.5):toDecimal()}", attributes, 5.5D);
-        verifyEquals("${literal('-12.5'):toDecimal()}", attributes, -12.5D);
-        verifyEquals("${literal('+12.5'):toDecimal()}", attributes, 12.5D);
+        verifyEquals("${literal(-12.5):toDecimal()}", attributes, -12.5D);
+        verifyEquals("${literal(+12.5):toDecimal()}", attributes, 12.5D);
 
         // Test decimal format X.XEX with positive exponent
-        verifyEquals("${literal('-12.5E2'):toDecimal()}", attributes, -12.5E2D);
-        verifyEquals("${literal('-12.5e2'):toDecimal()}", attributes, -12.5e2D);
-        verifyEquals("${literal('-12.5e+2'):toDecimal()}", attributes, -12.5e+2D);
-        verifyEquals("${literal('12.5E+2'):toDecimal()}", attributes, 12.5E+2D);
-        verifyEquals("${literal('+12.5e+2'):toDecimal()}", attributes, +12.5e+2D);
-        verifyEquals("${literal('+12.5E2'):toDecimal()}", attributes, +12.5E2D);
-        verifyEquals("${literal('-12.5e2'):toDecimal()}", attributes, -12.5e2D);
-        verifyEquals("${literal('12.5E2'):toDecimal()}", attributes, 12.5E2D);
-        verifyEquals("${literal('+12.5e2'):toDecimal()}", attributes, +12.5e2D);
+        verifyEquals("${literal(-12.5E2):toDecimal()}", attributes, -12.5E2D);
+        verifyEquals("${literal(-12.5e2):toDecimal()}", attributes, -12.5e2D);
+        verifyEquals("${literal(-12.5e+2):toDecimal()}", attributes, -12.5e+2D);
+        verifyEquals("${literal(12.5E+2):toDecimal()}", attributes, 12.5E+2D);
+        verifyEquals("${literal(+12.5e+2):toDecimal()}", attributes, +12.5e+2D);
+        verifyEquals("${literal(+12.5E2):toDecimal()}", attributes, +12.5E2D);
+        verifyEquals("${literal(-12.5e2):toDecimal()}", attributes, -12.5e2D);
+        verifyEquals("${literal(12.5E2):toDecimal()}", attributes, 12.5E2D);
+        verifyEquals("${literal(+12.5e2):toDecimal()}", attributes, +12.5e2D);
 
         // Test decimal format X.XEX with negative exponent
-        verifyEquals("${literal('-12.5E-2'):toDecimal()}", attributes, -12.5E-2D);
-        verifyEquals("${literal('12.5E-2'):toDecimal()}", attributes, 12.5E-2D);
-        verifyEquals("${literal('+12.5e-2'):toDecimal()}", attributes, +12.5e-2D);
+        verifyEquals("${literal(-12.5E-2):toDecimal()}", attributes, -12.5E-2D);
+        verifyEquals("${literal(12.5E-2):toDecimal()}", attributes, 12.5E-2D);
+        verifyEquals("${literal(+12.5e-2):toDecimal()}", attributes, +12.5e-2D);
 
         // Test decimal format .X
-        verifyEquals("${literal('.5'):toDecimal()}", attributes, .5D);
-        verifyEquals("${literal('.5'):toDecimal()}", attributes, .5D);
-        verifyEquals("${literal('-.5'):toDecimal()}", attributes, -0.5D);
-        verifyEquals("${literal('+.5'):toDecimal()}", attributes, .5D);
+        verifyEquals("${literal(.5):toDecimal()}", attributes, .5D);
+        verifyEquals("${literal(.5):toDecimal()}", attributes, .5D);
+        verifyEquals("${literal(-.5):toDecimal()}", attributes, -0.5D);
+        verifyEquals("${literal(+.5):toDecimal()}", attributes, .5D);
 
         // Test decimal format .XEX with positive exponent
-        verifyEquals("${literal('-.5E2'):toDecimal()}", attributes, -.5E2D);
-        verifyEquals("${literal('-.5E2'):toDecimal()}", attributes, -.5E2D);
-        verifyEquals("${literal('-.5e+2'):toDecimal()}", attributes, -.5e+2D);
-        verifyEquals("${literal('.5E+2'):toDecimal()}", attributes, .5E+2D);
-        verifyEquals("${literal('+.5e+2'):toDecimal()}", attributes, +.5e+2D);
-        verifyEquals("${literal('+.5E2'):toDecimal()}", attributes, +.5E2D);
-        verifyEquals("${literal('-.5e2'):toDecimal()}", attributes, -.5e2D);
-        verifyEquals("${literal('.5E2'):toDecimal()}", attributes, .5E2D);
-        verifyEquals("${literal('+.5e2'):toDecimal()}", attributes, +.5e2D);
+        verifyEquals("${literal(-.5E2):toDecimal()}", attributes, -.5E2D);
+        verifyEquals("${literal(-.5E2):toDecimal()}", attributes, -.5E2D);
+        verifyEquals("${literal(-.5e+2):toDecimal()}", attributes, -.5e+2D);
+        verifyEquals("${literal(.5E+2):toDecimal()}", attributes, .5E+2D);
+        verifyEquals("${literal(+.5e+2):toDecimal()}", attributes, +.5e+2D);
+        verifyEquals("${literal(+.5E2):toDecimal()}", attributes, +.5E2D);
+        verifyEquals("${literal(-.5e2):toDecimal()}", attributes, -.5e2D);
+        verifyEquals("${literal(.5E2):toDecimal()}", attributes, .5E2D);
+        verifyEquals("${literal(+.5e2):toDecimal()}", attributes, +.5e2D);
 
         // Test decimal format .XEX with negative exponent
-        verifyEquals("${literal('-.5E-2'):toDecimal()}", attributes, -.5E-2D);
-        verifyEquals("${literal('.5e-2'):toDecimal()}", attributes, .5e-2D);
-        verifyEquals("${literal('+.5E-2'):toDecimal()}", attributes, +.5E-2D);
+        verifyEquals("${literal(-.5E-2):toDecimal()}", attributes, -.5E-2D);
+        verifyEquals("${literal(.5e-2):toDecimal()}", attributes, .5e-2D);
+        verifyEquals("${literal(+.5E-2):toDecimal()}", attributes, +.5E-2D);
 
         // Verify allowed values
-        verifyEquals("${literal('9876543210.0123456789e123'):toDecimal()}", attributes, 9876543210.0123456789e123D);
+        verifyEquals("${literal(9876543210.0123456789e123):toDecimal()}", attributes, 9876543210.0123456789e123D);
 
         verifyEmpty("${literal('A.1e123'):toDecimal()}", attributes);
         verifyEmpty("${literal('0.Ae123'):toDecimal()}", attributes);

http://git-wip-us.apache.org/repos/asf/nifi/blob/7633fe35/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
index 8f90f20..9635337 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/nfeditor/languages/nfel.js
@@ -662,16 +662,17 @@ nf.nfel = (function() {
                             }
 
                             return argumentStringResult;
-                        } else if (stream.match(/^(([0-9]+\.[0-9]*)([eE][+-]?([0-9])+)?)|((\.[0-9]+)([eE][+-]?([0-9])+)?)|(([0-9]+)([eE][+-]?([0-9])+))/)) {
+                        } else if (stream.match(/^[-\+]?((([0-9]+\.[0-9]*)([eE][+-]?([0-9])+)?)|((\.[0-9]+)([eE][+-]?([0-9])+)?)|(([0-9]+)([eE][+-]?([0-9])+)))/)) {
                             // -------------
                             // Decimal value
                             // -------------
                             // This matches the following ANTLR spec for deciamls
                             //
-                            // DECIMAL :    ('0'..'9')+ '.' ('0'..'9')* EXP?    ^([0-9]+\.[0-9]*)([eE][+-]?([0-9])+)?
-                            //             | '.' ('0'..'9')+ EXP?
-                            //             | ('0'..'9')+ EXP;
+                            // DECIMAL :     OP? ('0'..'9')+ '.' ('0'..'9')* EXP?    ^([0-9]+\.[0-9]*)([eE][+-]?([0-9])+)?
+                            //             | OP? '.' ('0'..'9')+ EXP?
+                            //             | OP? ('0'..'9')+ EXP;
                             //
+                            // fragment OP: ('+'|'-');
                             // fragment EXP : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
 
                             // change context back to arguments
@@ -679,7 +680,7 @@ nf.nfel = (function() {
 
                             // style for decimal (use same as number)
                             return 'number';
-                        } else if (stream.match(/^-?[0-9]+/)) {
+                        } else if (stream.match(/^[-\+]?[0-9]+/)) {
                             // -------------
                             // integer value
                             // -------------