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();
+}