/* * Copyright (c) 1998-2011 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * Free SoftwareFoundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */ package com.caucho.es.parser; import com.caucho.es.ESException; import com.caucho.es.ESId; import com.caucho.server.util.CauchoSystem; import java.io.IOException; import java.lang.reflect.Modifier; /** * Expression representing a Java package, i.e. a partial class. */ class PackageExpr extends Expr { private Expr rawExpr; private String name; private PackageExpr(Block block, Expr rawExpr, String name) { super(block); this.rawExpr = rawExpr; this.name = name; } PackageExpr(Block block) { super(block); this.rawExpr = block.newVar(ESId.intern("Packages")); this.name = null; } static Expr create(Block block, Expr rawExpr, String name) { ClassLoader loader = block.getClassLoader(); try { Class cl; cl = CauchoSystem.loadClass(name, false, loader); if (Modifier.isPublic(cl.getModifiers())) return new JavaClassExpr(block, cl); } catch (Throwable e) { } return new PackageExpr(block, rawExpr, name); } void setType(int type) { } int getType() { return TYPE_ES; } Expr getTypeExpr() { return null; } Expr fieldReference(ESId id) throws ESException { String newName = null; if (name == null) newName = id.toString(); else newName = name + "." + id.toString(); return PackageExpr.create(block, rawExpr.fieldReference(id), newName); } Expr fieldReference(Expr expr) { return rawExpr.fieldReference(expr); } CallExpr startCall() throws ESException { return rawExpr.startCall(); } CallExpr startNew() throws ESException { return rawExpr.startNew(); } void printImpl() throws IOException { rawExpr.printImpl(); } }