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 String appJar;
 36     public String appJarDir;
 37 
 38     // classes to be archived
 39     public String[] classList;
 40 
 41     // Indicate whether to append "-version" when using CDS Archive.
 42     // Most of tests will use '-version'
 43     public boolean useVersion = true;
 44 
 45 
 46     public CDSOptions() {
 47     }
 48 
 49 
 50     public CDSOptions addPrefix(String... prefix) {
 51         for (String s : prefix) this.prefix.add(s);
 52         return this;
 53     }
 54 
 55     public CDSOptions addPrefix(String prefix[], String... extra) {
 56         for (String s : prefix) this.prefix.add(s);
 57         for (String s : extra) this.prefix.add(s);
 58         return this;
 59     }
 60 
 61     public CDSOptions addSuffix(ArrayList<String> suffix) {
 62         for (String s : suffix) this.suffix.add(s);
 63         return this;
 64     }
 65 
 66     public CDSOptions addSuffix(String... suffix) {
 67         for (String s : suffix) this.suffix.add(s);
 68         return this;
 69     }
 70 
 71     public CDSOptions addSuffix(String suffix[], String... extra) {
 72         for (String s : suffix) this.suffix.add(s);
 73         for (String s : extra) this.suffix.add(s);
 74         return this;
 75     }
 76 
 77     public CDSOptions setXShareMode(String mode) {
 78         this.xShareMode = mode;
 79         return this;
 80     }
 81 
 82 
 83     public CDSOptions setArchiveName(String name) {
 84         this.archiveName = name;
 85         return this;
 86     }
 87 
 88 
 89     public CDSOptions setUseVersion(boolean use) {
 90         this.useVersion = use;
 91         return this;
 92     }
 93 
 94     public CDSOptions setUseSystemArchive(boolean use) {
 95         this.useSystemArchive = use;
 96         return this;
 97     }
 98 
 99     public CDSOptions setClassList(String[] list) {
100         this.classList = list;
101         return this;
102     }
103     public CDSOptions setClassList(ArrayList<String> list) {
104         String array[] = new String[list.size()];
105         list.toArray(array);
106         this.classList = array;
107         return this;
108     }
109 
110     // AppCDS methods
111     public CDSOptions setAppJar(String appJar) {
112         this.appJar = appJar;
113         return this;
114     }
115 
116     public CDSOptions setAppJarDir(String appJarDir) {
117         this.appJarDir = appJarDir;
118         return this;
119     }
120 
121     static ArrayList<String> disabledRuntimePrefixes = new ArrayList<>();
122 
123     // Do not use the command-line option s, even if it's specified in -Dtest.cds.runtime.options
124     private static void disableRuntimePrefix(String s) {
125         disabledRuntimePrefixes.add(s);
126     }
127 
128     // Do not use the command-line option "-XX:+UseEpsilonGC", even if it's specified in -Dtest.cds.runtime.options
129     public static void disableRuntimePrefixForEpsilonGC() {
130         disableRuntimePrefix("-XX:+UseEpsilonGC");
131     }
132 }