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 int nextChar(IndexState state, DotName name) { if (state.offset == -1) { return -1; } if (!name.componentized) { if (state.offset > name.local.length() - 1) { state.offset = -1; return -1; } return name.local.charAt(state.offset++); } DotName p = name, n = name; while (n.prefix != state.currentPrefix) { p = n; n = n.prefix; } if (state.offset > n.local.length() - 1) { if (n == name) { state.offset = -1; return -1; } else { state.offset = 0; state.currentPrefix = n; return p.isInner() ? '$' : '.'; } } return n.local.charAt(state.offset++); }
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 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())); } }