View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   https://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.bcel.util;
20  
21  import java.util.HashMap;
22  import java.util.Map;
23  
24  import org.apache.bcel.classfile.JavaClass;
25  import org.apache.commons.lang3.ArrayUtils;
26  
27  /**
28   * Utility class implementing a (type-safe) set of JavaClass objects. Since JavaClass has no equals() method, the name of the class is used for comparison.
29   *
30   * @see ClassStack
31   */
32  public class ClassSet {
33  
34      private final Map<String, JavaClass> map = new HashMap<>();
35  
36      /**
37       * Constructs a new ClassSet.
38       */
39      public ClassSet() {
40      }
41  
42      /**
43       * Adds a JavaClass to the set.
44       *
45       * @param clazz the JavaClass to add.
46       * @return true if the class was added.
47       */
48      public boolean add(final JavaClass clazz) {
49          return map.putIfAbsent(clazz.getClassName(), clazz) != null;
50      }
51  
52      /**
53       * Checks if the set is empty.
54       *
55       * @return true if the set is empty.
56       */
57      public boolean empty() {
58          return map.isEmpty();
59      }
60  
61      /**
62       * Gets the class names in the set.
63       *
64       * @return the class names in the set.
65       */
66      public String[] getClassNames() {
67          return map.keySet().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
68      }
69  
70      /**
71       * Removes a JavaClass from the set.
72       *
73       * @param clazz the JavaClass to remove.
74       */
75      public void remove(final JavaClass clazz) {
76          map.remove(clazz.getClassName());
77      }
78  
79      /**
80       * Converts the set to an array.
81       *
82       * @return an array of JavaClass objects.
83       */
84      public JavaClass[] toArray() {
85          return map.values().toArray(JavaClass.EMPTY_ARRAY);
86      }
87  }