From 869752bc342e44cf321fc98fcea96ec0159cd5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Wed, 25 Jan 2023 12:09:08 +0100 Subject: [PATCH] Shortcut equivalence check if ctdecl is unresolved --- .../java/rule/codestyle/UseDiamondOperatorRule.java | 12 ++---------- .../types/internal/infer/ast/BaseInvocMirror.java | 3 +++ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseDiamondOperatorRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseDiamondOperatorRule.java index 763f45844b..080e453295 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseDiamondOperatorRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/UseDiamondOperatorRule.java @@ -133,16 +133,8 @@ public class UseDiamondOperatorRule extends AbstractJavaRulechainRule { MethodCallSite fakeCallSite = infer.newCallSite(mirror, targetType); infer.inferInvocationRecursively(fakeCallSite); - try { - return mirror.isEquivalentToUnderlyingAst() - && topmostContext.acceptsType(mirror.getInferredType()); - } catch (IllegalStateException e) { - /* - * overload resolution may complaint it's incomplete if there are missing types. - * The missing type info may be relevant to the user, but this exception is not, swallow it - */ - return false; - } + return mirror.isEquivalentToUnderlyingAst() + && topmostContext.acceptsType(mirror.getInferredType()); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/internal/infer/ast/BaseInvocMirror.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/internal/infer/ast/BaseInvocMirror.java index c3f3a338c4..74a76ac4b0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/internal/infer/ast/BaseInvocMirror.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/types/internal/infer/ast/BaseInvocMirror.java @@ -40,6 +40,9 @@ abstract class BaseInvocMirror extends BasePolyMirror< public boolean isEquivalentToUnderlyingAst() { MethodCtDecl ctDecl = getCtDecl(); AssertionUtil.validateState(ctDecl != null, "overload resolution is not complete"); + if (ctDecl.isFailed()) { + return false; // be conservative + } if (!myNode.getMethodType().getSymbol().equals(ctDecl.getMethodType().getSymbol())) { return false; } else if (myNode instanceof ASTConstructorCall && ((ASTConstructorCall) myNode).isAnonymousClass()