View Javadoc

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 }