From 71f674706ad65abee504b2b49bcda9fd3d0aa6d1 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 2 Jan 2018 17:32:11 +0700 Subject: [PATCH] WrapWithAdapterMethodCallFix: add more diagnostics for EA-114444. --- .../quickfix/WrapWithAdapterMethodCallFix.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/WrapWithAdapterMethodCallFix.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/WrapWithAdapterMethodCallFix.java index a0710b158efd..4dc8f321ff34 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/WrapWithAdapterMethodCallFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/WrapWithAdapterMethodCallFix.java @@ -26,6 +26,7 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.ObjectUtils; @@ -67,7 +68,21 @@ public class WrapWithAdapterMethodCallFix extends LocalQuickFixAndIntentionActio if (LambdaUtil.notInferredType(variableType)) return false; String typeText = variableType.getCanonicalText(); - PsiExpression replacement = createReplacement(context, "((" + typeText + ")null)"); + PsiExpression replacement; + try { + replacement = createReplacement(context, "((" + typeText + ")null)"); + } + catch (IncorrectOperationException ioe) { + PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(variableType); + String message = "Cannot create expression for type " + variableType.getClass() + "\n" + + "Canonical text: " + variableType.getCanonicalText() + "\n" + + "Internal text: " + variableType.getInternalCanonicalText() + "\n"; + if (aClass != null) { + message += "Class: " + aClass.getClass() + "|" + aClass.getQualifiedName() + "\n" + + "File: " + aClass.getContainingFile() + "\n"; + } + throw new IncorrectOperationException(message, (Throwable)ioe); + } PsiDeclarationStatement declaration = JavaPsiFacade.getElementFactory(context.getProject()).createVariableDeclarationStatement("x", outType, replacement, context); PsiVariable var = ObjectUtils.tryCast(ArrayUtil.getFirstElement(declaration.getDeclaredElements()), PsiVariable.class);