1 /*
  2  * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  */
 23 package jdk.test.lib.cds;
 24 
 25 import java.util.ArrayList;
 26 
 27 // This class represents options used
 28 // during creation of CDS archive and/or running JVM with a CDS archive
 29 public class CDSOptions {
 30     public String xShareMode = "on";
 31     public String archiveName;
 32     public ArrayList<String> prefix = new ArrayList<String>();
 33     public ArrayList<String> suffix = new ArrayList<String>();
 34     public boolean useSystemArchive = false;
 35     public boolean benchmarkMode = false;
 36     public String appJar;
 37     public String appJarDir;
 38 
 39     // classes to be archived
 40     public String[] classList;
 41 
 42     // Indicate whether to append "-version" when using CDS Archive.
 43     // Most of tests will use '-version'
 44     public boolean useVersion = true;
 45 
 46 
 47     public CDSOptions() {
 48     }
 49 
 50 
 51     public CDSOptions addPrefix(String... prefix) {
 52         for (String s : prefix) this.prefix.add(s);
 53         return this;
 54     }
 55 
 56     public CDSOptions addPrefix(String prefix[], String... extra) {
 57         for (String s : prefix) this.prefix.add(s);
 58         for (String s : extra) this.prefix.add(s);
 59         return this;
 60     }
 61 
 62     public CDSOptions addSuffix(ArrayList<String> suffix) {
 63         for (String s : suffix) this.suffix.add(s);
 64         return this;
 65     }
 66 
 67     public CDSOptions addSuffix(String... suffix) {
 68         for (String s : suffix) this.suffix.add(s);
 69         return this;
 70     }
 71 
 72     public CDSOptions addSuffix(String suffix[], String... extra) {
 73         for (String s : suffix) this.suffix.add(s);
 74         for (String s : extra) this.suffix.add(s);
 75         return this;
 76     }
 77 
 78     public CDSOptions setXShareMode(String mode) {
 79         this.xShareMode = mode;
 80         return this;
 81     }
 82 
 83 
 84     public CDSOptions setArchiveName(String name) {
 85         this.archiveName = name;
 86         return this;
 87     }
 88 
 89 
 90     public CDSOptions setUseVersion(boolean use) {
 91         this.useVersion = use;
 92         return this;
 93     }
 94 
 95     public CDSOptions setUseSystemArchive(boolean use) {
 96         this.useSystemArchive = use;
 97         return this;
 98     }
 99 
100     public CDSOptions setBenchmarkMode(boolean mode) {
101         this.benchmarkMode = mode;
102         return this;
103     }
104 
105     public CDSOptions setClassList(String[] list) {
106         this.classList = list;
107         return this;
108     }
109     public CDSOptions setClassList(ArrayList<String> list) {
110         String array[] = new String[list.size()];
111         list.toArray(array);
112         this.classList = array;
113         return this;
114     }
115 
116     // AppCDS methods
117     public CDSOptions setAppJar(String appJar) {
118         this.appJar = appJar;
119         return this;
120     }
121 
122     public CDSOptions setAppJarDir(String appJarDir) {
123         this.appJarDir = appJarDir;
124         return this;
125     }
126 
127     static ArrayList<String> disabledRuntimePrefixes = new ArrayList<>();
128 
129     // Do not use the command-line option s, even if it's specified in -Dtest.cds.runtime.options
130     private static void disableRuntimePrefix(String s) {
131         disabledRuntimePrefixes.add(s);
132     }
133 
134     // Do not use the command-line option "-XX:+UseEpsilonGC", even if it's specified in -Dtest.cds.runtime.options
135     public static void disableRuntimePrefixForEpsilonGC() {
136         disableRuntimePrefix("-XX:+UseEpsilonGC");
137     }
138 }