@Override public void visit(GetFieldInstruction insn) { dependencies.add(insn.getField().getClassName()); } @Override public void visit(PutFieldInstruction insn) {
@Override public void visit(PutFieldInstruction insn) { dependencies.add(insn.getField().getClassName()); } @Override public void visit(InvokeInstruction insn) {
private String suggestForStaticField(FieldReference field) { StringBuilder sb = new StringBuilder(); suggestForClass(field.getClassName(), sb); sb.append('_'); sb.append(sanitize(field.getFieldName())); return sb.toString(); }
@Override public void visit(QualificationExpr expr) { super.visit(expr); dependencies.add(expr.getField().getClassName()); } }
default FieldReader resolve(FieldReference field) { return getAncestors(field.getClassName()) .map(cls -> cls.getField(field.getFieldName())) .filter(Objects::nonNull) .findFirst().orElse(null); }
public String forMemberField(FieldReference field) { return memberFieldNames.computeIfAbsent(field, k -> { Set<String> occupied = occupiedClassNames.computeIfAbsent(k.getClassName(), c -> new HashSet<>(Arrays.asList("parent"))); return pickUnoccupied("fld_" + sanitize(field.getFieldName()), occupied); }); }
@Override DependencyNode createFieldNode(FieldReference field, ValueType type) { DependencyNode node = createNode(type); if (shouldTag) { node.setTag(field.getClassName() + "#" + field.getFieldName()); } return node; }
public int getFieldOffset(FieldReference field) { ValueType type = ValueType.object(field.getClassName()); addClass(type); ClassBinaryData data = binaryDataMap.get(type); return data.fieldLayout.get(field.getFieldName()); }
@Override public void visit(PutFieldInstruction insn) { if (!characteristics.isStructure(insn.getField().getClassName())) { addGuard(insn, PutFieldInstruction::getInstance, PutFieldInstruction::setInstance); } }
@Override public void visit(GetFieldInstruction insn) { if (!characteristics.isStructure(insn.getField().getClassName())) { addGuard(insn, GetFieldInstruction::getInstance, GetFieldInstruction::setInstance); } }
@Override public String getStaticFieldAlias(FieldReference field) { return makeUnique(knownAliases, knowAliasesCounter, getClassAlias(field.getClassName()) + "_" + field.getFieldName()); }
private boolean checkField(TextLocation location, FieldReference field) { if (!checkClass(location, field.getClassName())) { return false; } if (!reachableFields.contains(field) || !dependencyInfo.getField(field).isMissing()) { return true; } diagnostics.error(new CallLocation(methodRef, location), "Field {{f0}} was not found", field); emitExceptionThrow(location, NoSuchFieldError.class.getName(), "Field not found: " + field); return true; }
public ValueType getFieldType(FieldReference fieldReference) { ClassReader cls = classSource.get(fieldReference.getClassName()); FieldReader field = cls.getField(fieldReference.getFieldName()); return field.getType(); }
@Override public void visit(PutFieldInstruction insn) { String className = classNameMapper.map(insn.getField().getClassName()); if (className != insn.getField().getClassName()) { insn.setField(referenceCache.getCached(new FieldReference(className, insn.getField().getFieldName()))); } } @Override
@Override public void visit(QualificationExpr expr) { try { output.writeByte(expr.getQualified() != null ? 17 : 18); if (expr.getQualified() != null) { writeExpr(expr.getQualified()); } output.writeInt(symbolTable.lookup(expr.getField().getClassName())); output.writeInt(symbolTable.lookup(expr.getField().getFieldName())); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(GetFieldInstruction insn) { String className = classNameMapper.map(insn.getField().getClassName()); insn.setField(referenceCache.getCached(new FieldReference(className, insn.getField().getFieldName()))); }
@Override public void putField(VariableReader instance, FieldReference field, VariableReader value, ValueType fieldType) { FieldDependency fieldDep = getAnalyzer().linkField(field); fieldDep.addLocation(getCallLocation()); if (!(fieldType instanceof ValueType.Primitive)) { DependencyNode valueNode = getNode(value); if (valueNode != null) { valueNode.connect(fieldDep.getValue()); } } initClass(field.getClassName()); }
private void printFieldAccess(IntrinsicContext context, InvocationExpr invocation, FieldReference field) { context.writer().print("FIELD("); context.emit(invocation.getArguments().get(0)); context.writer().print(","); context.writer().print(context.names().forClass(field.getClassName())).print(", "); context.writer().print(context.names().forMemberField(field)); context.writer().print(")"); } }
public void renderStringConstants() throws RenderingException { try { for (PostponedFieldInitializer initializer : postponedFieldInitializers) { int start = writer.getOffset(); writer.appendStaticField(initializer.field).ws().append("=").ws() .append(context.constantToString(initializer.value)).append(";").softNewLine(); int sz = writer.getOffset() - start; appendClassSize(initializer.field.getClassName(), sz); } } catch (IOException e) { throw new RenderingException("IO error", e); } }
@Override public void visit(QualificationExpr expr) { if (expr.getQualified() != null) { writer.print("FIELD("); expr.getQualified().acceptVisitor(this); writer.print(", ").print(names.forClass(expr.getField().getClassName()) + ", " + names.forMemberField(expr.getField()) + ")"); } else { writer.print(names.forStaticField(expr.getField())); } }