| /* | |
| * Copyright 2007 Google Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not | |
| * use this file except in compliance with the License. You may obtain a copy of | |
| * the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
| * License for the specific language governing permissions and limitations under | |
| * the License. | |
| */ | |
| #include "Tracer.h" | |
| #ifdef ENABLE_TRACING | |
| // initialize static fields | |
| FILE* Tracer::outfp = 0; | |
| JNIEnv* Tracer::jniEnv = 0; | |
| jclass Tracer::traceClass; | |
| jmethodID Tracer::traceMethod; | |
| int Tracer::indentation = 0; | |
| Tracer::LogLevel Tracer::logLevel = Tracer::LEVEL_WARNING; | |
| /* | |
| * Sets a JNI environment and Java class to pass trace messages to. | |
| * | |
| * env - JNI environment to use for trace calls | |
| * clazz - Java class, which must provide static void trace(String) | |
| */ | |
| bool Tracer::setJava(JNIEnv* env, jclass clazz) { | |
| jniEnv = env; | |
| if (!env) { | |
| return true; | |
| } | |
| traceClass = static_cast<jclass>(env->NewGlobalRef(clazz)); | |
| if (!traceClass || env->ExceptionCheck()) { | |
| return false; | |
| } | |
| traceMethod = env->GetStaticMethodID(traceClass, "trace", | |
| "(Ljava/lang/String;)V"); | |
| if (!traceMethod || env->ExceptionCheck()) { | |
| return false; | |
| } | |
| jstring msg = jniEnv->NewStringUTF("== Java trace started =="); | |
| jniEnv->CallStaticVoidMethod(traceClass, traceMethod, msg); | |
| return true; | |
| } | |
| #endif // ENABLE_TRACING | |
| /* | |
| * Throw a HostedModeException and log a failure message. | |
| * | |
| * Creates a new HostedModeException with the failure message, | |
| * and also logs the failure message | |
| * | |
| * env - JNI environment to throw the exception in | |
| * msg - failure message | |
| */ | |
| void Tracer::throwHostedModeException(JNIEnv* env, const char* msg) { | |
| #ifdef ENABLE_TRACING | |
| setFail(msg); | |
| #endif // ENABLE_TRACING | |
| jclass exceptionClass | |
| = env->FindClass("com/google/gwt/dev/shell/HostedModeException"); | |
| env->ThrowNew(exceptionClass, msg); | |
| } |