hotspot/test/testlibrary/ctw/src/sun/hotspot/tools/ctw/Utils.java
author hseigel
Fri, 27 Feb 2015 12:48:06 -0500
changeset 29319 54c7d4e5261f
parent 20293 1dd93ae4304d
child 40033 dbd5f9838049
permissions -rw-r--r--
8073908: Replace hotspot/testlibrary use of sun.management with public API Summary: use java.lang API's instead of sun.management API's. Reviewed-by: sla, iignatyev, gtriantafill, mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19767
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     1
/*
29319
54c7d4e5261f 8073908: Replace hotspot/testlibrary use of sun.management with public API
hseigel
parents: 20293
diff changeset
     2
 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
19767
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     4
 *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     8
 *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    13
 * accompanied this code).
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    14
 *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    18
 *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    21
 * questions.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    22
 */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    23
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    24
package sun.hotspot.tools.ctw;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    25
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    26
import com.sun.management.HotSpotDiagnosticMXBean;
29319
54c7d4e5261f 8073908: Replace hotspot/testlibrary use of sun.management with public API
hseigel
parents: 20293
diff changeset
    27
import java.lang.management.ManagementFactory;
19767
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    28
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    29
import java.io.File;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    30
import java.util.regex.Pattern;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    31
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    32
/**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    33
 * Auxiliary methods.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    34
 */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    35
public class Utils {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    36
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    37
     * Value of {@code -XX:CompileThreshold}
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    38
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    39
    public static final boolean TIERED_COMPILATION
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    40
            = Boolean.parseBoolean(getVMOption("TieredCompilation", "false"));
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    41
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    42
     * Value of {@code -XX:BackgroundCompilation}
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    43
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    44
    public static final boolean BACKGROUND_COMPILATION
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    45
            = Boolean.parseBoolean(getVMOption("BackgroundCompilation",
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    46
            "false"));
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    47
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    48
     * Value of {@code -XX:TieredStopAtLevel}
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    49
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    50
    public static final int TIERED_STOP_AT_LEVEL;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    51
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    52
     * Value of {@code -XX:CICompilerCount}
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    53
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    54
    public static final Integer CI_COMPILER_COUNT
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    55
            = Integer.valueOf(getVMOption("CICompilerCount", "1"));
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    56
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    57
     * Initial compilation level.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    58
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    59
    public static final int INITIAL_COMP_LEVEL;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    60
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    61
     * Compiled path-separator regexp.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    62
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    63
    public static final Pattern PATH_SEPARATOR = Pattern.compile(
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    64
            File.pathSeparator, Pattern.LITERAL);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    65
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    66
     * Value of {@code -DDeoptimizeAllClassesRate}. Frequency of
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    67
     * {@code WB.deoptimizeAll()} invocation If it less that {@code 0},
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    68
     * {@code WB.deoptimizeAll()} will not be invoked.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    69
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    70
    public static final int DEOPTIMIZE_ALL_CLASSES_RATE
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    71
            = Integer.getInteger("DeoptimizeAllClassesRate", -1);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    72
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    73
     * Value of {@code -DCompileTheWorldStopAt}. Last class to consider.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    74
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    75
    public static final long COMPILE_THE_WORLD_STOP_AT
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    76
            = Long.getLong("CompileTheWorldStopAt", Long.MAX_VALUE);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    77
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    78
     * Value of {@code -DCompileTheWorldStartAt}. First class to consider.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    79
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    80
    public static final long COMPILE_THE_WORLD_START_AT
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    81
            = Long.getLong("CompileTheWorldStartAt", 1);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    82
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    83
     * Value of {@code -DCompileTheWorldPreloadClasses}. Preload all classes
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    84
     * used by a class before start loading.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    85
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    86
    public static final boolean COMPILE_THE_WORLD_PRELOAD_CLASSES;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    87
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    88
     * Value of {@code -Dsun.hotspot.tools.ctw.verbose}. Verbose output,
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    89
     * adds additional information about compilation.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    90
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    91
    public static final boolean IS_VERBOSE
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    92
            = Boolean.getBoolean("sun.hotspot.tools.ctw.verbose");
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    93
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    94
     * Value of {@code -Dsun.hotspot.tools.ctw.logfile}.Path to logfile, if
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    95
     * it's null, cout will be used.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    96
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    97
    public static final String LOG_FILE
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    98
            = System.getProperty("sun.hotspot.tools.ctw.logfile");
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
    99
    static {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   100
        if (Utils.TIERED_COMPILATION) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   101
            INITIAL_COMP_LEVEL = 1;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   102
        } else {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   103
            String vmName = System.getProperty("java.vm.name");
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   104
            if (Utils.endsWithIgnoreCase(vmName, " Server VM")) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   105
                INITIAL_COMP_LEVEL = 4;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   106
            } else if (Utils.endsWithIgnoreCase(vmName, " Client VM")
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   107
                    || Utils.endsWithIgnoreCase(vmName, " Minimal VM")) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   108
                INITIAL_COMP_LEVEL = 1;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   109
            } else {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   110
                throw new RuntimeException("Unknown VM: " + vmName);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   111
            }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   112
        }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   113
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   114
        TIERED_STOP_AT_LEVEL = Integer.parseInt(getVMOption("TieredStopAtLevel",
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   115
                String.valueOf(INITIAL_COMP_LEVEL)));
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   116
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   117
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   118
    static {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   119
        String tmp = System.getProperty("CompileTheWorldPreloadClasses");
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   120
        if (tmp == null) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   121
            COMPILE_THE_WORLD_PRELOAD_CLASSES = true;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   122
        } else {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   123
            COMPILE_THE_WORLD_PRELOAD_CLASSES = Boolean.parseBoolean(tmp);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   124
        }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   125
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   126
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   127
    public static final String CLASSFILE_EXT = ".class";
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   128
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   129
    private Utils() {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   130
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   131
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   132
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   133
     * Tests if the string ends with the suffix, ignoring case
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   134
     * considerations
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   135
     *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   136
     * @param string the tested string
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   137
     * @param suffix the suffix
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   138
     * @return {@code true} if {@code string} ends with the {@code suffix}
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   139
     * @see String#endsWith(String)
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   140
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   141
    public static boolean endsWithIgnoreCase(String string, String suffix) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   142
        if (string == null || suffix == null) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   143
            return false;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   144
        }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   145
        int length = suffix.length();
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   146
        int toffset = string.length() - length;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   147
        if (toffset < 0) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   148
            return false;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   149
        }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   150
        return string.regionMatches(true, toffset, suffix, 0, length);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   151
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   152
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   153
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   154
     * Returns value of VM option.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   155
     *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   156
     * @param name option's name
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   157
     * @return value of option or {@code null}, if option doesn't exist
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   158
     * @throws NullPointerException if name is null
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   159
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   160
    public static String getVMOption(String name) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   161
        String result;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   162
        HotSpotDiagnosticMXBean diagnostic
29319
54c7d4e5261f 8073908: Replace hotspot/testlibrary use of sun.management with public API
hseigel
parents: 20293
diff changeset
   163
                = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
19767
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   164
        result = diagnostic.getVMOption(name).getValue();
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   165
        return result;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   166
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   167
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   168
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   169
     * Returns value of VM option or default value.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   170
     *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   171
     * @param name         option's name
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   172
     * @param defaultValue default value
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   173
     * @return value of option or {@code defaultValue}, if option doesn't exist
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   174
     * @throws NullPointerException if name is null
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   175
     * @see #getVMOption(String)
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   176
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   177
    public static String getVMOption(String name, String defaultValue) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   178
        String result;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   179
        try {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   180
            result = getVMOption(name);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   181
        } catch (NoClassDefFoundError e) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   182
            // compact1, compact2 support
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   183
            result = defaultValue;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   184
        }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   185
        return result == null ? defaultValue : result;
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   186
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   187
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   188
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   189
     * Tests if the filename is valid filename for class file.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   190
     *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   191
     * @param filename tested filename
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   192
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   193
    public static boolean isClassFile(String filename) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   194
        // If the filename has a period after removing '.class', it's not valid class file
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   195
        return endsWithIgnoreCase(filename, CLASSFILE_EXT)
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   196
                && (filename.indexOf('.')
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   197
                == (filename.length() - CLASSFILE_EXT.length()));
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   198
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   199
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   200
    /**
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   201
     * Converts the filename to classname.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   202
     *
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   203
     * @param filename filename to convert
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   204
     * @return corresponding classname.
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   205
     * @throws AssertionError if filename isn't valid filename for class file -
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   206
     *                        {@link #isClassFile(String)}
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   207
     */
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   208
    public static String fileNameToClassName(String filename) {
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   209
        assert isClassFile(filename);
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   210
        return filename.substring(0, filename.length() - CLASSFILE_EXT.length())
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   211
                       .replace(File.separatorChar, '.');
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   212
    }
13d8c1ce7ac7 8012447: Java CTW implementation
iignatyev
parents:
diff changeset
   213
}