This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new e8af9f803 MethodBodySemanticChecker: don't warn when comparing numeric 
or boolean with null if default initializers are disabled for JS
e8af9f803 is described below

commit e8af9f8032c079d1392bf9888ea45e9a5303556c
Author: Josh Tynjala <[email protected]>
AuthorDate: Tue Apr 28 14:19:18 2026 -0700

    MethodBodySemanticChecker: don't warn when comparing numeric or boolean 
with null if default initializers are disabled for JS
---
 RELEASE_NOTES.md                                   |  1 +
 .../apache/royale/compiler/clients/MXMLJSC.java    |  3 +-
 .../internal/driver/mxml/jsc/MXMLJSCJSBackend.java |  3 +-
 .../driver/mxml/jsc/MXMLJSCJSSWCBackend.java       |  3 +-
 .../driver/mxml/royale/MXMLRoyaleASDocBackend.java |  3 +-
 .../mxml/royale/MXMLRoyaleASDocDITABackend.java    |  3 +-
 .../driver/mxml/royale/MXMLRoyaleBackend.java      |  3 +-
 .../mxml/royale/MXMLRoyaleCordovaBackend.java      |  3 +-
 .../driver/mxml/royale/MXMLRoyaleSWCBackend.java   |  3 +-
 .../internal/projects/RoyaleJSProject.java         | 18 +++++++-
 .../projects/RoyaleJSProjectConfigurator.java      | 50 ++++++++++++++++++++++
 .../semantics/MethodBodySemanticChecker.java       | 12 +++++-
 .../royale/compiler/projects/IRoyaleJSProject.java | 27 ++++++++++++
 13 files changed, 121 insertions(+), 11 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index d8aa8450b..37a5b1857 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -77,6 +77,7 @@ Apache Royale Compiler 1.0.0
 - compiler: Added support for `mx.core.UIComponentDescriptor` with 
`-children-as-data=false` for JavaScript.
 - compiler: Improved parsing of `[Exclude]` metadata to make the member name 
an identifier for tooling.
 - compiler: Fixed namespace URI when namespace is defined in package.
+- compiler: Fixed warning for comparison of boolean or numeric type with 
`null` when using `-js-default-initializers=false` compiler option.
 - debugger: Added missing isolate ID to SWF load and unload events.
 - debugger: Fixed debugger targeting the current JDK version instead of the 
intended minimum JDK version.
 - debugger: Fixed localized messages appearing as unprocessed tokens.
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/MXMLJSC.java 
b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/MXMLJSC.java
index c777a0356..b83d05a94 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/MXMLJSC.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/MXMLJSC.java
@@ -43,6 +43,7 @@ import 
org.apache.royale.compiler.internal.definitions.DefinitionBase;
 import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration;
 import org.apache.royale.compiler.internal.parsing.as.RoyaleASDocDelegate;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.ISourceFileHandler;
 import org.apache.royale.compiler.internal.workspaces.Workspace;
@@ -466,7 +467,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, 
ProblemQueryProvider,
      */
     public boolean configure(final String[] args)
     {
-       projectConfigurator = new RoyaleProjectConfigurator(configurationClass);
+       projectConfigurator = new 
RoyaleJSProjectConfigurator(configurationClass);
        
         try
         {
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSBackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSBackend.java
index f9cad6014..b24a7b712 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSBackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSBackend.java
@@ -38,6 +38,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.jsc.MXMLJSCJSEmitter;
 import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration;
 import 
org.apache.royale.compiler.internal.driver.mxml.royale.MXMLRoyaleBackend;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.targets.RoyaleJSTarget;
 import org.apache.royale.compiler.internal.targets.JSTarget;
@@ -64,7 +65,7 @@ public class MXMLJSCJSBackend extends MXMLRoyaleBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(JSGoogConfiguration.class);
+        return new RoyaleJSProjectConfigurator(JSGoogConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSSWCBackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSSWCBackend.java
index 302c3db77..5f37ad78b 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSSWCBackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/jsc/MXMLJSCJSSWCBackend.java
@@ -38,6 +38,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.jsc.MXMLJSCJSEmitter;
 import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration;
 import org.apache.royale.compiler.internal.driver.mxml.MXMLBackend;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.targets.RoyaleSWCTarget;
 import org.apache.royale.compiler.internal.targets.JSTarget;
@@ -64,7 +65,7 @@ public class MXMLJSCJSSWCBackend extends MXMLBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(JSGoogConfiguration.class);
+        return new RoyaleJSProjectConfigurator(JSGoogConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocBackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocBackend.java
index be3cffb18..79ac9f00e 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocBackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocBackend.java
@@ -38,6 +38,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleBlockWa
 import org.apache.royale.compiler.internal.driver.js.goog.ASDocConfiguration;
 import 
org.apache.royale.compiler.internal.driver.mxml.ASDocASSourceFileHandler;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.ISourceFileHandler;
 import org.apache.royale.compiler.internal.targets.RoyaleSWCTarget;
@@ -65,7 +66,7 @@ public class MXMLRoyaleASDocBackend extends 
MXMLRoyaleSWCBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(ASDocConfiguration.class);
+        return new RoyaleJSProjectConfigurator(ASDocConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocDITABackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocDITABackend.java
index 6d7ac462e..bb161faa6 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocDITABackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleASDocDITABackend.java
@@ -38,6 +38,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleBlockWa
 import org.apache.royale.compiler.internal.driver.js.goog.ASDocConfiguration;
 import 
org.apache.royale.compiler.internal.driver.mxml.ASDocASSourceFileHandler;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.ISourceFileHandler;
 import org.apache.royale.compiler.internal.targets.RoyaleSWCTarget;
@@ -65,7 +66,7 @@ public class MXMLRoyaleASDocDITABackend extends 
MXMLRoyaleSWCBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(ASDocConfiguration.class);
+        return new RoyaleJSProjectConfigurator(ASDocConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleBackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleBackend.java
index 505a33e45..a67780fcb 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleBackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleBackend.java
@@ -40,6 +40,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyalePublish
 import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration;
 import org.apache.royale.compiler.internal.driver.mxml.MXMLBackend;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.targets.RoyaleJSTarget;
 import org.apache.royale.compiler.internal.targets.JSTarget;
@@ -66,7 +67,7 @@ public class MXMLRoyaleBackend extends MXMLBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(JSGoogConfiguration.class);
+        return new RoyaleJSProjectConfigurator(JSGoogConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleCordovaBackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleCordovaBackend.java
index 03dcb5186..5c651bf0d 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleCordovaBackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleCordovaBackend.java
@@ -29,6 +29,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleCordova
 import 
org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyalePublisher;
 import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.tree.mxml.IMXMLFileNode;
@@ -45,7 +46,7 @@ public class MXMLRoyaleCordovaBackend extends 
MXMLRoyaleBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(JSGoogConfiguration.class);
+        return new RoyaleJSProjectConfigurator(JSGoogConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleSWCBackend.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleSWCBackend.java
index 5b4e4a40b..868209662 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleSWCBackend.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/mxml/royale/MXMLRoyaleSWCBackend.java
@@ -38,6 +38,7 @@ import 
org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleEmitter
 import org.apache.royale.compiler.internal.driver.js.goog.JSGoogConfiguration;
 import org.apache.royale.compiler.internal.driver.mxml.MXMLBackend;
 import org.apache.royale.compiler.internal.projects.RoyaleJSProject;
+import 
org.apache.royale.compiler.internal.projects.RoyaleJSProjectConfigurator;
 import org.apache.royale.compiler.internal.projects.RoyaleProjectConfigurator;
 import org.apache.royale.compiler.internal.targets.RoyaleSWCTarget;
 import org.apache.royale.compiler.internal.targets.JSTarget;
@@ -64,7 +65,7 @@ public class MXMLRoyaleSWCBackend extends MXMLBackend
     @Override
     public Configurator createConfigurator()
     {
-        return new RoyaleProjectConfigurator(JSGoogConfiguration.class);
+        return new RoyaleJSProjectConfigurator(JSGoogConfiguration.class);
     }
 
     @Override
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
index 3f9d8a1f5..8bd86591a 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProject.java
@@ -64,6 +64,7 @@ import 
org.apache.royale.compiler.internal.tree.mxml.MXMLDocumentNode;
 import org.apache.royale.compiler.internal.tree.mxml.MXMLFileNode;
 import org.apache.royale.compiler.internal.units.SWCCompilationUnit;
 import org.apache.royale.compiler.internal.workspaces.Workspace;
+import org.apache.royale.compiler.projects.IRoyaleJSProject;
 import org.apache.royale.compiler.targets.ITargetSettings;
 import org.apache.royale.compiler.tree.as.IASNode;
 import org.apache.royale.compiler.tree.as.IClassNode;
@@ -81,7 +82,7 @@ import com.google.common.collect.ImmutableList;
  * @author aharui
  *
  */
-public class RoyaleJSProject extends RoyaleProject
+public class RoyaleJSProject extends RoyaleProject implements IRoyaleJSProject
 {
 
     /**
@@ -107,6 +108,21 @@ public class RoyaleJSProject extends RoyaleProject
 
     public ICompilationUnit mainCU;
 
+    private boolean defaultInitializers = true;
+
+    /**
+     * @return True if variables are initialized by default.
+     */
+    public boolean getDefaultInitializers()
+    {
+        return defaultInitializers;
+    }
+
+    public void setDefaultInitializers(boolean defaultInitializers)
+    {
+        this.defaultInitializers = defaultInitializers;
+    }
+
     @Override
     public void addDependency(ICompilationUnit from, ICompilationUnit to, 
DependencyTypeSet dt, String qname)
     {
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProjectConfigurator.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProjectConfigurator.java
new file mode 100644
index 000000000..55bbb720d
--- /dev/null
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/projects/RoyaleJSProjectConfigurator.java
@@ -0,0 +1,50 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.royale.compiler.internal.projects;
+
+import org.apache.royale.compiler.clients.JSConfiguration;
+import org.apache.royale.compiler.config.Configuration;
+
+/**
+ * This class applies configuration settings to a RoyaleJSProject.
+ */
+public class RoyaleJSProjectConfigurator extends RoyaleProjectConfigurator
+{
+    /**
+     * Constructor
+     */
+    public RoyaleJSProjectConfigurator(Class<? extends Configuration> 
configurationClass)
+    {
+        super(configurationClass);
+    }
+    
+    @Override
+    protected boolean applyConfiguration()
+    {
+        boolean result = super.applyConfiguration();
+        if (result && configuration instanceof JSConfiguration && project 
instanceof RoyaleJSProject)
+        {
+            JSConfiguration jsConfiguration = (JSConfiguration) configuration;
+            RoyaleJSProject royaleProject = (RoyaleJSProject) project;
+            
royaleProject.setDefaultInitializers(jsConfiguration.getJsDefaultInitializers());
+        }
+        return result;
+    }
+}
\ No newline at end of file
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/internal/semantics/MethodBodySemanticChecker.java
 
b/compiler/src/main/java/org/apache/royale/compiler/internal/semantics/MethodBodySemanticChecker.java
index 853e323bd..447f3a25a 100644
--- 
a/compiler/src/main/java/org/apache/royale/compiler/internal/semantics/MethodBodySemanticChecker.java
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/internal/semantics/MethodBodySemanticChecker.java
@@ -117,6 +117,7 @@ import 
org.apache.royale.compiler.internal.tree.as.VectorLiteralNode;
 import org.apache.royale.compiler.internal.tree.mxml.MXMLDocumentNode;
 import org.apache.royale.compiler.problems.*;
 import org.apache.royale.compiler.projects.ICompilerProject;
+import org.apache.royale.compiler.projects.IRoyaleJSProject;
 import org.apache.royale.compiler.scopes.IASScope;
 import org.apache.royale.compiler.scopes.IDefinitionSet;
 import org.apache.royale.compiler.tree.ASTNodeID;
@@ -900,8 +901,15 @@ public class MethodBodySemanticChecker
          
         boolean isBad = false;
         
-        // Numeric and boolean types can never be null
-        if ((leftIsNumericOrBoolean&&rightIsNull) || 
(rightIsNumericOrBoolean&&leftIsNull))
+        boolean defaultInitializers = true;
+        if (project instanceof IRoyaleJSProject)
+        {
+            defaultInitializers = 
((IRoyaleJSProject)project).getDefaultInitializers();
+        }
+        // Numeric and boolean types cannot be null
+        // unless default initializers are disabled for JS
+        // default initializers cannot be disabled for SWF
+        if (defaultInitializers && ((leftIsNumericOrBoolean&&rightIsNull) || 
(rightIsNumericOrBoolean&&leftIsNull)))
         {
             isBad = true;
         }
diff --git 
a/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleJSProject.java
 
b/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleJSProject.java
new file mode 100644
index 000000000..442d7cb8d
--- /dev/null
+++ 
b/compiler/src/main/java/org/apache/royale/compiler/projects/IRoyaleJSProject.java
@@ -0,0 +1,27 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.royale.compiler.projects;
+
+public interface IRoyaleJSProject extends IRoyaleProject
+{
+    /**
+     * @return True if variables are initialized by default.
+     */
+    boolean getDefaultInitializers();
+}

Reply via email to