From f05869508f0eddf9708351e35425d30cdd9b788e Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 11 Mar 2014 17:25:13 +0100 Subject: [PATCH] IDEA-54387 (type annotations in introduce parameter) --- .../intellij/psi/impl/PsiElementFactoryImpl.java | 14 +++++++------- .../introduceParameter/afterTypeAnnotation.java | 14 ++++++++++++++ .../introduceParameter/beforeTypeAnnotation.java | 15 +++++++++++++++ .../refactoring/IntroduceParameterTest.java | 4 ++++ 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceParameter/afterTypeAnnotation.java create mode 100644 java/java-tests/testData/refactoring/introduceParameter/beforeTypeAnnotation.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java index 68c29ec537e0..0515b4983ce2 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java @@ -165,7 +165,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps final PsiClassType.ClassResolveResult resolveResult = type.resolveGenerics(); final PsiClass refClass = resolveResult.getElement(); assert refClass != null : type; - return new LightClassReference(myManager, type.getCanonicalText(), refClass, resolveResult.getSubstitutor()); + return new LightClassReference(myManager, type.getCanonicalText(true), refClass, resolveResult.getSubstitutor()); } @NotNull @@ -186,7 +186,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps builder.append(" extends "); for (PsiClassType type : superTypes) { if (type.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) continue; - builder.append(type.getCanonicalText()).append('&'); + builder.append(type.getCanonicalText(true)).append('&'); } builder.delete(builder.length() - 1, builder.length()); @@ -208,7 +208,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps throw new IncorrectOperationException("Cannot create field with type \"null\"."); } - @NonNls final String text = "class _Dummy_ { private " + type.getCanonicalText() + " " + name + "; }"; + @NonNls final String text = "class _Dummy_ { private " + type.getCanonicalText(true) + " " + name + "; }"; final PsiJavaFile aFile = createDummyJavaFile(text); final PsiClass[] classes = aFile.getClasses(); if (classes.length < 1) { @@ -232,7 +232,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps throw new IncorrectOperationException("Cannot create method with type \"null\"."); } - final String canonicalText = returnType.getCanonicalText(); + final String canonicalText = returnType.getCanonicalText(true); final PsiJavaFile aFile = createDummyJavaFile("class _Dummy_ { public " + canonicalText + " " + name + "() {} }"); final PsiClass[] classes = aFile.getClasses(); if (classes.length < 1) { @@ -282,7 +282,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps throw new IncorrectOperationException("Cannot create parameter with type \"null\"."); } - final String text = type.getCanonicalText() + " " + name; + final String text = type.getCanonicalText(true) + " " + name; PsiParameter parameter = createParameterFromText(text, null); final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(myManager.getProject()); PsiUtil.setModifierProperty(parameter, PsiModifier.FINAL, @@ -480,7 +480,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps builder.append("void method("); for (int i = 0; i < names.length; i++) { if (i > 0) builder.append(", "); - builder.append(types[i].getCanonicalText()).append(' ').append(names[i]); + builder.append(types[i].getCanonicalText(true)).append(' ').append(names[i]); } builder.append(");"); return createMethodFromText(builder.toString(), null).getParameterList(); @@ -742,7 +742,7 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps throw new IncorrectOperationException("Unexpected type:" + exceptionType); } - @NonNls final String text = "catch (" + exceptionType.getCanonicalText() + " " + exceptionName + ") {}"; + @NonNls final String text = "catch (" + exceptionType.getCanonicalText(true) + " " + exceptionName + ") {}"; final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, CATCH_SECTION, level(context)), context); final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode()); if (!(element instanceof PsiCatchSection)) { diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterTypeAnnotation.java b/java/java-tests/testData/refactoring/introduceParameter/afterTypeAnnotation.java new file mode 100644 index 000000000000..a14b989bbc89 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameter/afterTypeAnnotation.java @@ -0,0 +1,14 @@ +import java.lang.annotation.*; + +@Target(value = ElementType.TYPE_USE) +public @interface TA { } + +class Test { + void m(@TA String anObject) { + System.out.println(anObject); + } + + void use() { + m("smth"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeTypeAnnotation.java b/java/java-tests/testData/refactoring/introduceParameter/beforeTypeAnnotation.java new file mode 100644 index 000000000000..949419221d40 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameter/beforeTypeAnnotation.java @@ -0,0 +1,15 @@ +import java.lang.annotation.*; + +@Target(value = ElementType.TYPE_USE) +public @interface TA { } + +class Test { + void m() { + @TA String v = "smth"; + System.out.println(v); + } + + void use() { + m(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java index 887b5908318a..0423d0939242 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java @@ -342,6 +342,10 @@ public class IntroduceParameterTest extends LightRefactoringTestCase { checkResultByFile("/refactoring/introduceParameter/after" + getTestName(false) + ".java"); } + public void testTypeAnnotation() { + doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, false, false, false); + } + private void doTest(int replaceFieldsWithGetters, boolean removeUnusedParameters, boolean searchForSuper,