CodeWriter add(CodeWriter code) { line--; for (Map.Entry<CodePosition, Object> entry : code.annotations.entrySet()) { CodePosition pos = entry.getKey(); attachAnnotation(entry.getValue(), new CodePosition(line + pos.getLine(), pos.getOffset())); } for (Map.Entry<Integer, Integer> entry : code.lineMap.entrySet()) { attachSourceLine(line + entry.getKey(), entry.getValue()); } line += code.line; offset = code.offset; buf.append(code.buf); return this; }
public void finish() { removeFirstEmptyLine(); buf.trimToSize(); code = buf.toString(); buf = null; Iterator<Map.Entry<CodePosition, Object>> it = annotations.entrySet().iterator(); while (it.hasNext()) { Map.Entry<CodePosition, Object> entry = it.next(); Object v = entry.getValue(); if (v instanceof DefinitionWrapper) { LineAttrNode l = ((DefinitionWrapper) v).getNode(); l.setDecompiledLine(entry.getKey().getLine()); it.remove(); } } }
private void addUsage(JNode jNode, JavaClass javaClass, CodeLinesInfo linesInfo, CodePosition codePosition, List<StringRef> lines) { UsageInfo usageInfo = usageMap.computeIfAbsent(jNode, key -> new UsageInfo()); int line = codePosition.getLine(); JavaNode javaNodeByLine = linesInfo.getJavaNodeByLine(line); StringRef codeLine = lines.get(line - 1); JNode node = nodeCache.makeFrom(javaNodeByLine == null ? javaClass : javaNodeByLine); CodeNode codeNode = new CodeNode(node, line, codeLine); usageInfo.addUsage(codeNode); }
/** * Search node by offset in {@code jCls} code and return its definition position * (useful for jumps from usage) */ public JumpPosition getDefPosForNodeAtOffset(JClass jCls, int offset) { JavaNode foundNode = getJavaNodeAtOffset(jCls, offset); if (foundNode == null) { return null; } CodePosition pos = jCls.getCls().getDefinitionPosition(foundNode); if (pos == null) { return null; } JNode jNode = contentPanel.getTabbedPane().getMainWindow().getCacheObject().getNodeCache().makeFrom(foundNode); return new JumpPosition(jNode.getRootClass(), pos.getLine()); }
public Position(CodePosition pos) { this.node = new JClass(pos.getJavaClass()); this.line = pos.getLine(); }