Remove Twitter links.
[SquirrelJME.git] / modules / tool-classfile / src / main / java / net / multiphasicapps / classfile / ClassNames.java
blob4b8accb68e9c1daf649cbad01457c0e487e96eac
1 // -*- Mode: Java; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
3 // SquirrelJME
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // ---------------------------------------------------------------------------
10 package net.multiphasicapps.classfile;
12 import java.lang.ref.Reference;
13 import java.lang.ref.WeakReference;
14 import java.util.AbstractList;
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.RandomAccess;
19 /**
20 * Represents multiple class names.
22 * @since 2019/04/14
24 public final class ClassNames
25 extends AbstractList<ClassName>
26 implements Contexual, RandomAccess
28 /** Names. */
29 private final ClassName[] _names;
31 /** Hash code. */
32 private int _hash;
34 /** String. */
35 private Reference<String> _string;
37 /**
38 * Initializes the class names.
40 * @param __n The names.
41 * @throws NullPointerException On null arguments.
42 * @since 2019/04/14
44 public ClassNames(ClassName... __n)
45 throws NullPointerException
47 for (ClassName n : (__n =
48 (__n == null ? new ClassName[0] : __n.clone())))
49 if (n == null)
50 throw new NullPointerException("NARG");
52 this._names = __n;
55 /**
56 * Initializes the class names from the iterable.
58 * @param __n The names.
59 * @throws NullPointerException On null arguments.
60 * @since 2021/01/13
62 public ClassNames(Iterable<ClassName> __n)
63 throws NullPointerException
65 if (__n == null)
66 throw new NullPointerException("NARG");
68 List<ClassName> names = new ArrayList<>();
69 for (ClassName name : __n)
70 if (name == null)
71 throw new NullPointerException("NARG");
72 else
73 names.add(name);
75 this._names = names.<ClassName>toArray(new ClassName[names.size()]);
78 /**
79 * {@inheritDoc}
80 * @since 2019/04/14
82 @Override
83 public final int hashCode()
85 int rv = this._hash;
86 if (rv == 0)
87 this._hash = (rv = super.hashCode());
88 return rv;
91 /**
92 * {@inheritDoc}
93 * @since 2019/04/14
95 @Override
96 public final ClassName get(int __i)
98 return this._names[__i];
102 * {@inheritDoc}
103 * @since 2019/04/14
105 @Override
106 public final int size()
108 return this._names.length;
112 * {@inheritDoc}
113 * @since 2019/04/14
115 @Override
116 public ClassName[] toArray()
118 return this._names.clone();
122 * {@inheritDoc}
123 * @since 2019/04/14
125 @Override
126 public final String toString()
128 Reference<String> ref = this._string;
129 String rv;
131 if (ref == null || null == (rv = ref.get()))
132 this._string = new WeakReference<>((rv = super.toString()));
134 return rv;