43 internal List<Jar> jars =
new List<Jar>();
44 private Dictionary<string, int> jarMap =
new Dictionary<string, int>();
45 internal int classesJar = -1;
46 internal int resourcesJar = -1;
47 internal bool nojarstubs;
48 internal FileInfo path;
49 internal FileInfo keyfile;
50 internal string keycontainer;
51 internal bool delaysign;
52 internal byte[] publicKey;
53 internal StrongNameKeyPair keyPair;
54 internal Version version;
55 internal string fileversion;
56 internal FileInfo iconfile;
57 internal FileInfo manifestFile;
58 internal bool targetIsModule;
59 internal string assembly;
60 internal string mainClass;
61 internal ApartmentState apartment;
62 internal PEFileKinds target;
63 internal bool guessFileKind;
64 internal string[] unresolvedReferences;
65 internal Dictionary<string, string> legacyStubReferences =
new Dictionary<string, string>();
66 internal Assembly[] references;
67 internal string[] peerReferences;
68 internal bool crossReferenceAllPeers =
true;
69 internal string[] classesToExclude;
70 internal FileInfo remapfile;
71 internal Dictionary<string, string> props;
72 internal bool noglobbing;
75 internal string debugFileName;
76 internal bool compressedResources;
77 internal string[] privatePackages;
78 internal string[] publicPackages;
79 internal string sourcepath;
80 internal Dictionary<string, string> externalResources;
81 internal string classLoader;
82 internal PortableExecutableKinds pekind = PortableExecutableKinds.ILOnly;
83 internal ImageFileMachine imageFileMachine = ImageFileMachine.I386;
84 internal ulong baseAddress;
85 internal uint fileAlignment;
86 internal bool highentropyva;
87 internal List<ImportClassLoader> sharedclassloader;
88 internal HashSet<string> suppressWarnings =
new HashSet<string>(StringComparer.OrdinalIgnoreCase);
89 internal HashSet<string> errorWarnings =
new HashSet<string>(StringComparer.OrdinalIgnoreCase);
90 internal bool warnaserror;
91 internal List<string> proxies =
new List<string>();
92 internal object[] assemblyAttributeAnnotations;
93 internal bool warningLevelHigh;
94 internal bool noParameterReflection;
95 internal bool bootstrap;
101 copy.jars = Copy(jars);
102 copy.jarMap =
new Dictionary<string, int>(jarMap);
105 copy.props =
new Dictionary<string, string>(props);
107 if (externalResources !=
null)
109 copy.externalResources =
new Dictionary<string, string>(externalResources);
111 copy.suppressWarnings =
new(suppressWarnings, StringComparer.OrdinalIgnoreCase);
112 copy.errorWarnings =
new(errorWarnings, StringComparer.OrdinalIgnoreCase);
116 private static List<Jar> Copy(List<Jar> jars)
118 List<Jar> newJars =
new List<Jar>();
119 foreach (
Jar jar
in jars)
121 newJars.Add(jar.Copy());
126 internal Jar GetJar(
string file)
128 if (jarMap.TryGetValue(file, out var existingJar))
129 return jars[existingJar];
131 jarMap.Add(file, jars.Count);
132 return CreateJar(Path.GetFileName(file));
135 Jar CreateJar(
string jarName)
140 foreach (var jar
in jars)
142 if (jar.Name == name)
144 name = Path.GetFileNameWithoutExtension(jarName) +
"-" + (++count) + Path.GetExtension(jarName);
149 var newJar =
new Jar(name);
154 internal Jar GetClassesJar()
156 if (classesJar == -1)
158 classesJar = jars.Count;
159 CreateJar(
"classes.jar");
162 return jars[classesJar];
165 internal bool IsClassesJar(
Jar jar)
167 return classesJar != -1 && jars[classesJar] == jar;
170 internal Jar GetResourcesJar()
172 if (resourcesJar == -1)
174 resourcesJar = jars.Count;
175 CreateJar(
"resources.jar");
178 return jars[resourcesJar];
181 internal bool IsResourcesJar(
Jar jar)
183 return resourcesJar != -1 && jars[resourcesJar] == jar;
186 internal bool IsExcludedClass(
string className)
188 if (classesToExclude !=
null)
189 for (
int i = 0; i < classesToExclude.Length; i++)
190 if (Regex.IsMatch(className, classesToExclude[i]))