[java-templates] Remove 'new' template if all constructors are inaccessible

GitOrigin-RevId: 1620d578f691a6071d70e5497029e30e5eca40d6
This commit is contained in:
Tagir Valeev
2021-09-06 10:31:09 +00:00
committed by intellij-monorepo-bot
parent 8b86d41824
commit 0dbf026ae3
4 changed files with 29 additions and 1 deletions
@@ -11,6 +11,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -36,7 +37,18 @@ public class NewExpressionPostfixTemplate extends StringBasedPostfixTemplate {
JavaResolveResult result = ref.advancedResolve(true);
PsiElement element = result.getElement();
return element == null || element instanceof PsiClass;
if (element != null && !(element instanceof PsiClass)) return false;
if (element != null) {
PsiMethod[] constructors = ((PsiClass)element).getConstructors();
if (constructors.length > 0) {
PsiResolveHelper helper = JavaPsiFacade.getInstance(element.getProject()).getResolveHelper();
if (ContainerUtil.and(constructors, m -> !helper.isAccessible(m, ref, (PsiClass)element))) {
// All constructors aren't accessible
return false;
}
}
}
return true;
};
protected NewExpressionPostfixTemplate() {
@@ -0,0 +1,5 @@
public class Foo {
void m() {
Test.new<caret>
}
}
@@ -0,0 +1,5 @@
public class Foo {
void m() {
Test.new <caret>
}
}
@@ -62,4 +62,10 @@ public class NewExpressionPostfixTemplateTest extends PostfixTemplateTestCase {
public void testNewAfterNew() {
doTest();
}
public void testNewInaccessible() {
myFixture.addClass("class Test {private Test() {}}");
doTest();
}
}