introduce parameter object: downgrade accessibilty for inner classes (IDEADEV-35295)

This commit is contained in:
anna
2010-01-14 14:28:23 +03:00
parent eced11faaf
commit b326598366
9 changed files with 63 additions and 7 deletions

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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){}
}

View File

@@ -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;
}
}
}

View File

@@ -0,0 +1,5 @@
class Usage {
void barr(Test t) {
t.foo(new Test.Param(""));
}
}

View File

@@ -0,0 +1,7 @@
class Test {
void foo(String s) {
bar(s);
}
void bar(String s){}
}

View File

@@ -0,0 +1,5 @@
class Usage {
void barr(Test t) {
t.foo("");
}
}

View File

@@ -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();
}