/* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the debugger and core tools for the AspectJ(tm) * programming language; see http://aspectj.org * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is AspectJ. * * The Initial Developer of the Original Code is Xerox Corporation. Portions * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation. * All Rights Reserved. */ package org.aspectj.tools.ajdoc.rootmakers; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.aspectj.tools.ajdoc.ErrPrinter; /** * An abstract class for a javadoc rootmaker. * Provides some error handling and misc. functionality. * * @author Jeff Palm */ public abstract class Javadoc { /** Subclasses may want this ;). */ protected ErrPrinter err; /** Default ctor. */ public Javadoc() {} /** * Returns the result of invoking method, * on target owner, with arguments args. * This method handles errors that arise. * * @param method method to invoke. * @param owner target of the invocation. * @param args arguments to pass the method. * @return result of invoking the method on * the passed in owner with the passed in * parameters. */ protected final Object invoke(Method method, Object owner, Object[] args) { if (method == null || owner == null) return null; String classname = owner.getClass().getName(); String methodName = method.getName(); try { Thread.currentThread().setContextClassLoader (owner.getClass().getClassLoader()); return method.invoke(owner, args); } catch (InvocationTargetException e) { err.invocationTargetException(e, classname, methodName); } catch (IllegalAccessException e) { err.ex(e, "method_not_accessible", classname, methodName); } catch (Exception e) { err.ex(e, "exception_thrown", "List", classname, methodName, e != null ? e.getMessage() : e+""); } return null; } /** * Returns the Class with name classname. * This may return null if Class.forName returns null, * but otherwise, this method handles resulting errors. * * @param classname name of the class to get. * @return Class named clasname. */ protected final Class type(String classname) { try { return Class.forName(classname); } catch (ClassNotFoundException e) { err.ex(e, "class_not_found", "Hashtable", classname); } return null; } /** * Returns the method named name, whose parameters * are declared params, and which is declared * in type. * * @param name name of the method. * @param params type of the parameters. * @param type type in which the resulting method is declared. * @return the method named name, whose parameters * are declared params, and which is declared * in type. This may be null. */ protected final Method method(String name, Class[] params, Class type) { if (type == null) return null; try { return type.getMethod(name, params); } catch (NoSuchMethodException e) { err.ex(e, "method_not_found", type.getClass().getName(), name); } return null; } /** * Returns the Object resulting from default construction * of a class named classname. This method * handles all errors that arise. * * @param classname class name of the resulting Object. * @return new instance made from the default * construction of a class named * classname. This may be null. * @see #newInstance(Class) */ protected final Object newInstance(String classname) { return newInstance(type(classname)); } /** * Returns the Object resulting from default construction * of a class type. This method * handles all errors that arise. * * @param type Class of the resulting Object. * @return new instance made from the default * construction of a class named * classname. This may be null. */ protected final Object newInstance(Class type) { if (type == null) return null; try { return type.newInstance(); } catch (InstantiationException e) { err.ex(e, "must_have_default_ctor", type.getClass().getName()); return null; } catch (IllegalAccessException e) { err.ex(e, "method_not_accessible", type.getClass().getName(), "new()"); return null; } } }