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
commit 72a4a282612ccf119a1f5ef5fb5a1f30574781b8 Author: Josh Tynjala <[email protected]> AuthorDate: Wed Feb 4 09:08:35 2026 -0800 AccessorDefinition: fix function type expression metadata to work similarly to variables FunctionDefinition: don't add function type expression metadata to accessors because the AccessorDefinition will handle it --- .../internal/definitions/AccessorDefinition.java | 21 +++++++++++++++++++++ .../internal/definitions/FunctionDefinition.java | 4 +++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/AccessorDefinition.java b/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/AccessorDefinition.java index 286bfac3d..dcba594f2 100644 --- a/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/AccessorDefinition.java +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/AccessorDefinition.java @@ -38,6 +38,8 @@ import org.apache.royale.compiler.problems.DuplicateFunctionDefinitionProblem; import org.apache.royale.compiler.problems.UnresolvedNamespaceProblem; import org.apache.royale.compiler.projects.ICompilerProject; import org.apache.royale.compiler.scopes.IDefinitionSet; +import org.apache.royale.compiler.tree.as.IExpressionNode; +import org.apache.royale.compiler.tree.as.IFunctionTypeExpressionNode; import org.apache.royale.compiler.tree.as.IVariableNode; /** @@ -51,6 +53,25 @@ public abstract class AccessorDefinition extends FunctionDefinition implements I super(name); } + @Override + public TypeDefinitionBase resolveType(ICompilerProject project) + { + if (project.getAllowStrictFunctionTypes()) + { + IVariableNode accessorNode = getVariableNode(); + if (accessorNode != null) + { + IExpressionNode varTypeNode = accessorNode.getVariableTypeNode(); + if (varTypeNode instanceof IFunctionTypeExpressionNode) + { + IFunctionTypeExpressionNode funcTypeExprNode = (IFunctionTypeExpressionNode) varTypeNode; + addFunctionTypeMeta(funcTypeExprNode, null, project); + } + } + } + return super.resolveType(project); + } + @Override public AccessorDefinition resolveCorrespondingAccessor(ICompilerProject project) { diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/FunctionDefinition.java b/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/FunctionDefinition.java index 44b24f552..020f10b74 100644 --- a/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/FunctionDefinition.java +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/definitions/FunctionDefinition.java @@ -44,6 +44,7 @@ import org.apache.royale.compiler.projects.ICompilerProject; import org.apache.royale.compiler.scopes.IASScope; import org.apache.royale.compiler.scopes.IDefinitionSet; import org.apache.royale.compiler.tree.as.IASNode; +import org.apache.royale.compiler.tree.as.IAccessorNode; import org.apache.royale.compiler.tree.as.IContainerNode; import org.apache.royale.compiler.tree.as.IDefinitionNode; import org.apache.royale.compiler.tree.as.IExpressionNode; @@ -224,7 +225,8 @@ public class FunctionDefinition extends ScopedDefinitionBase implements IFunctio if (project.getAllowStrictFunctionTypes()) { IFunctionNode funcNode = (IFunctionNode) getNode(); - if (funcNode != null) + // accessors add the metadata in resolveType instead, similar to variables + if (funcNode != null && !(funcNode instanceof IAccessorNode)) { IExpressionNode returnTypeNode = funcNode.getReturnTypeNode(); if (returnTypeNode instanceof IFunctionTypeExpressionNode)
