mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
generate visibility setting for create from usage, generate getter/setter/constructor (IDEA-120662, IDEA-64613, IDEA-122025)
This commit is contained in:
+16
-1
@@ -168,7 +168,7 @@
|
||||
</grid>
|
||||
<grid id="81c32" binding="myMembersPanel" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="5" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="3" indent="0" use-parent-layout="false"/>
|
||||
<grid row="0" column="1" row-span="2" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<clientProperties>
|
||||
@@ -283,6 +283,21 @@
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="edade" binding="myVisibilityPanel" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<grid row="2" column="1" row-span="3" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<clientProperties>
|
||||
<BorderFactoryClass class="java.lang.String" value="com.intellij.ui.IdeBorderFactory$PlainSmallWithIndent"/>
|
||||
</clientProperties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<vspacer id="69bbc">
|
||||
<constraints border-constraint="Center"/>
|
||||
</vspacer>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
|
||||
+9
@@ -25,6 +25,7 @@ import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.refactoring.ui.JavaVisibilityPanel;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.ui.ToolbarDecorator;
|
||||
import com.intellij.ui.components.JBList;
|
||||
@@ -35,6 +36,7 @@ import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
public class CodeStyleGenerationConfigurable implements Configurable {
|
||||
private final JavaVisibilityPanel myJavaVisibilityPanel;
|
||||
JPanel myPanel;
|
||||
private JTextField myFieldPrefixField;
|
||||
private JTextField myStaticFieldPrefixField;
|
||||
@@ -59,17 +61,20 @@ public class CodeStyleGenerationConfigurable implements Configurable {
|
||||
private JCheckBox myInsertOverrideAnnotationCheckBox;
|
||||
private JPanel myMembersPanel;
|
||||
private JCheckBox myRepeatSynchronizedCheckBox;
|
||||
private JPanel myVisibilityPanel;
|
||||
|
||||
public CodeStyleGenerationConfigurable(CodeStyleSettings settings) {
|
||||
mySettings = settings;
|
||||
myMembersOrderList = new MembersOrderList();
|
||||
myPanel.setBorder(IdeBorderFactory.createEmptyBorder(2, 2, 2, 2));
|
||||
myJavaVisibilityPanel = new JavaVisibilityPanel(false, true);
|
||||
}
|
||||
|
||||
public JComponent createComponent() {
|
||||
final JPanel panel = ToolbarDecorator.createDecorator(myMembersOrderList)
|
||||
.disableAddAction().disableRemoveAction().createPanel();
|
||||
myMembersPanel.add(panel, BorderLayout.CENTER);
|
||||
myVisibilityPanel.add(myJavaVisibilityPanel, BorderLayout.CENTER);
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
@@ -229,6 +234,7 @@ public class CodeStyleGenerationConfigurable implements Configurable {
|
||||
myCbUseExternalAnnotations.setSelected(settings.USE_EXTERNAL_ANNOTATIONS);
|
||||
myInsertOverrideAnnotationCheckBox.setSelected(settings.INSERT_OVERRIDE_ANNOTATION);
|
||||
myRepeatSynchronizedCheckBox.setSelected(settings.REPEAT_SYNCHRONIZED);
|
||||
myJavaVisibilityPanel.setVisibility(settings.VISIBILITY);
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
@@ -258,6 +264,8 @@ public class CodeStyleGenerationConfigurable implements Configurable {
|
||||
settings.USE_EXTERNAL_ANNOTATIONS = myCbUseExternalAnnotations.isSelected();
|
||||
settings.INSERT_OVERRIDE_ANNOTATION = myInsertOverrideAnnotationCheckBox.isSelected();
|
||||
settings.REPEAT_SYNCHRONIZED = myRepeatSynchronizedCheckBox.isSelected();
|
||||
|
||||
settings.VISIBILITY = myJavaVisibilityPanel.getVisibility();
|
||||
|
||||
myMembersOrderList.apply(settings);
|
||||
|
||||
@@ -306,6 +314,7 @@ public class CodeStyleGenerationConfigurable implements Configurable {
|
||||
isModified |= isModified(myRepeatSynchronizedCheckBox, settings.REPEAT_SYNCHRONIZED);
|
||||
|
||||
isModified |= myMembersOrderList.isModified(settings);
|
||||
isModified |= !settings.VISIBILITY.equals(myJavaVisibilityPanel.getVisibility());
|
||||
|
||||
return isModified;
|
||||
}
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ public class CreateAbstractMethodFromUsageFix extends CreateMethodFromUsageFix {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getVisibility(PsiClass parentClass, PsiClass targetClass) {
|
||||
protected String getVisibility(PsiClass parentClass, @NotNull PsiClass targetClass) {
|
||||
String result = super.getVisibility(parentClass, targetClass);
|
||||
return PsiModifier.PUBLIC.equals(result) ? result : PsiModifier.PROTECTED;
|
||||
}
|
||||
|
||||
+11
-4
@@ -35,6 +35,7 @@ import com.intellij.openapi.ui.popup.PopupChooserBuilder;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
@@ -162,20 +163,26 @@ public abstract class CreateFromUsageBaseFix extends BaseIntentionAction {
|
||||
return FileEditorManager.getInstance(project).openTextEditor(descriptor, true);
|
||||
}
|
||||
|
||||
protected void setupVisibility(PsiClass parentClass, PsiClass targetClass, PsiModifierList list) throws IncorrectOperationException {
|
||||
protected void setupVisibility(PsiClass parentClass, @NotNull PsiClass targetClass, PsiModifierList list) throws IncorrectOperationException {
|
||||
if (targetClass.isInterface() && list.getFirstChild() != null) {
|
||||
list.deleteChildRange(list.getFirstChild(), list.getLastChild());
|
||||
return;
|
||||
}
|
||||
VisibilityUtil.setVisibility(list, getVisibility(parentClass, targetClass));
|
||||
final String visibility = getVisibility(parentClass, targetClass);
|
||||
if (VisibilityUtil.ESCALATE_VISIBILITY.equals(visibility)) {
|
||||
list.setModifierProperty(PsiModifier.PRIVATE, true);
|
||||
VisibilityUtil.escalateVisibility(list, parentClass);
|
||||
} else {
|
||||
VisibilityUtil.setVisibility(list, visibility);
|
||||
}
|
||||
}
|
||||
|
||||
@PsiModifier.ModifierConstant
|
||||
protected String getVisibility(PsiClass parentClass, PsiClass targetClass) {
|
||||
protected String getVisibility(PsiClass parentClass, @NotNull PsiClass targetClass) {
|
||||
if (parentClass != null && (parentClass.equals(targetClass) || PsiTreeUtil.isAncestor(targetClass, parentClass, true))) {
|
||||
return PsiModifier.PRIVATE;
|
||||
} else {
|
||||
return PsiModifier.PUBLIC;
|
||||
return CodeStyleSettingsManager.getSettings(targetClass.getProject()).VISIBILITY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -29,7 +29,6 @@ import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -217,11 +216,8 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject());
|
||||
|
||||
PsiMethod constructor = factory.createConstructor(aClass.getName(), aClass);
|
||||
String modifier = PsiUtil.getMaximumModifierForMember(aClass, false);
|
||||
|
||||
if (modifier != null) {
|
||||
PsiUtil.setModifierProperty(constructor, modifier, true);
|
||||
}
|
||||
GenerateMembersUtil.setVisibility(aClass, constructor);
|
||||
|
||||
if (baseConstructor != null){
|
||||
PsiJavaCodeReferenceElement[] throwRefs = baseConstructor.getThrowsList().getReferenceElements();
|
||||
|
||||
@@ -30,7 +30,10 @@ import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.impl.light.LightTypeElement;
|
||||
import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
@@ -44,6 +47,7 @@ import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.text.UniqueNameGenerator;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -582,12 +586,24 @@ public class GenerateMembersUtil {
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateGetterPrototype(@NotNull PsiField field) {
|
||||
return annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateGetterPrototype(field));
|
||||
return setVisibility(field, annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateGetterPrototype(field)));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateSetterPrototype(@NotNull PsiField field) {
|
||||
return annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateSetterPrototype(field));
|
||||
return setVisibility(field, annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateSetterPrototype(field)));
|
||||
}
|
||||
|
||||
@Contract("_, null -> null")
|
||||
public static PsiMethod setVisibility(PsiMember member, PsiMethod prototype) {
|
||||
if (prototype == null) return null;
|
||||
final String visibility = CodeStyleSettingsManager.getSettings(member.getProject()).VISIBILITY;
|
||||
final PsiModifierList modifierList = prototype.getModifierList();
|
||||
final String newVisibility = VisibilityUtil.ESCALATE_VISIBILITY.equals(visibility)
|
||||
? PsiUtil.getMaximumModifierForMember(member instanceof PsiClass ? (PsiClass)member : member.getContainingClass(), false)
|
||||
: visibility;
|
||||
VisibilityUtil.setVisibility(modifierList, newVisibility);
|
||||
return prototype;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ public abstract class GetterSetterPrototypeProvider {
|
||||
return generateGetter ? provider.generateGetters(field) : provider.generateSetters(field);
|
||||
}
|
||||
}
|
||||
return new PsiMethod[] {generateGetter ? PropertyUtil.generateGetterPrototype(field) : PropertyUtil.generateSetterPrototype(field)};
|
||||
return new PsiMethod[]{generateGetter ? GenerateMembersUtil.generateGetterPrototype(field) : GenerateMembersUtil.generateSetterPrototype(field)};
|
||||
}
|
||||
|
||||
public static boolean isReadOnlyProperty(PsiField field) {
|
||||
|
||||
@@ -67,6 +67,12 @@ public class VisibilityUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static void escalateVisibility(PsiModifierList modifierList, PsiElement place) throws IncorrectOperationException {
|
||||
final PsiElement parent = modifierList.getParent();
|
||||
if (parent instanceof PsiMember) {
|
||||
escalateVisibility((PsiMember)parent, place);
|
||||
}
|
||||
}
|
||||
|
||||
@PsiModifier.ModifierConstant
|
||||
public static String getPossibleVisibility(final PsiMember psiMethod, final PsiElement place) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
public abstract class Test {
|
||||
protected Test() {<caret>
|
||||
public Test() {<caret>
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
class Parent {
|
||||
Object menu;
|
||||
|
||||
Parent(Object menu) {
|
||||
public Parent(Object menu) {
|
||||
this.menu = menu;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
class Test {
|
||||
private int _foo;
|
||||
|
||||
Test(int foo) {
|
||||
public Test(int foo) {
|
||||
_foo = foo;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -4,7 +4,7 @@ class Test {
|
||||
private int c;
|
||||
private final int d;
|
||||
|
||||
Test(int b, int d) {
|
||||
public Test(int b, int d) {
|
||||
this.b = b;
|
||||
this.d = d;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
class A
|
||||
{
|
||||
A() {
|
||||
public A() {<caret>
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
class Test {
|
||||
Test() {<caret>
|
||||
public Test() {<caret>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class Test {
|
||||
private class Foo {
|
||||
private Foo() {<caret>
|
||||
public Foo() {<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ class Parent<T> {
|
||||
}
|
||||
|
||||
class Child<Integer> extends Parent<Integer> {
|
||||
Child(Integer field) {
|
||||
public Child(Integer field) {
|
||||
super(field);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,6 +207,9 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea
|
||||
public boolean GENERATE_FINAL_LOCALS = false;
|
||||
public boolean GENERATE_FINAL_PARAMETERS = false;
|
||||
|
||||
//----------------- visibility -----------------------------
|
||||
public String VISIBILITY = "public";
|
||||
|
||||
//----------------- generate parentheses around method arguments ----------
|
||||
public boolean PARENTHESES_AROUND_METHOD_ARGUMENTS = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user