From bf9cf5f0169070e4356602be28bb2141e47b092e Mon Sep 17 00:00:00 2001
From: AlexHaxe <Alexander.Blum@gmail.com>
Date: Thu, 5 Jan 2023 00:24:22 +0100
Subject: [PATCH] fixed null pointer issue in ReporterManager, fixes #517
 (#518)

* fixed null pointer issue in ReporterManager, fixes #517
* prepare release
---
 .github/workflows/checkstyle-linux.yml     |   4 +-
 .haxerc                                    |   2 +-
 CHANGELOG.md                               |   3 +
 buildJS.hxml                               |   2 -
 haxelib.json                               |   4 +-
 package-lock.json                          | 315 ++++++++++++++++++++-
 package.json                               |   7 +-
 src/checkstyle/Message.hx                  |   2 +-
 src/checkstyle/reporter/ReporterManager.hx |   2 +-
 uglifyCheckstyle.sh                        |  12 +
 10 files changed, 339 insertions(+), 14 deletions(-)
 create mode 100755 uglifyCheckstyle.sh

diff --git a/.github/workflows/checkstyle-linux.yml b/.github/workflows/checkstyle-linux.yml
index 7f922751..e4bb85cc 100644
--- a/.github/workflows/checkstyle-linux.yml
+++ b/.github/workflows/checkstyle-linux.yml
@@ -57,7 +57,9 @@ jobs:
         npx haxe build.hxml
         npx haxe buildDebug.hxml
     - name: Build NodeJs version
-      run: npx haxe buildJS.hxml
+      run: |
+        npx haxe buildJS.hxml
+        bash uglifyCheckstyle.sh
     - name: Build C++ version
       run: echo "y" | npx haxe buildCpp.hxml
     - name: Build JSON schema
diff --git a/.haxerc b/.haxerc
index 98d2f734..04bc99b7 100644
--- a/.haxerc
+++ b/.haxerc
@@ -1,4 +1,4 @@
 {
-  "version": "5645ecc",
+  "version": "966864c",
   "resolveLibs": "scoped"
 }
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3c7fcaa2..17cc562b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
 
 ## dev branch / next version (2.x.x)
 
+## version 2.8.4 (2023-01-05)
+
+- Fixed null pointer reference in BaseReporter, fixes [#517](https://github.com/HaxeCheckstyle/haxe-checkstyle/issues/517) ([#518](https://github.com/HaxeCheckstyle/haxe-checkstyle/issues/518))
 - Fixed null pointer reference in JSONReporter ([#516](https://github.com/HaxeCheckstyle/haxe-checkstyle/issues/516))
 - Fixed C++ compilation on nightly
 
diff --git a/buildJS.hxml b/buildJS.hxml
index cda23020..9703ab40 100644
--- a/buildJS.hxml
+++ b/buildJS.hxml
@@ -2,5 +2,3 @@ build/common.hxml
 -lib hxnodejs
 -main checkstyle.Main
 -js haxecheckstyle.js
-
--cmd mkdir -p bin && cp haxecheckstyle.js bin/checkstyle.js
\ No newline at end of file
diff --git a/haxelib.json b/haxelib.json
index 122ab6f1..3973a670 100644
--- a/haxelib.json
+++ b/haxelib.json
@@ -18,8 +18,8 @@
         "adireddy",
         "Gama11"
 	],
-    "releasenote": "fixed support for numeric separators and suffixes in MagicNumber check - see CHANGELOG",
-    "version": "2.8.3",
+    "releasenote": "fixed null pointer crashes in reporters - see CHANGELOG",
+    "version": "2.8.4",
     "url": "https://github.com/HaxeCheckstyle/haxe-checkstyle",
     "dependencies": {}
 }
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 5c91c6cd..a06308d2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,18 +1,102 @@
 {
     "name": "@haxecheckstyle/haxe-checkstyle",
-    "version": "2.8.3",
+    "version": "2.8.4",
     "lockfileVersion": 2,
     "requires": true,
     "packages": {
         "": {
             "name": "@haxecheckstyle/haxe-checkstyle",
-            "version": "2.8.3",
+            "version": "2.8.4",
             "license": "MIT",
             "bin": {
                 "haxe-checkstyle": "bin/checkstyle.js"
             },
             "devDependencies": {
-                "lix": "^15.12.0"
+                "lix": "^15.12.0",
+                "uglify-js-es6": "^2.8.9"
+            }
+        },
+        "node_modules/align-text": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+            "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==",
+            "dev": true,
+            "dependencies": {
+                "kind-of": "^3.0.2",
+                "longest": "^1.0.1",
+                "repeat-string": "^1.5.2"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/camelcase": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+            "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/center-align": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+            "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==",
+            "dev": true,
+            "dependencies": {
+                "align-text": "^0.1.3",
+                "lazy-cache": "^1.0.3"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/cliui": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+            "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==",
+            "dev": true,
+            "dependencies": {
+                "center-align": "^0.1.1",
+                "right-align": "^0.1.1",
+                "wordwrap": "0.0.2"
+            }
+        },
+        "node_modules/decamelize": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+            "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/is-buffer": {
+            "version": "1.1.6",
+            "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+            "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+            "dev": true
+        },
+        "node_modules/kind-of": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+            "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+            "dev": true,
+            "dependencies": {
+                "is-buffer": "^1.1.5"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/lazy-cache": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+            "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
         "node_modules/lix": {
@@ -27,14 +111,239 @@
                 "lix": "bin/lix.js",
                 "neko": "bin/nekoshim.js"
             }
+        },
+        "node_modules/longest": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+            "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/repeat-string": {
+            "version": "1.6.1",
+            "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+            "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10"
+            }
+        },
+        "node_modules/right-align": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+            "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==",
+            "dev": true,
+            "dependencies": {
+                "align-text": "^0.1.1"
+            },
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/source-map": {
+            "version": "0.5.7",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+            "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/uglify-js-es6": {
+            "version": "2.8.9",
+            "resolved": "https://registry.npmjs.org/uglify-js-es6/-/uglify-js-es6-2.8.9.tgz",
+            "integrity": "sha512-U+0UdDT77MSsO4Bz78y55UtXq/z6XvoZgHhohfu0oaDNs+Vq087kyARn1nR35QggwPfLfI7NFWFBihaU1+90Cg==",
+            "dev": true,
+            "dependencies": {
+                "source-map": "~0.5.1",
+                "uglify-to-browserify": "~1.0.0",
+                "yargs": "~3.10.0"
+            },
+            "bin": {
+                "uglifyjs": "bin/uglifyjs"
+            },
+            "engines": {
+                "node": ">=0.8.0"
+            }
+        },
+        "node_modules/uglify-to-browserify": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+            "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==",
+            "dev": true
+        },
+        "node_modules/window-size": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+            "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==",
+            "dev": true,
+            "engines": {
+                "node": ">= 0.8.0"
+            }
+        },
+        "node_modules/wordwrap": {
+            "version": "0.0.2",
+            "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+            "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==",
+            "dev": true,
+            "engines": {
+                "node": ">=0.4.0"
+            }
+        },
+        "node_modules/yargs": {
+            "version": "3.10.0",
+            "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+            "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==",
+            "dev": true,
+            "dependencies": {
+                "camelcase": "^1.0.2",
+                "cliui": "^2.1.0",
+                "decamelize": "^1.0.0",
+                "window-size": "0.1.0"
+            }
         }
     },
     "dependencies": {
+        "align-text": {
+            "version": "0.1.4",
+            "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+            "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==",
+            "dev": true,
+            "requires": {
+                "kind-of": "^3.0.2",
+                "longest": "^1.0.1",
+                "repeat-string": "^1.5.2"
+            }
+        },
+        "camelcase": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+            "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==",
+            "dev": true
+        },
+        "center-align": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+            "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==",
+            "dev": true,
+            "requires": {
+                "align-text": "^0.1.3",
+                "lazy-cache": "^1.0.3"
+            }
+        },
+        "cliui": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+            "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==",
+            "dev": true,
+            "requires": {
+                "center-align": "^0.1.1",
+                "right-align": "^0.1.1",
+                "wordwrap": "0.0.2"
+            }
+        },
+        "decamelize": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+            "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+            "dev": true
+        },
+        "is-buffer": {
+            "version": "1.1.6",
+            "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+            "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+            "dev": true
+        },
+        "kind-of": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+            "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+            "dev": true,
+            "requires": {
+                "is-buffer": "^1.1.5"
+            }
+        },
+        "lazy-cache": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+            "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==",
+            "dev": true
+        },
         "lix": {
             "version": "15.12.0",
             "resolved": "https://registry.npmjs.org/lix/-/lix-15.12.0.tgz",
             "integrity": "sha512-FA36oCl+M+3Of8L4eErXw7tAHGOjqEC4IgEvH6oPDsiYd4yN6XpzZGcbLuIyu4PiztjOrr1TKJnpwi32qb2ddw==",
             "dev": true
+        },
+        "longest": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+            "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==",
+            "dev": true
+        },
+        "repeat-string": {
+            "version": "1.6.1",
+            "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+            "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+            "dev": true
+        },
+        "right-align": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+            "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==",
+            "dev": true,
+            "requires": {
+                "align-text": "^0.1.1"
+            }
+        },
+        "source-map": {
+            "version": "0.5.7",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+            "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+            "dev": true
+        },
+        "uglify-js-es6": {
+            "version": "2.8.9",
+            "resolved": "https://registry.npmjs.org/uglify-js-es6/-/uglify-js-es6-2.8.9.tgz",
+            "integrity": "sha512-U+0UdDT77MSsO4Bz78y55UtXq/z6XvoZgHhohfu0oaDNs+Vq087kyARn1nR35QggwPfLfI7NFWFBihaU1+90Cg==",
+            "dev": true,
+            "requires": {
+                "source-map": "~0.5.1",
+                "uglify-to-browserify": "~1.0.0",
+                "yargs": "~3.10.0"
+            }
+        },
+        "uglify-to-browserify": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+            "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==",
+            "dev": true
+        },
+        "window-size": {
+            "version": "0.1.0",
+            "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+            "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==",
+            "dev": true
+        },
+        "wordwrap": {
+            "version": "0.0.2",
+            "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+            "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==",
+            "dev": true
+        },
+        "yargs": {
+            "version": "3.10.0",
+            "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+            "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==",
+            "dev": true,
+            "requires": {
+                "camelcase": "^1.0.2",
+                "cliui": "^2.1.0",
+                "decamelize": "^1.0.0",
+                "window-size": "0.1.0"
+            }
         }
     }
 }
diff --git a/package.json b/package.json
index 8f114e8f..fc0acd9d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@haxecheckstyle/haxe-checkstyle",
-    "version": "2.8.3",
+    "version": "2.8.4",
     "description": "Automated code analysis ideal for projects that want to enforce a coding standard.",
     "repository": {
         "type": "git",
@@ -29,7 +29,8 @@
         }
     ],
     "devDependencies": {
-        "lix": "^15.12.0"
+        "lix": "^15.12.0",
+		"uglify-js-es6": "^2.8.9"
     },
     "bugs": "https://github.com/HaxeCheckstyle/haxe-checkstyle/issues",
     "license": "MIT",
@@ -43,6 +44,6 @@
         "registry": "https://npm.pkg.github.com/"
     },
     "scripts": {
-        "build": "haxe buildAll.hxml"
+        "build": "haxe buildJS.hxml && ./uglifyCheckstyle.sh"
     }
 }
diff --git a/src/checkstyle/Message.hx b/src/checkstyle/Message.hx
index c34556d0..133e4278 100644
--- a/src/checkstyle/Message.hx
+++ b/src/checkstyle/Message.hx
@@ -10,7 +10,7 @@ typedef Message = MessageLocation & {
 	var moduleName:String;
 	var categories:Array<Category>;
 	var points:Int;
-	@:optional var related:Array<MessageLocation>;
+	var related:Array<MessageLocation>;
 };
 
 typedef MessageLocation = {
diff --git a/src/checkstyle/reporter/ReporterManager.hx b/src/checkstyle/reporter/ReporterManager.hx
index e41939f7..58d7418f 100644
--- a/src/checkstyle/reporter/ReporterManager.hx
+++ b/src/checkstyle/reporter/ReporterManager.hx
@@ -132,7 +132,7 @@ class ReporterManager {
 			desc: "",
 			code: '$e',
 			message: '$step failed: $e\nPlease file a github issue at https://github.com/HaxeCheckstyle/haxe-checkstyle/issues',
-			related: null
+			related: []
 		};
 	}
 }
diff --git a/uglifyCheckstyle.sh b/uglifyCheckstyle.sh
new file mode 100755
index 00000000..467b5580
--- /dev/null
+++ b/uglifyCheckstyle.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+mkdir -p bin
+
+npx uglify-js-es6 haxecheckstyle.js -o bin/checkstyle.uglify.js
+
+echo '#!/usr/bin/env node' > bin/checkstyle.js
+echo "" >> bin/checkstyle.js
+cat bin/checkstyle.uglify.js >> bin/checkstyle.js
+chmod 755 bin/checkstyle.js
+
+rm bin/checkstyle.uglify.js