From 9e2e512f6bfae8b15f386ac1908a978db40c85bb Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 1 Feb 2019 12:29:10 +0700 Subject: [PATCH] IDEA-192201 Bad code is green: inner class object creation --- .../daemon/impl/analysis/HighlightClassUtil.java | 14 ++++++++++++-- .../advHighlighting/QualifiedNew.java | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java index 5e114c298f5d..31292960b2ea 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java @@ -23,6 +23,7 @@ package com.intellij.codeInsight.daemon.impl.analysis; import com.intellij.codeInsight.ClassUtil; import com.intellij.codeInsight.ExceptionUtil; import com.intellij.codeInsight.daemon.JavaErrorMessages; +import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.HighlightInfoType; import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; @@ -726,15 +727,24 @@ public class HighlightClassUtil { if (!aClass.isEnum()) { QuickFixAction.registerQuickFixActions(info, null, JvmElementActionFactories.createModifierActions(aClass, MemberRequestsKt.modifierRequest(JvmModifier.STATIC, false))); } - + QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createRemoveNewQualifierFix(expression, aClass)); } else if (aClass instanceof PsiAnonymousClass) { final PsiClass baseClass = PsiUtil.resolveClassInType(((PsiAnonymousClass)aClass).getBaseClassType()); if (baseClass != null && baseClass.isInterface()) { info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression) .descriptionAndTooltip("Anonymous class implements interface; cannot have qualifier for new").create(); } + QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createRemoveNewQualifierFix(expression, aClass)); + } else { + PsiElement refQualifier = Objects.requireNonNull(expression.getClassReference()).getQualifier(); + if (refQualifier != null) { + info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(refQualifier) + .descriptionAndTooltip("Qualified class reference is not allowed in qualified new") + .create(); + QuickFixAction + .registerQuickFixAction(info, QUICK_FIX_FACTORY.createDeleteFix(refQualifier, QuickFixBundle.message("remove.qualifier.fix"))); + } } - QuickFixAction.registerQuickFixAction(info, QUICK_FIX_FACTORY.createRemoveNewQualifierFix(expression, aClass)); } return info; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java index ffb33066fd4e..ab7dc71b4c34 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/QualifiedNew.java @@ -5,6 +5,8 @@ class A { A() { b.new c(); b.new inner(); + new A.inner(); + b.new A.inner(); } class inner {}