/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.editor.codecompletion.revisited.javaintegration; import org.python.copiedfromeclipsesrc.JDTNotAvailableException; import org.python.pydev.core.log.Log; import org.python.pydev.editor.codecompletion.revisited.modules.AbstractModule; import org.python.pydev.editor.codecompletion.revisited.modules.EmptyModuleForZip; /** * Wrap things related to jython (specially dependent on JDT) * * So, all accesses that require creation of objects dependent on JDT should be done through this class. * * @author Fabio */ public class JythonModulesManagerUtils { public static AbstractModule createModuleFromJar(EmptyModuleForZip emptyModuleForZip) throws JDTNotAvailableException { try { return new JavaZipModule(emptyModuleForZip); } catch (Exception e) { tryRethrowAsJDTNotAvailableException(e); throw new RuntimeException("Should never get here", e); } } /** * Handles the exception and re-throws it as a JDTNotAvailableException (if it was a LinkageError or a * ClassNotFoundException or a JDTNotAvailableException) or creates a RuntimeException and throws this exception * encapsulating the previous one * * @param e the exception that should be transformed to a JDTNotAvailableException (if possible) * @throws JDTNotAvailableException */ public static void tryRethrowAsJDTNotAvailableException(Throwable e) throws JDTNotAvailableException { if (isOptionalJDTClassNotFound(e)) { throw new JDTNotAvailableException(); } else if (e instanceof JDTNotAvailableException) { JDTNotAvailableException jdtNotAvailableException = (JDTNotAvailableException) e; throw jdtNotAvailableException; } else if (e instanceof RuntimeException) { RuntimeException runtimeException = (RuntimeException) e; throw runtimeException; } Log.log(e); throw new RuntimeException(e); } /** * @return true if the passed throwable belongs to a class of exceptions related to not having JDT available */ public static boolean isOptionalJDTClassNotFound(Throwable e) { return e instanceof LinkageError || e instanceof ClassNotFoundException || e instanceof NoClassDefFoundError; } }