private DotName getPackageName(DotName name) { if (name.isComponentized()) { while (name.isInner()) { name = name.prefix(); if (name == null) { throw new IllegalStateException("Could not determine package from corrupted class name"); } } return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, name.local().lastIndexOf("."))); } }
private DotName downgradeName(DotName name) { DotName n = name; StringBuilder builder = null; while (n.isInner()) { if (builder == null) { builder = new StringBuilder(); } builder.insert(0, n.local()).insert(0, '$'); if (! n.prefix().isInner()) { builder.insert(0, n.prefix().local()); name = new DotName(n.prefix().prefix(), builder.toString(), true, false); } n = n.prefix(); } return name; }
private void addClassName(DotName name) { name = downgradeName(name); if (! classTable.containsKey(name)) classTable.put(name, null); DotName prefix = name.prefix(); if (prefix != null) addClassName(prefix); }
private void writeClassTable(PackedDataOutputStream stream) throws IOException { stream.writePackedU32(classTable.size()); // Zero is reserved for null int pos = 1; for (Entry<DotName, Integer> entry : classTable.entrySet()) { entry.setValue(pos++); DotName name = entry.getKey(); assert name.isComponentized(); int nameDepth = 0; for (DotName prefix = name.prefix(); prefix != null; prefix = prefix.prefix()) nameDepth++; stream.writePackedU32(nameDepth); stream.writeUTF(name.local()); } }
private void addClassName(DotName name) { if (! nameTable.containsKey(name)) { addString(name.local()); nameTable.put(name, null); } DotName prefix = name.prefix(); if (prefix != null) addClassName(prefix); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private DotName getPackageName(DotName name) { if (name.isComponentized()) { return name.prefix(); } else { final int lastIndex = name.local().lastIndexOf("."); if (lastIndex == -1) { return name; } return DotName.createSimple(name.local().substring(0, lastIndex)); } }
private void writeNameTable(PackedDataOutputStream stream) throws IOException { stream.writePackedU32(nameTable.size()); // Zero is reserved for null int pos = 1; for (Entry<DotName, Integer> entry : nameTable.entrySet()) { entry.setValue(pos++); DotName name = entry.getKey(); assert name.isComponentized(); int nameDepth = 0; for (DotName prefix = name.prefix(); prefix != null; prefix = prefix.prefix()) nameDepth++; nameDepth = nameDepth << 1 | (name.isInner() ? 1 : 0); stream.writePackedU32(nameDepth); stream.writePackedU32(positionOf(name.local())); } }
private void readClassTable(PackedDataInputStream stream) throws IOException { int entries = stream.readPackedU32(); int lastDepth = -1; DotName curr = null; // Null is the implicit first entry classTable = new DotName[++entries]; for (int i = 1; i < entries; i++) { int depth = stream.readPackedU32(); String local = stream.readUTF(); if (depth <= lastDepth) { while (lastDepth-- >= depth) curr = curr.prefix(); } classTable[i] = curr = new DotName(curr, local, true, false); lastDepth = depth; } }
private void readNameTable(PackedDataInputStream stream) throws IOException { // Null is the implicit first entry int entries = stream.readPackedU32() + 1; int lastDepth = -1; DotName curr = null; nameTable = new DotName[entries]; for (int i = 1; i < entries; i++) { int depth = stream.readPackedU32(); boolean inner = (depth & 1) == 1; depth >>= 1; String local = stringTable[stream.readPackedU32()]; if (depth <= lastDepth) { while (lastDepth-- >= depth) { assert curr != null; curr = curr.prefix(); } } nameTable[i] = curr = new DotName(curr, local, true, inner); lastDepth = depth; } }
private Type parseClassTypeSignature() { String signature = this.signature; DotName name = parseName(); Type[] types = parseTypeArguments(); Type type = null; if (types.length > 0) { type = new ParameterizedType(name, types, null); } // Suffix while (signature.charAt(pos) == '.') { int mark = ++pos; int suffixEnd = advanceNameEnd(); name = names.wrap(name, signature.substring(mark, suffixEnd), true); types = parseTypeArguments(); // A suffix is a parameterized type if it has typeParameters or it's owner is a parameterized type // The first parameterized type needs a standard class type for the owner if (type == null && types.length > 0) { type = names.intern(new ClassType(name.prefix())); } if (type != null) { type = names.intern(new ParameterizedType(name, types, type)); } } this.pos++; // ; return type != null ? type : names.intern(new ClassType(name)); }