CodeQL 文档

容器内容永远不会被访问

ID: java/unused-container
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - maintainability
   - useless-code
   - external/cwe/cwe-561
Query suites:
   - java-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

如果集合或映射的内容从未以任何方式被访问,那么它就是无用的,并且更新它的代码实际上是无效代码。通常,此类对象是从不完整的重构中遗留的,或者它们表示底层逻辑错误。

建议

如果集合/映射确实不必要,则将其删除,或者确保访问其元素。

示例

在以下示例代码中,reachable 方法确定树中的节点是否可从 ROOT 访问。它维护一个集合 reachableNodes,其中包含所有先前发现可访问的节点。此集合很可能用作缓存,以避免虚假重新计算,但就目前情况而言,代码永远不会检查集合中是否包含任何节点。

private Set<Node> reachableNodes = new HashSet<Node>();

boolean reachable(Node n) {
	boolean reachable;
	if (n == ROOT)
		reachable = true;
	else
		reachable = reachable(n.getParent());
	if (reachable)
		reachableNodes.add(n);
	return reachable;
}

在对上述示例进行以下修改时,reachable 会检查缓存,以查看该节点是否已被考虑。

private Set<Node> reachableNodes = new HashSet<Node>();

boolean reachable(Node n) {
	if (reachableNodes.contains(n))
		  return true;
	
	boolean reachable;
	if (n == ROOT)
		reachable = true;
	else
		reachable = reachable(n.getParent());
	if (reachable)
		reachableNodes.add(n);
	return reachable;
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私