From 3002ac96f0413983f39c5442a0d75b7a439bbbef Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 27 Aug 2013 13:22:15 +0400 Subject: [PATCH] Supported converting member properties to extensions Additionally, we now generate throw UnsupportedOperationException() when a missing body is added --- .../jet/lang/psi/JetCallableDeclaration.java | 30 +++++ .../jetbrains/jet/lang/psi/JetFunction.java | 12 +- .../jetbrains/jet/lang/psi/JetProperty.java | 16 ++- .../jetbrains/jet/lang/psi/JetPsiFactory.java | 2 +- .../ConvertMemberToExtension.java | 114 +++++++++++++----- .../abstract.kt.after | 1 + .../abstractProperty.kt | 3 + .../abstractProperty.kt.after | 5 + .../funcitonNoName.kt | 3 + .../funcitonNoName.kt.after | 5 + .../genericProperty.kt | 3 + .../genericProperty.kt.after | 5 + .../valWithDefaultGetter.kt | 4 + .../valWithDefaultGetter.kt.after | 5 + .../convertMemberToExtension/valWithGetter.kt | 4 + .../valWithGetter.kt.after | 5 + .../valWithGetterBlockBody.kt | 4 + .../valWithGetterBlockBody.kt.after | 7 ++ .../varWithDefaultGetterAndSetter.kt | 5 + .../varWithDefaultGetterAndSetter.kt.after | 8 ++ .../varWithDefaultSetter.kt | 5 + .../varWithDefaultSetter.kt.after | 8 ++ .../convertMemberToExtension/varWithGetter.kt | 4 + .../varWithGetter.kt.after | 10 ++ .../varWithGetterAndSetter.kt | 5 + .../varWithGetterAndSetter.kt.after | 7 ++ .../convertMemberToExtension/varWithSetter.kt | 4 + .../varWithSetter.kt.after | 7 ++ .../CodeTransformationsTestGenerated.java | 55 +++++++++ 29 files changed, 304 insertions(+), 42 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallableDeclaration.java create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt.after create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt create mode 100644 idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt.after diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallableDeclaration.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallableDeclaration.java new file mode 100644 index 00000000000..664166ee9dc --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallableDeclaration.java @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.psi; + +import org.jetbrains.annotations.Nullable; + +public interface JetCallableDeclaration extends JetNamedDeclaration, JetTypeParameterListOwner { + @Nullable + JetParameterList getValueParameterList(); + + @Nullable + JetTypeReference getReceiverTypeRef(); + + @Nullable + JetTypeReference getReturnTypeRef(); +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunction.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunction.java index 8fa762bca28..143473683f2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunction.java @@ -16,17 +16,7 @@ package org.jetbrains.jet.lang.psi; -import org.jetbrains.annotations.Nullable; - -public interface JetFunction extends JetTypeParameterListOwner, JetDeclarationWithBody { - @Nullable - JetParameterList getValueParameterList(); - - @Nullable - JetTypeReference getReceiverTypeRef(); - - @Nullable - JetTypeReference getReturnTypeRef(); +public interface JetFunction extends JetDeclarationWithBody, JetCallableDeclaration { boolean isLocal(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java index 836897bc6f7..09a2607e3d4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java @@ -39,7 +39,8 @@ import static org.jetbrains.jet.JetNodeTypes.PROPERTY_ACCESSOR; import static org.jetbrains.jet.JetNodeTypes.PROPERTY_DELEGATE; import static org.jetbrains.jet.lexer.JetTokens.*; -public class JetProperty extends JetTypeParameterListOwnerStub implements JetVariableDeclaration { +public class JetProperty extends JetTypeParameterListOwnerStub implements JetVariableDeclaration, + JetCallableDeclaration { public JetProperty(@NotNull ASTNode node) { super(node); } @@ -98,6 +99,13 @@ public class JetProperty extends JetTypeParameterListOwnerStub T createDeclaration(Project project, String text, Class clazz) { + public static T createDeclaration(Project project, String text, Class clazz) { JetFile file = createFile(project, text); List dcls = file.getDeclarations(); assert dcls.size() == 1 : dcls.size() + " declarations in " + text; diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/declarations/ConvertMemberToExtension.java b/idea/src/org/jetbrains/jet/plugin/intentions/declarations/ConvertMemberToExtension.java index d372a458ad3..36d81e97900 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/declarations/ConvertMemberToExtension.java +++ b/idea/src/org/jetbrains/jet/plugin/intentions/declarations/ConvertMemberToExtension.java @@ -16,9 +16,11 @@ package org.jetbrains.jet.plugin.intentions.declarations; +import com.intellij.codeInsight.CodeInsightUtilCore; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -28,9 +30,9 @@ import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lexer.JetToken; @@ -40,8 +42,13 @@ import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManagerUtil; import java.util.List; +import static org.jetbrains.jet.lang.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR; + public class ConvertMemberToExtension extends BaseIntentionAction { + public static final String CARET_ANCHOR = "____CARET_ANCHOR____"; + public static final String THROW_UNSUPPORTED_OPERATION_EXCEPTION = " throw UnsupportedOperationException()"; + @NotNull @Override public String getText() { @@ -58,32 +65,31 @@ public class ConvertMemberToExtension extends BaseIntentionAction { public boolean isAvailable( @NotNull Project project, Editor editor, PsiFile file ) { - JetNamedFunction function = getTarget(editor, file); - return function != null - && function.getParent() instanceof JetClassBody - && function.getParent().getParent() instanceof JetClass - && function.getReceiverTypeRef() == null; + JetCallableDeclaration declaration = getTarget(editor, file); + if (declaration instanceof JetProperty) { + if (((JetProperty) declaration).getInitializer() != null) return false; + } + return declaration != null + && declaration.getParent() instanceof JetClassBody + && declaration.getParent().getParent() instanceof JetClass + && declaration.getReceiverTypeRef() == null; } - private static JetNamedFunction getTarget(Editor editor, PsiFile file) { + private static JetCallableDeclaration getTarget(Editor editor, PsiFile file) { PsiElement element = file.findElementAt(editor.getCaretModel().getOffset()); - return PsiTreeUtil.getParentOfType(element, JetNamedFunction.class, false, JetExpression.class); + return PsiTreeUtil.getParentOfType(element, JetCallableDeclaration.class, false, JetExpression.class); } @Override public void invoke( @NotNull Project project, Editor editor, PsiFile file ) throws IncorrectOperationException { - JetNamedFunction member = getTarget(editor, file); + JetCallableDeclaration member = getTarget(editor, file); assert member != null : "Must be checked by isAvailable"; BindingContext bindingContext = KotlinCacheManagerUtil.getDeclarationsBindingContext(member); - SimpleFunctionDescriptor memberDescriptor = bindingContext.get(BindingContext.FUNCTION, member); - + DeclarationDescriptor memberDescriptor = bindingContext.get(DECLARATION_TO_DESCRIPTOR, member); if (memberDescriptor == null) return; - assert memberDescriptor.getReceiverParameter() == null : "Must have checked that there's no receiver earlier\n" + - "Descriptor: " + memberDescriptor + "\n" + - "Declaration: " + member.getText(); DeclarationDescriptor containingClass = memberDescriptor.getContainingDeclaration(); assert containingClass instanceof ClassDescriptor : "Members must be contained in classes: \n" + @@ -98,23 +104,47 @@ public class ConvertMemberToExtension extends BaseIntentionAction { JetParameterList valueParameterList = member.getValueParameterList(); JetTypeReference returnTypeRef = member.getReturnTypeRef(); - String receiverAndTheRest = receiver + - name + - (valueParameterList == null ? "" : valueParameterList.getText()) + - (returnTypeRef != null ? ": " + returnTypeRef.getText() : "") + - textOfBody(member); - String extensionText = modifiers(member) + "fun " + typeParameters(member) + receiverAndTheRest; + String extensionText = modifiers(member) + + memberType(member) + " " + + typeParameters(member) + + receiver + + name + + (valueParameterList == null ? "" : valueParameterList.getText()) + + (returnTypeRef != null ? ": " + returnTypeRef.getText() : "") + + body(member); - JetNamedFunction extension = JetPsiFactory.createFunction(project, extensionText); + JetDeclaration extension = JetPsiFactory.createDeclaration(project, extensionText, JetDeclaration.class); - file.addAfter(extension, outermostParent); + PsiElement added = file.addAfter(extension, outermostParent); file.addAfter(JetPsiFactory.createNewLine(project), outermostParent); file.addAfter(JetPsiFactory.createNewLine(project), outermostParent); member.delete(); + + CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(added); + + int caretAnchor = added.getText().indexOf(CARET_ANCHOR); + if (caretAnchor >= 0) { + int caretOffset = added.getTextRange().getStartOffset() + caretAnchor; + JetSimpleNameExpression anchor = PsiTreeUtil.findElementOfClassAtOffset(file, caretOffset, JetSimpleNameExpression.class, false); + if (anchor != null && CARET_ANCHOR.equals(anchor.getReferencedName())) { + JetExpression throwException = JetPsiFactory.createExpression(project, THROW_UNSUPPORTED_OPERATION_EXCEPTION); + PsiElement replaced = anchor.replace(throwException); + TextRange range = replaced.getTextRange(); + editor.getCaretModel().moveToOffset(range.getStartOffset()); + editor.getSelectionModel().setSelection(range.getStartOffset(), range.getEndOffset()); + } + } } - private static String modifiers(JetNamedFunction member) { + private static String memberType(JetCallableDeclaration member) { + if (member instanceof JetFunction) { + return "fun"; + } + return ((JetProperty) member).getValOrVarNode().getText(); + } + + private static String modifiers(JetCallableDeclaration member) { JetModifierList modifierList = member.getModifierList(); if (modifierList == null) return ""; for (IElementType modifierType : JetTokens.VISIBILITY_MODIFIERS.getTypes()) { @@ -126,7 +156,7 @@ public class ConvertMemberToExtension extends BaseIntentionAction { return ""; } - private static String typeParameters(JetNamedFunction member) { + private static String typeParameters(JetCallableDeclaration member) { PsiElement classElement = member.getParent().getParent(); assert classElement instanceof JetClass : "Must be checked in isAvailable: " + classElement.getText(); @@ -142,11 +172,37 @@ public class ConvertMemberToExtension extends BaseIntentionAction { }, ", ") + "> "; } - private static String textOfBody(JetNamedFunction member) { - JetExpression bodyExpression = member.getBodyExpression(); - if (bodyExpression == null) return "{}"; - if (!member.hasBlockBody()) return " = " + bodyExpression.getText(); - return bodyExpression.getText(); + private static String body(JetCallableDeclaration member) { + if (member instanceof JetProperty) { + JetProperty property = (JetProperty) member; + return "\n" + getter(property) + "\n" + setter(property, !synthesizeBody(property.getGetter())); + } + else if (member instanceof JetFunction) { + JetFunction function = (JetFunction) member; + JetExpression bodyExpression = function.getBodyExpression(); + if (bodyExpression == null) return "{" + CARET_ANCHOR + "}"; + if (!function.hasBlockBody()) return " = " + bodyExpression.getText(); + return bodyExpression.getText(); + } + else { + return ""; + } } + private static String getter(JetProperty property) { + JetPropertyAccessor getter = property.getGetter(); + if (synthesizeBody(getter)) return "get() = " + CARET_ANCHOR; + return getter.getText(); + } + + private static String setter(JetProperty property, boolean allowCaretAnchor) { + if (!property.isVar()) return ""; + JetPropertyAccessor setter = property.getSetter(); + if (synthesizeBody(setter)) return "set(value) {" + (allowCaretAnchor ? CARET_ANCHOR : THROW_UNSUPPORTED_OPERATION_EXCEPTION) + "}"; + return setter.getText(); + } + + private static boolean synthesizeBody(@Nullable JetPropertyAccessor getter) { + return getter == null || getter.getBodyExpression() == null; + } } diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/abstract.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/abstract.kt.after index 8868458bece..74ba2453d04 100644 --- a/idea/testData/intentions/declarations/convertMemberToExtension/abstract.kt.after +++ b/idea/testData/intentions/declarations/convertMemberToExtension/abstract.kt.after @@ -2,4 +2,5 @@ abstract class Owner { } fun Owner.f() { + throw UnsupportedOperationException() } \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt b/idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt new file mode 100644 index 00000000000..e560a76ba90 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt @@ -0,0 +1,3 @@ +abstract class Owner { + abstract val p: Int +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt.after new file mode 100644 index 00000000000..fd7162de92b --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt.after @@ -0,0 +1,5 @@ +abstract class Owner { +} + +val Owner.p: Int + get() = throw UnsupportedOperationException() \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt b/idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt new file mode 100644 index 00000000000..d6ae0749fe8 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt @@ -0,0 +1,3 @@ +class Owner { + fun () {} +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt.after new file mode 100644 index 00000000000..59e92e72377 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt.after @@ -0,0 +1,5 @@ +class Owner { +} + +fun Owner.() { +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt b/idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt new file mode 100644 index 00000000000..a29cb0cbb48 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt @@ -0,0 +1,3 @@ +class Owner { + val p: R +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt.after new file mode 100644 index 00000000000..0ead7010e46 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt.after @@ -0,0 +1,5 @@ +class Owner { +} + +val Owner.p: R + get() = throw UnsupportedOperationException() \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt new file mode 100644 index 00000000000..bf495ea7614 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt @@ -0,0 +1,4 @@ +class Owner { + val p: Int + get +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt.after new file mode 100644 index 00000000000..1b6c5228c91 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt.after @@ -0,0 +1,5 @@ +class Owner { +} + +val Owner.p: Int + get() = throw UnsupportedOperationException() \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt new file mode 100644 index 00000000000..bb67526f4ed --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt @@ -0,0 +1,4 @@ +class Owner { + val p: Int + get() = 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt.after new file mode 100644 index 00000000000..d0fc5b137c8 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt.after @@ -0,0 +1,5 @@ +class Owner { +} + +val Owner.p: Int + get() = 1 \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt new file mode 100644 index 00000000000..cb4b4c3b9b9 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt @@ -0,0 +1,4 @@ +class Owner { + val p: Int + get() { return 1} +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt.after new file mode 100644 index 00000000000..275d011bde3 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt.after @@ -0,0 +1,7 @@ +class Owner { +} + +val Owner.p: Int + get() { + return 1 + } \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt new file mode 100644 index 00000000000..6b308034a01 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt @@ -0,0 +1,5 @@ +class Owner { + var p: Int + get + set +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt.after new file mode 100644 index 00000000000..3e72abd4aa2 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt.after @@ -0,0 +1,8 @@ +class Owner { +} + +var Owner.p: Int + get() = throw UnsupportedOperationException() + set(value) { + throw UnsupportedOperationException() + } \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt new file mode 100644 index 00000000000..367251dc94d --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt @@ -0,0 +1,5 @@ +class Owner { + var p: Int + get() = 1 + set +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt.after new file mode 100644 index 00000000000..0e4d58843c1 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt.after @@ -0,0 +1,8 @@ +class Owner { +} + +var Owner.p: Int + get() = 1 + set(value) { + throw UnsupportedOperationException() + } \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt new file mode 100644 index 00000000000..1428fed8783 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt @@ -0,0 +1,4 @@ +class Owner { + var p: Int + get {return 1} +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt.after new file mode 100644 index 00000000000..86d2ba8877f --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt.after @@ -0,0 +1,10 @@ +class Owner { +} + +var Owner.p: Int + get { + return 1 + } + set(value) { + throw UnsupportedOperationException() + } \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt new file mode 100644 index 00000000000..220df0d200c --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt @@ -0,0 +1,5 @@ +class Owner { + var p: Int + get() = 1 + set(v) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt.after new file mode 100644 index 00000000000..e627a520bd8 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt.after @@ -0,0 +1,7 @@ +class Owner { +} + +var Owner.p: Int + get() = 1 + set(v) { + } \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt b/idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt new file mode 100644 index 00000000000..db97b7a64b0 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt @@ -0,0 +1,4 @@ +class Owner { + var p: Int + set(v) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt.after b/idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt.after new file mode 100644 index 00000000000..3b9e8388335 --- /dev/null +++ b/idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt.after @@ -0,0 +1,7 @@ +class Owner { +} + +var Owner.p: Int + get() = throw UnsupportedOperationException() + set(v) { + } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java index d84a31d84c4..60c0a9116ea 100644 --- a/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/intentions/CodeTransformationsTestGenerated.java @@ -798,6 +798,11 @@ public class CodeTransformationsTestGenerated extends AbstractCodeTransformation doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/abstract.kt"); } + @TestMetadata("abstractProperty.kt") + public void testAbstractProperty() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/abstractProperty.kt"); + } + public void testAllFilesPresentInConvertMemberToExtension() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/intentions/declarations/convertMemberToExtension"), Pattern.compile("^(.+)\\.kt$"), true); } @@ -812,6 +817,11 @@ public class CodeTransformationsTestGenerated extends AbstractCodeTransformation doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/extension.kt"); } + @TestMetadata("funcitonNoName.kt") + public void testFuncitonNoName() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/funcitonNoName.kt"); + } + @TestMetadata("functionType.kt") public void testFunctionType() throws Exception { doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/functionType.kt"); @@ -842,6 +852,11 @@ public class CodeTransformationsTestGenerated extends AbstractCodeTransformation doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/genericFunParamAfterName.kt"); } + @TestMetadata("genericProperty.kt") + public void testGenericProperty() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/genericProperty.kt"); + } + @TestMetadata("inFunctionBody.kt") public void testInFunctionBody() throws Exception { doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/inFunctionBody.kt"); @@ -912,6 +927,46 @@ public class CodeTransformationsTestGenerated extends AbstractCodeTransformation doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/unknownType.kt"); } + @TestMetadata("valWithDefaultGetter.kt") + public void testValWithDefaultGetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/valWithDefaultGetter.kt"); + } + + @TestMetadata("valWithGetter.kt") + public void testValWithGetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/valWithGetter.kt"); + } + + @TestMetadata("valWithGetterBlockBody.kt") + public void testValWithGetterBlockBody() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/valWithGetterBlockBody.kt"); + } + + @TestMetadata("varWithDefaultGetterAndSetter.kt") + public void testVarWithDefaultGetterAndSetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultGetterAndSetter.kt"); + } + + @TestMetadata("varWithDefaultSetter.kt") + public void testVarWithDefaultSetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/varWithDefaultSetter.kt"); + } + + @TestMetadata("varWithGetter.kt") + public void testVarWithGetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/varWithGetter.kt"); + } + + @TestMetadata("varWithGetterAndSetter.kt") + public void testVarWithGetterAndSetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/varWithGetterAndSetter.kt"); + } + + @TestMetadata("varWithSetter.kt") + public void testVarWithSetter() throws Exception { + doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/varWithSetter.kt"); + } + @TestMetadata("withType.kt") public void testWithType() throws Exception { doTestConvertMemberToExtension("idea/testData/intentions/declarations/convertMemberToExtension/withType.kt");