Configuration: added -warn-this-within-closure compiler option (references #90)

(cherry picked from commit 9a651d8077275633240f51c94b47f0ae7e0ac34f)
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/clients/problems/ProblemSettingsFilter.java b/compiler-common/src/main/java/org/apache/royale/compiler/clients/problems/ProblemSettingsFilter.java
index 8f857c6..2930c7f 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/clients/problems/ProblemSettingsFilter.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/clients/problems/ProblemSettingsFilter.java
@@ -41,6 +41,7 @@
 import org.apache.royale.compiler.problems.ScopedToDefaultNamespaceProblem;
 import org.apache.royale.compiler.problems.SemanticWarningProblem;
 import org.apache.royale.compiler.problems.StrictSemanticsProblem;
+import org.apache.royale.compiler.problems.ThisUsedInClosureProblem;
 import org.apache.royale.compiler.problems.VariableHasNoTypeDeclarationProblem;
 
 /**
@@ -65,6 +66,7 @@
  * -warn-instanceof-changes
  * -warn-missing-namespace-decl
  * -warn-no-type-decl
+ * -warn-this-within-closure
  * 
  */
 public class ProblemSettingsFilter implements IProblemFilter
@@ -186,6 +188,8 @@
                 ICompilerSettings.WARN_MISSING_NAMESPACE_DECL);
         setShowActionScriptWarning(VariableHasNoTypeDeclarationProblem.class, 
                 ICompilerSettings.WARN_NO_TYPE_DECL);
+        setShowActionScriptWarning(ThisUsedInClosureProblem.class, 
+                ICompilerSettings.WARN_THIS_WITHIN_CLOSURE);
     }
 
     /**
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/config/Configuration.java b/compiler-common/src/main/java/org/apache/royale/compiler/config/Configuration.java
index c1d2ada..3817b3e 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/config/Configuration.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/config/Configuration.java
@@ -4053,6 +4053,24 @@
     }
 
     //
+    // 'compiler.warn-this-within-closure' option
+    //
+
+    private boolean warn_this_within_closure = true;
+
+    public boolean warn_this_within_closure()
+    {
+        return warn_this_within_closure;
+    }
+
+    @Config(advanced = true)
+    @Mapping({ "compiler", "warn-this-within-closure" })
+    public void setCompilerWarnThisWithinClosure(ConfigurationValue cv, boolean b)
+    {
+        warn_this_within_closure = b;
+    }
+
+    //
     // compiler.generate-abstract-syntax-tree
     //
 
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/config/Configurator.java b/compiler-common/src/main/java/org/apache/royale/compiler/config/Configurator.java
index 065f7b1..bb90ae6 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/config/Configurator.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/config/Configurator.java
@@ -2300,6 +2300,7 @@
      * --compiler.warn-slow-text-field-addition
      * --compiler.warn-unlikely-function-value
      * --compiler.warn-xml-class-has-changed
+     * --compiler.warn-this-within-closure
      * </pre>
      * 
      * @param warningCode warning code
@@ -2340,6 +2341,7 @@
      * @see #WARN_SLOW_TEXTFIELD_ADDITION
      * @see #WARN_UNLIKELY_FUNCTION_VALUE
      * @see #WARN_XML_CLASS_HAS_CHANGED
+     * @see #WARN_THIS_WITHIN_CLOSURE
      */
     @Override
     public void checkActionScriptWarning(int warningCode, boolean b)
@@ -2456,6 +2458,9 @@
         case WARN_XML_CLASS_HAS_CHANGED:
             key = COMPILER_WARN_XML_CLASS_HAS_CHANGED;
             break;
+        case WARN_THIS_WITHIN_CLOSURE:
+            key = COMPILER_WARN_THIS_WITHIN_CLOSURE;
+            break;
         }
         
         if (key != null)
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerProblemSettings.java b/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerProblemSettings.java
index 355987e..9e0ed7c 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerProblemSettings.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerProblemSettings.java
@@ -157,6 +157,7 @@
       * --compiler.warn-slow-text-field-addition
       * --compiler.warn-unlikely-function-value
       * --compiler.warn-xml-class-has-changed
+      * --compiler.warn-this-within-closure
       * </pre>
       * 
       * @param warningCode warning code, one of:
@@ -198,6 +199,7 @@
       * <li> WARN_SLOW_TEXTFIELD_ADDITION
       * <li> WARN_UNLIKELY_FUNCTION_VALUE
       * <li> WARN_XML_CLASS_HAS_CHANGED
+      * <li> WARN_THIS_WITHIN_CLOSURE
       * </ul>
       * </p>
       */
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerSettingsConstants.java b/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerSettingsConstants.java
index 71a39ec..3dd99ce 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerSettingsConstants.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/config/ICompilerSettingsConstants.java
@@ -51,6 +51,7 @@
     static final String DEFAULT_BACKGROUND_COLOR                             = "--default-background-color";
     static final String DEBUG_PASSWORD                                       = "--debug-password";
     static final String SWF_VERSION                                          = "--swf-version";
+    static final String COMPILER_WARN_THIS_WITHIN_CLOSURE                    = "--compiler.warn-this-within-closure";
     static final String COMPILER_WARN_XML_CLASS_HAS_CHANGED                  = "--compiler.warn-xml-class-has-changed";
     static final String COMPILER_WARN_UNLIKELY_FUNCTION_VALUE                = "--compiler.warn-unlikely-function-value";
     static final String COMPILER_WARN_SLOW_TEXT_FIELD_ADDITION               = "--compiler.warn-slow-text-field-addition";
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/constants/IASWarningConstants.java b/compiler-common/src/main/java/org/apache/royale/compiler/constants/IASWarningConstants.java
index 99db8ef..2b6b337 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/constants/IASWarningConstants.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/constants/IASWarningConstants.java
@@ -209,4 +209,9 @@
      * Possible usage of the ActionScript 2.0 <code>XML</code> class.
      */
     static final int XML_CLASS_HAS_CHANGED = 3573;
+
+    /**
+     * Keyword this within closure.
+     */
+    static final int THIS_WITHIN_CLOSURE = 20000;
 }
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/CompilerProblemSettings.java b/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/CompilerProblemSettings.java
index 868293f..3bdc442 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/CompilerProblemSettings.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/CompilerProblemSettings.java
@@ -213,6 +213,9 @@
         case ICompilerSettings.WARN_XML_CLASS_HAS_CHANGED:
             warning = configuration.warn_xml_class_has_changed();
             break;
+        case ICompilerSettings.WARN_THIS_WITHIN_CLOSURE:
+            warning = configuration.warn_this_within_closure();
+            break;
         }
         
         return warning;
diff --git a/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/ICompilerSettings.java b/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/ICompilerSettings.java
index 4bc7e75..054de47 100644
--- a/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/ICompilerSettings.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/internal/config/ICompilerSettings.java
@@ -547,6 +547,11 @@
      * Possible usage of the ActionScript 2.0 <code>XML</code> class.
      */
     int WARN_XML_CLASS_HAS_CHANGED = IASWarningConstants.XML_CLASS_HAS_CHANGED;
+
+    /**
+     * Keyword this within closure.
+     */
+    int WARN_THIS_WITHIN_CLOSURE = IASWarningConstants.THIS_WITHIN_CLOSURE;
      
     /**
      * Enables checking of the following ActionScript warnings:
@@ -588,6 +593,7 @@
      * --compiler.warn-slow-text-field-addition
      * --compiler.warn-unlikely-function-value
      * --compiler.warn-xml-class-has-changed
+     * --compiler.warn-this-within-closure
      * </pre>
      * 
      * @param warningCode Warning code.
@@ -629,6 +635,7 @@
      * @see #WARN_SLOW_TEXTFIELD_ADDITION
      * @see #WARN_UNLIKELY_FUNCTION_VALUE
      * @see #WARN_XML_CLASS_HAS_CHANGED
+     * @see #WARN_THIS_WITHIN_CLOSURE
      */
     void checkActionScriptWarning(int warningCode, boolean b);
 
diff --git a/compiler/src/main/java/org/apache/royale/compiler/problems/ThisUsedInClosureProblem.java b/compiler-common/src/main/java/org/apache/royale/compiler/problems/ThisUsedInClosureProblem.java
similarity index 96%
rename from compiler/src/main/java/org/apache/royale/compiler/problems/ThisUsedInClosureProblem.java
rename to compiler-common/src/main/java/org/apache/royale/compiler/problems/ThisUsedInClosureProblem.java
index 8a2dc28..28ef5df 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/problems/ThisUsedInClosureProblem.java
+++ b/compiler-common/src/main/java/org/apache/royale/compiler/problems/ThisUsedInClosureProblem.java
@@ -29,6 +29,8 @@
 {
     public static final String DESCRIPTION =
         "Encountered ${THIS} keyword within closure. Value of ${THIS} will not be the same as enclosing scope.";
+    
+    public static final int warningCode = 20000;
 
     public ThisUsedInClosureProblem(IASNode site)
     {