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 8af5173a3 MXMLRoyaleEmitter: fix null exceptions when emitter encounters variables or functions without a type declaration 8af5173a3 is described below commit 8af5173a35342f3ff6e2b2ac3840cc4e32071bd7 Author: Josh Tynjala <joshtynj...@apache.org> AuthorDate: Thu May 25 11:57:19 2023 -0700 MXMLRoyaleEmitter: fix null exceptions when emitter encounters variables or functions without a type declaration --- .../codegen/mxml/royale/MXMLRoyaleEmitter.java | 57 ++++++++++++++++++---- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java index 4034a5fed..ce5b26088 100644 --- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java +++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java @@ -53,7 +53,6 @@ import org.apache.royale.compiler.constants.IASKeywordConstants; import org.apache.royale.compiler.constants.IASLanguageConstants; import org.apache.royale.compiler.definitions.IClassDefinition; import org.apache.royale.compiler.definitions.IDefinition; -import org.apache.royale.compiler.definitions.IFunctionDefinition; import org.apache.royale.compiler.definitions.INamespaceDefinition; import org.apache.royale.compiler.definitions.ITypeDefinition; import org.apache.royale.compiler.internal.as.codegen.InstructionListNode; @@ -1251,8 +1250,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements varData.add(data); data.name = varNode.getName(); data.isStatic = varNode.hasModifier(ASModifier.STATIC); - String qualifiedTypeName = varNode.getVariableTypeNode().resolveType(getMXMLWalker().getProject()).getQualifiedName(); - data.type = (qualifiedTypeName); + String qualifiedTypeName = "*"; + IExpressionNode variableTypeNode = varNode.getVariableTypeNode(); + if (variableTypeNode != null) + { + qualifiedTypeName = variableTypeNode.resolveType(getMXMLWalker().getProject()).getQualifiedName(); + } + data.type = qualifiedTypeName; IMetaTagsNode metaData = varNode.getMetaTags(); if (metaData != null) { @@ -1337,7 +1341,11 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements data.name = methodNode.getName(); String qualifiedTypeName = methodNode.getReturnType(); if (!(qualifiedTypeName.equals("") || qualifiedTypeName.equals("void"))) { - qualifiedTypeName = methodNode.getReturnTypeNode().resolveType(fjs).getQualifiedName();; + IExpressionNode returnTypeNode = methodNode.getReturnTypeNode(); + if (returnTypeNode != null) + { + qualifiedTypeName = returnTypeNode.resolveType(fjs).getQualifiedName();; + } } data.type = qualifiedTypeName; data.declaredBy = cdef.getQualifiedName(); @@ -1432,14 +1440,31 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements data.isStatic = accessorNode.hasModifier(ASModifier.STATIC); if (p.getter != null) { - data.type = p.getter.getReturnTypeNode().resolveType(fjs).getQualifiedName(); - if (p.setter !=null) { + String returnType = "*"; + IExpressionNode returnTypeNode = p.getter.getReturnTypeNode(); + if (returnTypeNode != null) + { + returnType = returnTypeNode.resolveType(fjs).getQualifiedName(); + } + data.type = returnType; + if (p.setter != null) + { data.access = "readwrite"; - } else data.access = "readonly"; + } + else + { + data.access = "readonly"; + } } else { - data.type = p.setter.getVariableTypeNode().resolveType(fjs).getQualifiedName(); + String returnType = "*"; + IExpressionNode variableTypeNode = p.setter.getVariableTypeNode(); + if (variableTypeNode != null) + { + returnType = variableTypeNode.resolveType(fjs).getQualifiedName(); + } + data.type = returnType; data.access = "writeonly"; } @@ -2174,7 +2199,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements bindableVarInfo.metaTags = tags; } - bindableVarInfo.type = variableNode.getVariableTypeNode().resolveType(getMXMLWalker().getProject()).getQualifiedName(); + String bindableVarType = "*"; + IExpressionNode variableTypeNode = variableNode.getVariableTypeNode(); + if (variableTypeNode != null) + { + bindableVarType = variableTypeNode.resolveType(getMXMLWalker().getProject()).getQualifiedName(); + } + bindableVarInfo.type = bindableVarType; ((JSRoyaleEmitter) asEmitter).getModel().getBindableVars().put(variableNode.getName(), bindableVarInfo); } } @@ -3658,7 +3689,13 @@ public class MXMLRoyaleEmitter extends MXMLEmitter implements write("_"); // use backing variable write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.EQUAL); - fjs.emitAssignmentCoercion(vnode, varnode.getVariableTypeNode().resolve(getMXMLWalker().getProject())); + IDefinition varTypeDef = null; + IExpressionNode variableTypeNode = varnode.getVariableTypeNode(); + if (variableTypeNode != null) + { + varTypeDef = variableTypeNode.resolve(getMXMLWalker().getProject()); + } + fjs.emitAssignmentCoercion(vnode, varTypeDef); write(ASEmitterTokens.SEMICOLON); }