1 package org.apache.maven.shared.jar.classes;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.commons.collections.list.SetUniqueList;
23
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.List;
27
28 /**
29 * Gathered facts about the classes within a JAR file.
30 *
31 * @see org.apache.maven.shared.jar.classes.JarClassesAnalysis#analyze(org.apache.maven.shared.jar.JarAnalyzer)
32 */
33 public class JarClasses
34 {
35 /**
36 * The list of imports in the classes in the JAR.
37 */
38 private List imports;
39
40 /**
41 * A list of packages represented by classes in the JAR.
42 */
43 private List packages;
44
45 /**
46 * A list of the classes that in the JAR.
47 */
48 private List classNames;
49
50 /**
51 * A list of methods within the classes in the JAR.
52 */
53 private List methods;
54
55 /**
56 * Whether the JAR contains any code with debug information. If there is a mix of debug and release code, this will
57 * still be true.
58 */
59 private boolean isDebugPresent;
60
61 /**
62 * The highest JVM revision available in any class files. While the JAR may work on earlier JVMs if particular
63 * classes are not used, this is the minimum JVM that guarantees compatibility.
64 */
65 private String jdkRevision;
66
67 /**
68 * Constructor to create an empty instance.
69 */
70 public JarClasses()
71 {
72 // Unique list decorators are used to ensure natural ordering is retained, the list interface is availble, and
73 // that duplicates are not entered.
74 imports = SetUniqueList.decorate( new ArrayList() );
75 packages = SetUniqueList.decorate( new ArrayList() );
76 classNames = SetUniqueList.decorate( new ArrayList() );
77 methods = SetUniqueList.decorate( new ArrayList() );
78 }
79
80 /**
81 * Add a discovered class to the record.
82 *
83 * @param name the name of the class
84 */
85 public void addClassName( String name )
86 {
87 this.classNames.add( name );
88 }
89
90 /**
91 * Add a discovered package to the record.
92 *
93 * @param name the name of the package
94 */
95 public void addPackage( String name )
96 {
97 this.packages.add( name );
98 }
99
100 /**
101 * Add a discovered method to the record.
102 *
103 * @param name the name of the method
104 */
105 public void addMethod( String name )
106 {
107 this.methods.add( name );
108 }
109
110 /**
111 * Add a list of discovered imports to the record.
112 *
113 * @param imports the imports to add. Each item should be a String to avoid down the line ClassCastExceptions.
114 */
115 public void addImports( List imports )
116 {
117 this.imports.addAll( imports );
118 }
119
120 public List getImports()
121 {
122 return Collections.unmodifiableList( imports );
123 }
124
125 public List getClassNames()
126 {
127 return Collections.unmodifiableList( classNames );
128 }
129
130 public List getPackages()
131 {
132 return Collections.unmodifiableList( packages );
133 }
134
135 public boolean isDebugPresent()
136 {
137 return isDebugPresent;
138 }
139
140 public void setDebugPresent( boolean hasDebugSymbols )
141 {
142 this.isDebugPresent = hasDebugSymbols;
143 }
144
145 public String getJdkRevision()
146 {
147 return jdkRevision;
148 }
149
150 public void setJdkRevision( String jdkRevision )
151 {
152 this.jdkRevision = jdkRevision;
153 }
154
155 public List getMethods()
156 {
157 return Collections.unmodifiableList( methods );
158 }
159 }