blob: 1796df01c49efabc031f8594351d3b5e55339d65 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.ode.bpel.compiler.api;
import org.apache.ode.utils.msg.MessageBundle;
public abstract class CompilationMessageBundle extends MessageBundle {
// TODO turn CompilationMessage.CODE into a proper Java5 enum
private static String[] PREFIXES = {"inf", "warn", "err"};
private static short[] SEVERITIES = {CompilationMessage.INFO, CompilationMessage.WARN,
CompilationMessage.ERROR};
protected CompilationMessage formatCompilationMessage(String message, Object... args) {
String methodName = "errUnknown";
String methodKey = null;
short severity = 0;
// format the regular message text
String msg = this.format(message, args);
// I will *so* burn in hell for this
StackTraceElement[] stack = new Throwable().getStackTrace();
if (stack.length > 1) {
methodName = stack[1].getMethodName();
}
else {
// bummer: no stack trace - create an unknown error as fallback.
}
// find method prefix
for (int i = 0; i < PREFIXES.length; i++) {
if (methodName.startsWith(PREFIXES[i])) {
methodKey = methodName.substring(PREFIXES[i].length());
severity = SEVERITIES[i];
break;
}
}
// found a prefixed method?
if (methodKey == null) {
throw new UnsupportedOperationException("unexpected caller method: " + methodName);
}
CompilationMessage cmsg = new CompilationMessage();
cmsg.severity = severity;
cmsg.phase = 0;
cmsg.messageText = msg;
cmsg.code = methodKey;
return cmsg;
}
}