mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-templates] Remove 'new' template if all constructors are inaccessible
GitOrigin-RevId: 1620d578f691a6071d70e5497029e30e5eca40d6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8b86d41824
commit
0dbf026ae3
+13
-1
@@ -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() {
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class Foo {
|
||||
void m() {
|
||||
Test.new<caret>
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class Foo {
|
||||
void m() {
|
||||
Test.new <caret>
|
||||
}
|
||||
}
|
||||
+6
@@ -62,4 +62,10 @@ public class NewExpressionPostfixTemplateTest extends PostfixTemplateTestCase {
|
||||
public void testNewAfterNew() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testNewInaccessible() {
|
||||
myFixture.addClass("class Test {private Test() {}}");
|
||||
doTest();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user