/* * Copyright 2000-2009 JetBrains s.r.o. * * 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. */ package com.intellij.rt.compiler; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * MUST BE COMPILED WITH JDK 1.1 IN ORDER TO SUPPORT JAVAC LAUNCHING FOR ALL JDKs * @author Eugene Zhuravlev * Date: Oct 10, 2005 */ public class JavacResourcesReader { public static final String MSG_PATTERNS_START = "__patterns_start"; public static final String MSG_PATTERNS_END = "__patterns_end"; public static final String MSG_PARSING_STARTED = "MSG_PARSING_STARTED"; public static final String MSG_PARSING_COMPLETED = "MSG_PARSING_COMPLETED"; public static final String MSG_LOADING = "MSG_LOADING"; public static final String MSG_CHECKING = "MSG_CHECKING"; public static final String MSG_WROTE = "MSG_WROTE"; public static final String MSG_WARNING = "MSG_WARNING"; public static final String MSG_NOTE = "MSG_NOTE"; public static final String MSG_STATISTICS = "MSG_STATISTICS"; public static final String MSG_IGNORED = "MSG_IGNORED"; private static final String[] BUNDLE_NAMES = new String[] { "com.sun.tools.javac.resources.compiler", // v1.5 "com.sun.tools.javac.v8.resources.compiler", // v1.3-1.4 "sun.tools.javac.resources.javac" // v1.1-1.2 }; private static final BundleKey[] MSG_NAME_KEY_PAIRS = new BundleKey[] { new BundleKey(MSG_PARSING_STARTED, "compiler.misc.verbose.parsing.started"), new BundleKey(MSG_PARSING_COMPLETED, "compiler.misc.verbose.parsing.done"), new BundleKey(MSG_PARSING_COMPLETED, "benv.parsed_in"), // jdk 1.1-1.2 new BundleKey(MSG_LOADING, "compiler.misc.verbose.loading"), new BundleKey(MSG_LOADING, "benv.loaded_in"), // jdk 1.1-1.2 new BundleKey(MSG_CHECKING, "compiler.misc.verbose.checking.attribution"), new BundleKey(MSG_WROTE,"compiler.misc.verbose.wrote.file"), new BundleKey(MSG_WROTE,"main.wrote"), // jdk 1.1-1.2 new BundleKey(MSG_WARNING,"compiler.warn.warning"), new BundleKey(MSG_NOTE,new String[] {"compiler.note.note", "compiler.note.deprecated.filename"}), // jdk 1.5 new BundleKey(MSG_NOTE,new String[] {"compiler.note.note", "compiler.note.deprecated.plural"}), // jdk 1.5 new BundleKey(MSG_NOTE,new String[] {"compiler.note.note", "compiler.note.deprecated.recompile"}), // jdk 1.5 new BundleKey(MSG_NOTE,new String[] {"compiler.note.note", "compiler.note.unchecked.filename"}), // jdk 1.5 new BundleKey(MSG_NOTE,new String[] {"compiler.note.note", "compiler.note.unchecked.plural"}), // jdk 1.5 new BundleKey(MSG_NOTE,new String[] {"compiler.note.note", "compiler.note.unchecked.recompile"}), // jdk 1.5 new BundleKey(MSG_STATISTICS,"compiler.misc.count.error"), new BundleKey(MSG_STATISTICS,"compiler.misc.count.error.plural"), new BundleKey(MSG_STATISTICS,"compiler.misc.count.warn"), new BundleKey(MSG_STATISTICS,"compiler.misc.count.warn.plural"), new BundleKey(MSG_STATISTICS,"main.errors"), //jdk 1.1 - 1.2 new BundleKey(MSG_STATISTICS,"main.warnings"), //jdk 1.1 - 1.2 new BundleKey(MSG_STATISTICS,"main.1error"), //jdk 1.1 - 1.2 new BundleKey(MSG_STATISTICS,"main.1warning"), //jdk 1.1 - 1.2 new IgnoredWarningBundleKey("compiler.warn.dir.path.element.not.found"), //jdk 1.5 new IgnoredWarningBundleKey("compiler.warn.path.element.not.found"), //jdk 1.5 }; public static final String CATEGORY_VALUE_DIVIDER = "="; public static void main(String[] args) { dumpPatterns(); } // for debug purposes /* public static void printPatterns() { final ResourceBundle messagesBundle = getMessagesBundle(); if (messagesBundle == null) { System.out.println("No bundles found"); return; } final Enumeration keys = messagesBundle.getKeys(); while (keys.hasMoreElements()) { final Object key = keys.nextElement(); System.out.println(key + "->" + messagesBundle.getObject((String)key)); } } */ public static boolean dumpPatterns() { final ResourceBundle messagesBundle = getMessagesBundle(); if (messagesBundle == null) { return false; } System.err.println(MSG_PATTERNS_START); for (int idx = 0; idx < MSG_NAME_KEY_PAIRS.length; idx++) { BundleKey bundleKey = MSG_NAME_KEY_PAIRS[idx]; try { System.err.println(bundleKey.category + CATEGORY_VALUE_DIVIDER + bundleKey.getCategoryValue(messagesBundle)); } catch (MissingResourceException ignored) { } } System.err.println(MSG_PATTERNS_END); return true; } private static ResourceBundle getMessagesBundle() { for (int i = 0; i < BUNDLE_NAMES.length; i++) { try { return ResourceBundle.getBundle(BUNDLE_NAMES[i]); } catch (MissingResourceException ignored) { continue; } } return null; } private static class BundleKey { public final String category; public final String[] keys; public BundleKey(final String category, final String key) { this(category, new String[] {key}); } public BundleKey(final String category, final String[] composite) { this.category = category; this.keys = composite; } public String getCategoryValue(ResourceBundle messagesBundle) { if (keys.length == 1) { return messagesBundle.getString(keys[0]); } final StringBuffer buf = new StringBuffer(); for (int idx = 0; idx < keys.length; idx++) { buf.append(messagesBundle.getString(keys[idx])); } return buf.toString(); } } private static class IgnoredWarningBundleKey extends BundleKey { public IgnoredWarningBundleKey(final String messageKey) { super(JavacResourcesReader.MSG_IGNORED, new String[]{"compiler.warn.warning", messageKey}); } public String getCategoryValue(ResourceBundle messagesBundle) { return messagesBundle.getString(keys[0]) + MessageFormat.format(messagesBundle.getString(keys[1]), new Object[] {""}); } } }