public Value evaluate(Context cx, ClassDefinitionNode node) { if (doing_class) return null; doing_class = true; // inner classes are included multiple times in node->staticinits. Don't double // evaluate them. cx.pushStaticClassScopes(node); if (node.statements != null) node.statements.evaluate(cx, this); // now do the nested classes doing_class = false; { for (ClassDefinitionNode it : node.clsdefs) { it.evaluate(cx, this); } } cx.pushScope(node.iframe); { for (Node init : node.instanceinits) { if (cx.statics.es4_nullability && !init.isDefinition()) node.iframe.setInitOnly(true); init.evaluate(cx, this); if (cx.statics.es4_nullability && !init.isDefinition()) node.iframe.setInitOnly(false); } } cx.popScope(); // iframe cx.popStaticClassScopes(node); ClassDefinitionNode cdn = node; ReferenceValue ref = cdn.ref; Slot classSlot = null; if (ref != null) classSlot = ref.getSlot(cx); if (debugging) { addPositionMetadata(cx, cdn); } if (classSlot != null && classSlot.getMetadata() == null && cdn.metaData != null) for (Node meta_node : cdn.metaData.items) { if (meta_node instanceof MetaDataNode) { addMetadataToSlot(cx, classSlot, (MetaDataNode) meta_node); int i = isVersionMetadata(cx, (MetaDataNode) meta_node); if (i > -1) cdn.version = i; } } return null; }
public static void addImport(Context context, ClassDefinitionNode node, String packageName) { NodeFactory nodeFactory = new NodeFactory(context); PackageIdentifiersNode packageIdentifiers = null; StringTokenizer stringTokenizer = new StringTokenizer(packageName, "."); while (stringTokenizer.hasMoreTokens()) { String token = stringTokenizer.nextToken(); IdentifierNode identifier = nodeFactory.identifier(token); packageIdentifiers = nodeFactory.packageIdentifiers(packageIdentifiers, identifier, true); } PackageNameNode packageNameNode = nodeFactory.packageName(packageIdentifiers); ImportDirectiveNode importDirective = nodeFactory.importDirective(null, packageNameNode, null, context); importDirective.pkgdef = node.pkgdef; if (node.statements == null) { node.statements = new StatementListNode(null); } node.statements.items.add(0, importDirective); }