| /* |
| * |
| * 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 flex2.compiler.util; |
| |
| //import flash.localization.LocalizationManager; |
| import flex2.compiler.ILocalizableMessage; |
| import flex2.compiler.Logger; |
| import flex2.compiler.io.FileUtil; |
| |
| /** |
| * A Logger implementation that uses System.err and System.out to |
| * output messages. |
| * |
| * @author Clement Wong |
| */ |
| public class ConsoleLogger extends AbstractLogger implements Logger |
| { |
| private static final String lineSeparator = System.getProperty("line.separator"); |
| |
| public ConsoleLogger() |
| { |
| this(true, true, true, true); |
| } |
| |
| public ConsoleLogger(boolean isInfoEnabled, boolean isDebugEnabled, boolean isWarningEnabled, boolean isErrorEnabled) |
| { |
| this.isInfoEnabled = isInfoEnabled; |
| this.isDebugEnabled = isDebugEnabled; |
| this.isWarningEnabled = isWarningEnabled; |
| this.isErrorEnabled = isErrorEnabled; |
| |
| init(/*ThreadLocalToolkit.getLocalizationManager()*/); |
| } |
| |
| private boolean isInfoEnabled, isDebugEnabled, isWarningEnabled, isErrorEnabled; |
| |
| private int errorCount; |
| private int warningCount; |
| |
| public int errorCount() |
| { |
| return errorCount; |
| } |
| |
| public int warningCount() |
| { |
| return warningCount; |
| } |
| |
| public void logInfo(String info) |
| { |
| if (!isInfoEnabled) |
| { |
| return; |
| } |
| printOut(info, false); |
| } |
| |
| public void logDebug(String debug) |
| { |
| if (!isDebugEnabled) |
| { |
| return; |
| } |
| printOut(debug, false); |
| } |
| |
| public void logWarning(String warning) |
| { |
| if (!isWarningEnabled) |
| { |
| return; |
| } |
| printWarning(WARNING + ": " + warning); |
| } |
| |
| public void logError(String error) |
| { |
| if (!isErrorEnabled) |
| { |
| return; |
| } |
| printError(ERROR + ": " + error); |
| } |
| |
| public void logInfo(String path, String info) |
| { |
| if (!isInfoEnabled) |
| { |
| return; |
| } |
| printOut(path + lineSeparator + lineSeparator + info); |
| } |
| |
| public void logDebug(String path, String debug) |
| { |
| if (!isDebugEnabled) |
| { |
| return; |
| } |
| printOut(path + lineSeparator + lineSeparator + debug); |
| } |
| |
| public void logWarning(String path, String warning) |
| { |
| if (!isWarningEnabled) |
| { |
| return; |
| } |
| printWarning(path + lineSeparator + lineSeparator + WARNING + ": " + warning); |
| } |
| |
| public void logWarning(String path, String warning, int errorCode) |
| { |
| logWarning(path, warning); |
| } |
| |
| public void logError(String path, String error) |
| { |
| if (!isErrorEnabled) |
| { |
| return; |
| } |
| printError(path + lineSeparator + lineSeparator + ERROR + ": " + error); |
| } |
| |
| public void logError(String path, String error, int errorCode) |
| { |
| logError(path, error); |
| } |
| |
| public void logInfo(String path, int line, String info) |
| { |
| if (!isInfoEnabled) |
| { |
| return; |
| } |
| printOut(path + "(" + line + "):" + " " + info); |
| } |
| |
| public void logDebug(String path, int line, String debug) |
| { |
| if (!isDebugEnabled) |
| { |
| return; |
| } |
| printOut(path + "(" + line + "):" + " " + debug); |
| } |
| |
| public void logWarning(String path, int line, String warning) |
| { |
| if (!isWarningEnabled) |
| { |
| return; |
| } |
| printWarning(path + "(" + line + "):" + " " + WARNING + ": " + warning + lineSeparator + lineSeparator + getLineText(path, line)); |
| } |
| |
| public void logWarning(String path, int line, String warning, int errorCode) |
| { |
| logWarning(path, line, warning); |
| } |
| |
| public void logError(String path, int line, String error) |
| { |
| if (!isErrorEnabled) |
| { |
| return; |
| } |
| printError(path + "(" + line + "): " + " " + ERROR + ": " + error + lineSeparator + lineSeparator + getLineText(path, line)); |
| } |
| |
| public void logError(String path, int line, String error, int errorCode) |
| { |
| logError(path, line, error); |
| } |
| |
| public void logInfo(String path, int line, int col, String info) |
| { |
| if (!isInfoEnabled) |
| { |
| return; |
| } |
| printOut(path + "(" + line + "): " + COL + ": " + col + " " + info); |
| } |
| |
| public void logDebug(String path, int line, int col, String debug) |
| { |
| if (!isDebugEnabled) |
| { |
| return; |
| } |
| printOut(path + "(" + line + "): " + COL + ": " + col + " " + debug); |
| } |
| |
| public void logWarning(String path, int line, int col, String warning) |
| { |
| if (!isWarningEnabled) |
| { |
| return; |
| } |
| // C: no source... must read from path... |
| String lineText = getLineText(path, line); |
| printWarning(path + "(" + line + "): " + COL + ": " + col + " " + WARNING + ": " + warning + lineSeparator + lineSeparator + |
| lineText + lineSeparator + getLinePointer(col, lineText)); |
| } |
| |
| public void log( ILocalizableMessage m) |
| { |
| log(m, null); |
| } |
| |
| public void log( ILocalizableMessage m, String source) |
| { |
| if (m.getLevel() == ILocalizableMessage.ERROR) |
| { |
| if (!isErrorEnabled) |
| { |
| return; |
| } |
| } |
| else if (m.getLevel() == ILocalizableMessage.WARNING) |
| { |
| if (!isWarningEnabled) |
| { |
| return; |
| } |
| } |
| else |
| { |
| if (!isInfoEnabled) |
| { |
| return; |
| } |
| } |
| String prefix = formatPrefix( /*getLocalizationManager(),*/ m ); |
| boolean found = true; |
| //LocalizationManager loc = getLocalizationManager(); |
| String text = null; //loc.getLocalizedTextString( m ); |
| if (text == null) |
| { |
| text = m.getClass().getName(); |
| found = false; |
| } |
| String exText = formatExceptionDetail(m /*, loc*/); |
| if (m.getPath() != null && m.getLine() != -1) |
| { |
| exText += lineSeparator + lineSeparator + (source == null ? getLineText(m.getPath(), m.getLine()) : source); |
| } |
| if (m.getColumn() != -1) |
| { |
| exText += lineSeparator + getLinePointer(m.getColumn(), source); |
| } |
| if (m.getLevel() == ILocalizableMessage.INFO) |
| { |
| printOut(prefix + text + exText, false); |
| } |
| else if (m.getLevel() == ILocalizableMessage.WARNING) |
| { |
| printWarning(prefix + text + exText); |
| } |
| else |
| { |
| printError(prefix + text + exText); |
| } |
| assert found : "Localized text missing for " + m.getClass().getName(); |
| } |
| |
| public void logError(String path, int line, int col, String error) |
| { |
| if (!isErrorEnabled) |
| { |
| return; |
| } |
| // C: no source... must read from path... |
| String lineText = getLineText(path, line); |
| printError(path + "(" + line + "): " + COL + ": " + col + " " + ERROR + ": " + error + lineSeparator + lineSeparator + |
| lineText + lineSeparator + getLinePointer(col, lineText)); |
| } |
| |
| public void logWarning(String path, int line, int col, String warning, String source) |
| { |
| if (!isWarningEnabled) |
| { |
| return; |
| } |
| printWarning(path + "(" + line + "): " + COL + ": " + col + " " + WARNING + ": " + warning + lineSeparator + lineSeparator + |
| source + lineSeparator + getLinePointer(col, source)); |
| } |
| |
| public void logWarning(String path, int line, int col, String warning, String source, int errorCode) |
| { |
| logWarning(path, line, col, warning, source); |
| } |
| |
| public void logError(String path, int line, int col, String error, String source) |
| { |
| if (!isErrorEnabled) |
| { |
| return; |
| } |
| printError(path + "(" + line + "): " + COL + ": " + col + " " + ERROR + ": " + error + lineSeparator + lineSeparator + |
| source + lineSeparator + getLinePointer(col, source)); |
| } |
| |
| public void logError(String path, int line, int col, String error, String source, int errorCode) |
| { |
| logError(path, line, col, error, source); |
| } |
| |
| public void needsCompilation(String path, String reason) |
| { |
| printOut(RECOMPILE + ": " + path, false); |
| printOut(REASON + ": " + reason, false); |
| } |
| |
| public void includedFileUpdated(String path) |
| { |
| printOut(INCLUDEUPDATED + ": " + path, false); |
| } |
| |
| public void includedFileAffected(String path) |
| { |
| printOut(INCLUDEAFFECTED + ": " + path, false); |
| } |
| |
| private void printOut(String message) |
| { |
| printOut(message, true); |
| } |
| |
| private void printOut(String message, boolean extraLineBreak) |
| { |
| System.out.println(message + (extraLineBreak ? lineSeparator : "")); |
| } |
| |
| private void printWarning(String message) |
| { |
| warningCount++; |
| System.err.println(message + lineSeparator); |
| if (message == null) |
| { |
| Thread.dumpStack(); |
| } |
| } |
| |
| private void printError(String message) |
| { |
| errorCount++; |
| System.err.println(message + lineSeparator); |
| if (message == null) |
| { |
| Thread.dumpStack(); |
| } |
| } |
| |
| private String getLineText(String path, int line) |
| { |
| String text = FileUtil.readLine(path, line); |
| return text == null ? "" : text; |
| } |
| |
| private String getLinePointer(int col, String source) |
| { |
| if (col <= 0) // col == 0 is likely an error... |
| { |
| return "^"; |
| } |
| |
| StringBuilder b = new StringBuilder(col); |
| for (int i = 0; i < col - 1; i++) |
| { |
| if (source != null && i < source.length() && source.charAt(i) == '\t') |
| { |
| b.append('\t'); |
| } |
| else |
| { |
| b.append(' '); |
| } |
| } |
| |
| b.append('^'); |
| |
| return b.toString(); |
| } |
| } |