mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
introduce parameter object: downgrade accessibilty for inner classes (IDEADEV-35295)
This commit is contained in:
@@ -27,6 +27,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
@@ -41,6 +42,7 @@ import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usageView.UsageViewDescriptor;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -220,6 +222,15 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
|
||||
final PsiClass psiClass = buildClass();
|
||||
if (psiClass != null) {
|
||||
super.performRefactoring(usageInfos);
|
||||
if (!myUseExistingClass) {
|
||||
for (PsiReference reference : ReferencesSearch.search(method)) {
|
||||
final PsiElement place = reference.getElement();
|
||||
VisibilityUtil.escalateVisibility(psiClass, place);
|
||||
for (PsiMethod constructor : psiClass.getConstructors()) {
|
||||
VisibilityUtil.escalateVisibility(constructor, place);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,6 +239,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
|
||||
return existingClass;
|
||||
}
|
||||
final ParameterObjectBuilder beanClassBuilder = new ParameterObjectBuilder();
|
||||
beanClassBuilder.setVisibility(myCreateInnerClass ? PsiModifier.PRIVATE : PsiModifier.PUBLIC);
|
||||
beanClassBuilder.setProject(myProject);
|
||||
beanClassBuilder.setTypeArguments(typeParams);
|
||||
beanClassBuilder.setClassName(className);
|
||||
|
||||
@@ -35,6 +35,7 @@ class ParameterObjectBuilder {
|
||||
private final List<PsiTypeParameter> typeParams = new ArrayList<PsiTypeParameter>();
|
||||
private Project myProject;
|
||||
private JavaCodeStyleManager myJavaCodeStyleManager ;
|
||||
private String myVisibility;
|
||||
|
||||
public void setClassName(String className) {
|
||||
this.className = className;
|
||||
@@ -63,7 +64,7 @@ class ParameterObjectBuilder {
|
||||
@NonNls final StringBuffer out = new StringBuffer(1024);
|
||||
if (packageName.length() > 0) out.append("package " + packageName + ';');
|
||||
out.append('\n');
|
||||
out.append("public class " + className);
|
||||
out.append(myVisibility + " class " + className);
|
||||
if (!typeParams.isEmpty()) {
|
||||
out.append('<');
|
||||
boolean first = true;
|
||||
@@ -172,7 +173,7 @@ class ParameterObjectBuilder {
|
||||
}
|
||||
|
||||
private void outputConstructor(@NonNls StringBuffer out) {
|
||||
out.append("\tpublic " + className + '(');
|
||||
out.append("\t" + myVisibility + " " + className + '(');
|
||||
for (Iterator<ParameterSpec> iterator = fields.iterator(); iterator.hasNext();) {
|
||||
final ParameterSpec field = iterator.next();
|
||||
final PsiParameter parameter = field.getParameter();
|
||||
@@ -257,5 +258,8 @@ class ParameterObjectBuilder {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setVisibility(String visibility) {
|
||||
myVisibility = visibility;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ class Test {
|
||||
|
||||
void bar(String s){}
|
||||
|
||||
public static class Param {
|
||||
private static class Param {
|
||||
private final String s;
|
||||
|
||||
public Param(String s) {
|
||||
private Param(String s) {
|
||||
this.s = s;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
public interface Test {
|
||||
void foo(Param param);
|
||||
|
||||
public static class Param {
|
||||
private static class Param {
|
||||
private final String s;
|
||||
|
||||
public Param(String s) {
|
||||
private Param(String s) {
|
||||
this.s = s;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,6 @@ public interface Test {
|
||||
}
|
||||
|
||||
class TestImpl implements Test {
|
||||
void foo(Param param){}
|
||||
void foo(Test.Param param){}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
class Test {
|
||||
void foo(Param param) {
|
||||
bar(param.getS());
|
||||
}
|
||||
|
||||
void bar(String s){}
|
||||
|
||||
static class Param {
|
||||
private final String s;
|
||||
|
||||
Param(String s) {
|
||||
this.s = s;
|
||||
}
|
||||
|
||||
public String getS() {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
class Usage {
|
||||
void barr(Test t) {
|
||||
t.foo(new Test.Param(""));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
class Test {
|
||||
void foo(String s) {
|
||||
bar(s);
|
||||
}
|
||||
|
||||
void bar(String s){}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
class Usage {
|
||||
void barr(Test t) {
|
||||
t.foo("");
|
||||
}
|
||||
}
|
||||
@@ -68,6 +68,10 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
|
||||
doTest(false, true);
|
||||
}
|
||||
|
||||
public void testUsedInnerClass() throws Exception {
|
||||
doTest(false, true);
|
||||
}
|
||||
|
||||
public void testPrimitive() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user