static TypeReference getFieldType(final FieldReference field) { final FieldDefinition resolvedField = field.resolve(); if (resolvedField != null) { final FieldReference asMember = MetadataHelper.asMemberOf(resolvedField, field.getDeclaringType()); return asMember.getFieldType(); } return substituteTypeArguments(field.getFieldType(), field); }
static TypeReference getFieldType(final FieldReference field) { final FieldDefinition resolvedField = field.resolve(); if (resolvedField != null) { final FieldReference asMember = MetadataHelper.asMemberOf(resolvedField, field.getDeclaringType()); return asMember.getFieldType(); } return substituteTypeArguments(field.getFieldType(), field); }
static TypeReference getFieldType(final FieldReference field) { final FieldDefinition resolvedField = field.resolve(); if (resolvedField != null) { final FieldReference asMember = MetadataHelper.asMemberOf(resolvedField, field.getDeclaringType()); return asMember.getFieldType(); } return substituteTypeArguments(field.getFieldType(), field); }
private void checkFieldRead(Expression expr, MethodContext mc) { if (Nodes.isFieldRead(expr)) { FieldDefinition fd = ((FieldReference) expr.getOperand()).resolve(); if (fd != null && !Flags.testAny(fd.getFlags(), Flags.VOLATILE)) { mc.report("SpinLoopOnField", 0, expr, Roles.FIELD.create(fd)); } } } }
@AstVisitor(nodes=AstNodes.EXPRESSIONS) public void visitCode(Expression expr, NodeChain nc, MethodContext mc, MethodDefinition md, TypeDefinition td) { if(expr.getCode() == AstCode.PutField) { FieldDefinition fd = ((FieldReference) expr.getOperand()).resolve(); if (fd.getDeclaringType().isEquivalentTo(td) && !nc.isSynchronized() && !Flags.testAny(fd.getFlags(), Flags.VOLATILE) && reportedFields.add(fd)) { mc.report("MutableServletField", 0, expr); } } } }
private static boolean isSwitchMapField(final FieldReference field) { if (field == null) { return false; } final FieldDefinition definition = field instanceof FieldDefinition ? (FieldDefinition) field : field.resolve(); return definition != null && definition.isSynthetic() && definition.isStatic() && definition.isPrivate() && StringUtilities.startsWith(definition.getName(), "$SWITCH_TABLE$") && MetadataResolver.areEquivalent(BuiltinTypes.Integer.makeArrayType(), definition.getFieldType()); }
private static boolean isSwitchMapField(final FieldReference field) { if (field == null) { return false; } final FieldDefinition definition = field instanceof FieldDefinition ? (FieldDefinition) field : field.resolve(); return definition != null && definition.isSynthetic() && definition.isStatic() && definition.isPrivate() && StringUtilities.startsWith(definition.getName(), "$SWITCH_TABLE$") && MetadataResolver.areEquivalent(BuiltinTypes.Integer.makeArrayType(), definition.getFieldType()); }
private static boolean isSwitchMapField(final FieldReference field) { if (field == null) { return false; } final FieldDefinition definition = field instanceof FieldDefinition ? (FieldDefinition) field : field.resolve(); return definition != null && definition.isSynthetic() && definition.isStatic() && definition.isPrivate() && StringUtilities.startsWith(definition.getName(), "$SWITCH_TABLE$") && MetadataResolver.areEquivalent(BuiltinTypes.Integer.makeArrayType(), definition.getFieldType()); }
@AstVisitor(nodes = AstNodes.EXPRESSIONS, methodName = "equals", methodSignature = "(Ljava/lang/Object;)Z") public void visitEqualsExpression(Expression expr, MethodContext mc) { if(isComparison(expr)) { Expression left = expr.getArguments().get(0); Expression right = expr.getArguments().get(1); if(left.getCode() == AstCode.GetField && right.getCode() == AstCode.GetField) { FieldReference lfr = ((FieldReference) left.getOperand()); FieldReference rfr = ((FieldReference) right.getOperand()); if(!lfr.isEquivalentTo(rfr)) { lfr = lfr.resolve(); rfr = rfr.resolve(); // TODO: do not warn about comparisons like if(a == o.a && b == o.b || a == o.b && b == o.a) if(lfr != null && rfr != null && !lfr.isEquivalentTo(rfr)) { if (Exprs.bothMatch(Exprs.getChild(left, 0), Exprs.getChild(right, 0), Exprs::isThis, EqualsContract::isParameter)) { mc.report("EqualsSuspiciousFieldComparison", 0, left, OTHER_FIELD.create(rfr)); } } } } if (expr.getCode() == AstCode.InvokeVirtual && Methods.isEqualsMethod((MethodReference) expr.getOperand())) { checkGetName(expr, mc, left); checkGetName(expr, mc, right); } } }
private FieldDefinition getField(Expression expr, MethodDefinition md) { if (!md.isStatic() && expr.getCode() == AstCode.PutField) { FieldDefinition fd = ((FieldReference) expr.getOperand()).resolve(); if (fd != null && !fd.isSynthetic() && (fd.isPrivate() || fd.isPackagePrivate() || fd.isProtected())) { if (md.isProtected() && fd.isProtected()) return null; Expression self = Exprs.getChild(expr, 0); if (!Exprs.isThis(self)) return null; return fd; } } if (expr.getCode() == AstCode.PutStatic) { FieldDefinition fd = ((FieldReference) expr.getOperand()).resolve(); if (fd != null && !fd.isSynthetic() && (fd.isPrivate() || fd.isPackagePrivate())) { return fd; } } return null; }
@Override public Void visitMemberReferenceExpression(final MemberReferenceExpression node, final Void data) { super.visitMemberReferenceExpression(node, data); if (isCurrentMemberVisible()) { MemberReference member = node.getUserData(Keys.MEMBER_REFERENCE); if (member == null && node.getParent() != null) { member = node.getParent().getUserData(Keys.MEMBER_REFERENCE); } if (member != null) { final IMemberDefinition resolvedMember; if (member instanceof FieldReference) { resolvedMember = ((FieldReference) member).resolve(); } else { resolvedMember = ((MethodReference) member).resolve(); } if (resolvedMember != null && resolvedMember.isSynthetic() && !Flags.testAny(resolvedMember.getFlags(), Flags.BRIDGE)) { context.getForcedVisibleMembers().add(resolvedMember); } } } return null; }
@Override public Void visitMemberReferenceExpression(final MemberReferenceExpression node, final Void data) { super.visitMemberReferenceExpression(node, data); if (isCurrentMemberVisible()) { MemberReference member = node.getUserData(Keys.MEMBER_REFERENCE); if (member == null && node.getParent() != null) { member = node.getParent().getUserData(Keys.MEMBER_REFERENCE); } if (member != null) { final IMemberDefinition resolvedMember; if (member instanceof FieldReference) { resolvedMember = ((FieldReference) member).resolve(); } else { resolvedMember = ((MethodReference) member).resolve(); } if (resolvedMember != null && resolvedMember.isSynthetic() && !Flags.testAny(resolvedMember.getFlags(), Flags.BRIDGE)) { context.getForcedVisibleMembers().add(resolvedMember); } } } return null; }
@Override public Void visitMemberReferenceExpression(final MemberReferenceExpression node, final Void data) { super.visitMemberReferenceExpression(node, data); if (isCurrentMemberVisible()) { MemberReference member = node.getUserData(Keys.MEMBER_REFERENCE); if (member == null && node.getParent() != null) { member = node.getParent().getUserData(Keys.MEMBER_REFERENCE); } if (member != null) { final IMemberDefinition resolvedMember; if (member instanceof FieldReference) { resolvedMember = ((FieldReference) member).resolve(); } else { resolvedMember = ((MethodReference) member).resolve(); } if (resolvedMember != null && resolvedMember.isSynthetic() && !Flags.testAny(resolvedMember.getFlags(), Flags.BRIDGE)) { context.getForcedVisibleMembers().add(resolvedMember); } } } return null; }
final FieldDefinition resolvedField = ((FieldReference) memberReference).resolve();
final FieldDefinition resolvedField = ((FieldReference) memberReference).resolve();
final FieldDefinition resolvedField = ((FieldReference) memberReference).resolve();
private static boolean isThisOrOuterThisReference(final Expression e) { if (e == null || e.isNull()) { return false; } if (e instanceof ThisReferenceExpression && ((ThisReferenceExpression) e).getTarget().isNull()) { return true; } if (e instanceof MemberReferenceExpression) { final MemberReference m = e.getUserData(Keys.MEMBER_REFERENCE); if (m instanceof FieldReference) { final FieldDefinition resolvedField = ((FieldReference) m).resolve(); if (resolvedField != null && resolvedField.isSynthetic() && resolvedField.getDeclaringType().isInnerClass() && resolvedField.getDeclaringType().getDeclaringType() != null && resolvedField.getDeclaringType().getDeclaringType().isEquivalentTo(resolvedField.getFieldType())) { return true; } } } return false; }
final Expression target = (Expression) firstOrDefault(match.get("target")); final FieldReference reference = (FieldReference) target.getUserData(Keys.MEMBER_REFERENCE); final FieldDefinition definition = reference.resolve();
final FieldDefinition resolvedField = ((FieldReference) member).resolve();
final FieldDefinition resolvedField = ((FieldReference) memberReference).resolve();