| /******************************************************************************* |
| * Copyright (c) 2007, 2014 BEA Systems, Inc. and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * wharley - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.apt.pluggable.core; |
| |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| import java.util.Hashtable; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Plugin; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.osgi.service.debug.DebugOptions; |
| import org.eclipse.osgi.service.debug.DebugOptionsListener; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.ServiceRegistration; |
| |
| /** |
| * The plug-in responsible for dispatch of Java 6 (JSR269 Pluggable Annotation |
| * Processing API) annotation processors in the IDE. |
| * This is named Apt6Plugin to distinguish it from AptPlugin, which is responsible |
| * for Java 5 (com.sun.mirror) processors. |
| */ |
| public class Apt6Plugin extends Plugin implements DebugOptionsListener { |
| |
| private static final SimpleDateFormat TRACE_DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS"); //$NON-NLS-1$ |
| |
| public static final String PLUGIN_ID = "org.eclipse.jdt.apt.pluggable.core"; //$NON-NLS-1$ |
| |
| /** |
| * Status IDs for system log entries. Must be unique per plugin. |
| */ |
| public static final int STATUS_EXCEPTION = 1; |
| |
| // Tracing options |
| public static boolean DEBUG = false; |
| public final static String APT_DEBUG_OPTION = Apt6Plugin.PLUGIN_ID + "/debug"; //$NON-NLS-1$ |
| |
| private static Apt6Plugin thePlugin = null; // singleton object |
| |
| private ServiceRegistration<DebugOptionsListener> debugRegistration; |
| |
| public Apt6Plugin() { |
| } |
| |
| @Override |
| public void start(BundleContext context) throws Exception { |
| super.start(context); |
| thePlugin = this; |
| |
| // register debug options listener |
| Hashtable<String, String> properties = new Hashtable<String, String>(2); |
| properties.put(DebugOptions.LISTENER_SYMBOLICNAME, PLUGIN_ID); |
| debugRegistration = context.registerService(DebugOptionsListener.class, this, properties); |
| } |
| |
| public void stop(BundleContext context) throws Exception { |
| super.stop(context); |
| |
| // unregister debug options listener |
| debugRegistration.unregister(); |
| debugRegistration = null; |
| } |
| |
| public void optionsChanged(DebugOptions options) { |
| DEBUG = options.getBooleanOption(APT_DEBUG_OPTION, false); |
| } |
| |
| public static Apt6Plugin getPlugin() { |
| return thePlugin; |
| } |
| |
| /** |
| * Log a status message to the platform log. Use this for reporting exceptions. |
| * @param status |
| */ |
| public static void log(IStatus status) { |
| thePlugin.getLog().log(status); |
| } |
| |
| /** |
| * Convenience wrapper around log(IStatus), to log an exception |
| * with severity of ERROR. |
| */ |
| public static void log(Throwable e, String message) { |
| log(new Status(IStatus.ERROR, PLUGIN_ID, STATUS_EXCEPTION, message, e)); |
| } |
| |
| /** |
| * Convenience wrapper around log(IStatus), to log an exception |
| * with severity of WARNING. |
| */ |
| public static void logWarning(Throwable e, String message) { |
| log(createWarningStatus(e, message)); |
| } |
| |
| /** |
| * Convenience wrapper for rethrowing exceptions as CoreExceptions, |
| * with severity of ERROR. |
| */ |
| public static Status createStatus(Throwable e, String message) { |
| return new Status(IStatus.ERROR, PLUGIN_ID, STATUS_EXCEPTION, message, e); |
| } |
| |
| /** |
| * Convenience wrapper for rethrowing exceptions as CoreExceptions, |
| * with severity of WARNING. |
| */ |
| public static Status createWarningStatus(Throwable e, String message) { |
| return new Status(IStatus.WARNING, PLUGIN_ID, STATUS_EXCEPTION, message, e); |
| } |
| |
| /** |
| * Convenience wrapper for rethrowing exceptions as CoreExceptions, |
| * with severity of INFO. |
| */ |
| public static Status createInfoStatus(Throwable e, String message) { |
| return new Status(IStatus.INFO, PLUGIN_ID, STATUS_EXCEPTION, message, e); |
| } |
| |
| public static void trace(final String msg) { |
| if (DEBUG) { |
| StringBuffer sb = new StringBuffer(); |
| sb.append('['); |
| // SimpleDateFormat is not thread-safe, according to javadoc |
| synchronized (TRACE_DATE_FORMAT) { |
| sb.append(TRACE_DATE_FORMAT.format(new Date())); |
| } |
| sb.append('-'); |
| // Some threads have qualified type names; too long. |
| String threadName = Thread.currentThread().getName(); |
| int dot = threadName.lastIndexOf('.'); |
| if (dot < 0) { |
| sb.append(threadName); |
| } else { |
| sb.append(threadName.substring(dot + 1)); |
| } |
| sb.append(']'); |
| sb.append(msg); |
| System.out.println(sb); |
| } |
| } |
| |
| } |