blob: 7fb1f1d8b783c283fd1702a451944ff0d65a6c3c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* SAP AG - initial API and implementation
******************************************************************************/
package org.eclipse.ocl.examples.impactanalyzer.impl;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.EMFPlugin.EclipsePlugin;
import org.eclipse.emf.common.util.Diagnostic;
import org.osgi.framework.BundleContext;
public class ImpactAnalyzerPlugin extends EclipsePlugin {
private static ImpactAnalyzerPlugin plugin;
public static final String DEBUG = getPluginId() + "/debug"; //$NON-NLS-1$
public static final String EXCEPTIONS_CATCHING = DEBUG + "/exceptions/catching"; //$NON-NLS-1$
public static final String EMPTY_STRING = ""; //$NON-NLS-1$
private static final String SEPARATOR_SPACE = " "; //$NON-NLS-1$
private static final String PARENTHESIS_OPEN = "("; //$NON-NLS-1$
private static final String PARENTHESIS_CLOSE = ")"; //$NON-NLS-1$
private static final String SEPARATOR_METHOD = "#"; //$NON-NLS-1$
private static final String PREFIX_CATCHING = "CAUGHT "; //$NON-NLS-1$
public static final int IGNORED_EXCEPTION_WARNING = 10;
/**
* In stand-alone use, whether all tracing is turned on. This is compatible with the usage of 1.2 and earlier.
*
* @since 1.3
*/
private static boolean traceAll = Boolean.getBoolean("org.eclipse.ocl.examples.impactanalyzer.debug"); //$NON-NLS-1$;
/**
* Initializes me with my Eclipse plug-in descriptor.
*/
public ImpactAnalyzerPlugin() {
super();
// Remember the static instance.
plugin = this;
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
}
public static ImpactAnalyzerPlugin getPlugin() {
return plugin;
}
public static String getPluginId() {
return (getPlugin() != null) ? getPlugin().getBundle().getSymbolicName() : "org.eclipse.ocl.examples.impactanalyzer"; // last known bundle ID //$NON-NLS-1$
}
public static void log(int severity, int code, String message, Throwable throwable) {
//
// Status ctor requires a non-null message
String msg = message == null ? "" //$NON-NLS-1$
: message;
try {
if (getPlugin() != null) {
// Eclipse environment
getPlugin().log(new Status(severity, getPluginId(), code, msg, throwable));
} else {
// not in the Eclipse environment
if (shouldTrace(DEBUG)) {
switch (code) {
case Diagnostic.WARNING:
System.err.print("WARNING "); //$NON-NLS-1$
break;
case Diagnostic.ERROR:
case Diagnostic.CANCEL:
System.err.print("ERROR "); //$NON-NLS-1$
break;
default:
// don't output INFO or OK messages
return;
}
System.err.print(code);
System.err.print(": "); //$NON-NLS-1$
System.err.println(message);
if (throwable != null) {
throwable.printStackTrace(System.err);
}
}
}
} catch (IllegalArgumentException iae) {
catching(ImpactAnalyzerPlugin.class, "log", iae);//$NON-NLS-1$
}
}
/**
* Traces the catching of the specified throwable in the specified method of the specified class.
*
* @param clazz
* The class in which the throwable is being caught.
* @param methodName
* The name of the method in which the throwable is being caught.
* @param throwable
* The throwable that is being caught.
*
*/
public static void catching(Class<?> clazz, String methodName, Throwable throwable) {
if (shouldTrace(EXCEPTIONS_CATCHING)) {
trace(PREFIX_CATCHING + throwable.getMessage() + SEPARATOR_SPACE + PARENTHESIS_OPEN + clazz.getName()
+ SEPARATOR_METHOD + methodName + PARENTHESIS_CLOSE);
throwable.printStackTrace(System.err);
}
}
public static boolean shouldTrace(String option) {
if (getPlugin() != null) {
if (getPlugin().isDebugging()) {
return Boolean.TRUE.toString().equalsIgnoreCase(Platform.getDebugOption(option));
}
return false;
}
return traceAll || Boolean.getBoolean(option);
}
/**
* Emits the specified message to the trace log. It is the caller's responsibility to ensure that the appropriate tracing
* option is enabled.
*
* @param message
* a message
*
* @see #shouldTrace(String)
*/
public static void trace(String message) {
System.out.println("[OCL] " + message); //$NON-NLS-1$
}
}