This commit is contained in:
Valentin Kipyatkov
2015-08-19 21:04:39 +03:00
parent ba33c834c1
commit 14763a7ffa
9 changed files with 44 additions and 44 deletions
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.idea.completion.*
import org.jetbrains.kotlin.idea.completion.handlers.KotlinFunctionInsertHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler
import org.jetbrains.kotlin.idea.core.psiClassToDescriptor
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
@@ -170,7 +170,7 @@ class TypeInstantiationItems(
shortenReferences(context, startOffset, startOffset + text.length())
ImplementMethodsHandler().invoke(context.getProject(), editor, context.getFile(), true)
ImplementMembersHandler().invoke(context.getProject(), editor, context.getFile(), true)
}
lookupElement = lookupElement.suppressAutoInsertion()
lookupElement = lookupElement.assignSmartCompletionPriority(SmartCompletionItemPriority.ANONYMOUS_OBJECT)
@@ -24,15 +24,15 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.JetBundle
import org.jetbrains.kotlin.resolve.OverrideResolver
public class ImplementMethodsHandler : OverrideImplementMethodsHandler(), IntentionAction {
override fun collectMethodsToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
public class ImplementMembersHandler : OverrideImplementMembersHandler(), IntentionAction {
override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
return OverrideResolver.getMissingImplementations(descriptor)
.map { OverrideMemberChooserObject.create(project, it, it) }
}
override fun getChooserTitle() = "Implement Members"
override fun getNoMethodsFoundHint() = "No methods to implement have been found"
override fun getNoMembersFoundHint() = "No members to implement have been found"
override fun getText() = JetBundle.message("implement.members")
override fun getFamilyName() = JetBundle.message("implement.members")
@@ -37,14 +37,14 @@ import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.renderer.*
import java.util.ArrayList
public abstract class OverrideImplementMethodsHandler : LanguageCodeInsightActionHandler {
public abstract class OverrideImplementMembersHandler : LanguageCodeInsightActionHandler {
public fun collectMethodsToGenerate(classOrObject: JetClassOrObject): Collection<OverrideMemberChooserObject> {
public fun collectMembersToGenerate(classOrObject: JetClassOrObject): Collection<OverrideMemberChooserObject> {
val descriptor = classOrObject.resolveToDescriptor() as? ClassDescriptor ?: return emptySet()
return collectMethodsToGenerate(descriptor, classOrObject.project)
return collectMembersToGenerate(descriptor, classOrObject.project)
}
protected abstract fun collectMethodsToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject>
protected abstract fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject>
private fun showOverrideImplementChooser(project: Project, members: Array<OverrideMemberChooserObject>): MemberChooser<OverrideMemberChooserObject>? {
val chooser = MemberChooser(members, true, true, project)
@@ -63,15 +63,15 @@ public abstract class OverrideImplementMethodsHandler : LanguageCodeInsightActio
return classOrObject != null
}
protected abstract fun getNoMethodsFoundHint(): String
protected abstract fun getNoMembersFoundHint(): String
public fun invoke(project: Project, editor: Editor, file: PsiFile, implementAll: Boolean) {
val elementAtCaret = file.findElementAt(editor.caretModel.offset)
val classOrObject = elementAtCaret?.getNonStrictParentOfType<JetClassOrObject>()!!
val members = collectMethodsToGenerate(classOrObject)
val members = collectMembersToGenerate(classOrObject)
if (members.isEmpty() && !implementAll) {
HintManager.getInstance().showErrorHint(editor, getNoMethodsFoundHint())
HintManager.getInstance().showErrorHint(editor, getNoMembersFoundHint())
return
}
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.descriptors.*
import java.util.ArrayList
import java.util.LinkedHashMap
public class OverrideMethodsHandler : OverrideImplementMethodsHandler() {
override fun collectMethodsToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
public class OverrideMembersHandler : OverrideImplementMembersHandler() {
override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection<OverrideMemberChooserObject> {
val result = ArrayList<OverrideMemberChooserObject>()
for (member in descriptor.unsubstitutedMemberScope.getAllDescriptors()) {
if (member is CallableMemberDescriptor
@@ -74,5 +74,5 @@ public class OverrideMethodsHandler : OverrideImplementMethodsHandler() {
override fun getChooserTitle() = "Override Members"
override fun getNoMethodsFoundHint() = "No methods to override have been found"
override fun getNoMembersFoundHint() = "No members to override have been found"
}
+2 -2
View File
@@ -447,8 +447,8 @@
<debugger.syntheticProvider implementation="org.jetbrains.kotlin.idea.debugger.filter.KotlinSyntheticTypeComponentProvider"/>
<debugger.javaBreakpointHandlerFactory implementation="org.jetbrains.kotlin.idea.debugger.breakpoints.KotlinBreakpointHandlerFactory"/>
<codeInsight.implementMethod language="jet" implementationClass="org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler"/>
<codeInsight.overrideMethod language="jet" implementationClass="org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMethodsHandler"/>
<codeInsight.implementMethod language="jet" implementationClass="org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler"/>
<codeInsight.overrideMethod language="jet" implementationClass="org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler"/>
<framework.type implementation="org.jetbrains.kotlin.idea.framework.JavaFrameworkType"/>
<framework.type implementation="org.jetbrains.kotlin.idea.framework.JSFrameworkType"/>
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind;
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler;
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler;
import org.jetbrains.kotlin.psi.JetReferenceExpression;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
@@ -89,7 +89,7 @@ class AnonymousTemplateEditingListener extends TemplateEditingAdapter {
}
}
new ImplementMethodsHandler().invoke(psiFile.getProject(), editor, psiFile, true);
new ImplementMembersHandler().invoke(psiFile.getProject(), editor, psiFile, true);
}
}
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.diagnostics.Errors.*
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler
import org.jetbrains.kotlin.idea.inspections.AddReflectionQuickFix
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable.*
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.CreateClassFromCallWithConstructorCalleeActionFactory
@@ -144,7 +144,7 @@ public class QuickFixRegistrar : QuickFixContributor {
USELESS_NULLABLE_CHECK.registerFactory(RemoveNullableFix.createFactory(RemoveNullableFix.NullableKind.USELESS))
val implementMethodsHandler = ImplementMethodsHandler()
val implementMethodsHandler = ImplementMembersHandler()
ABSTRACT_MEMBER_NOT_IMPLEMENTED.registerActions(implementMethodsHandler)
MANY_IMPL_MEMBER_NOT_IMPLEMENTED.registerActions(implementMethodsHandler)
@@ -28,10 +28,10 @@ import com.intellij.psi.util.PsiTreeUtil
import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.util.SmartList
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMethodsHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideImplementMethodsHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideImplementMembersHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMethodsHandler
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler
import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
@@ -47,31 +47,31 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
override fun getProjectDescriptor(): LightProjectDescriptor = JetLightProjectDescriptor.INSTANCE
protected fun doImplementFileTest() {
doFileTest(ImplementMethodsHandler())
doFileTest(ImplementMembersHandler())
}
protected fun doOverrideFileTest() {
doFileTest(OverrideMethodsHandler())
doFileTest(OverrideMembersHandler())
}
protected fun doMultiImplementFileTest() {
doMultiFileTest(ImplementMethodsHandler())
doMultiFileTest(ImplementMembersHandler())
}
protected fun doMultiOverrideFileTest() {
doMultiFileTest(OverrideMethodsHandler())
doMultiFileTest(OverrideMembersHandler())
}
protected fun doImplementDirectoryTest() {
doDirectoryTest(ImplementMethodsHandler())
doDirectoryTest(ImplementMembersHandler())
}
protected fun doOverrideDirectoryTest(memberToImplement: String?) {
doDirectoryTest(OverrideMethodsHandler(), memberToImplement)
doDirectoryTest(OverrideMembersHandler(), memberToImplement)
}
protected fun doMultiOverrideDirectoryTest() {
doMultiDirectoryTest(OverrideMethodsHandler())
doMultiDirectoryTest(OverrideMembersHandler())
}
protected fun doImplementJavaDirectoryTest(className: String, methodName: String) {
@@ -91,42 +91,42 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
myFixture.checkResultByFile(getTestName(true) + "/foo/JavaClass.java.after")
}
private fun doFileTest(handler: OverrideImplementMethodsHandler) {
private fun doFileTest(handler: OverrideImplementMembersHandler) {
myFixture.configureByFile(getTestName(true) + ".kt")
doOverrideImplement(handler, null)
checkResultByFile(getTestName(true) + ".kt.after")
}
private fun doMultiFileTest(handler: OverrideImplementMethodsHandler) {
private fun doMultiFileTest(handler: OverrideImplementMembersHandler) {
myFixture.configureByFile(getTestName(true) + ".kt")
doMultiOverrideImplement(handler)
checkResultByFile(getTestName(true) + ".kt.after")
}
protected fun doDirectoryTest(handler: OverrideImplementMethodsHandler) {
protected fun doDirectoryTest(handler: OverrideImplementMembersHandler) {
doDirectoryTest(handler, null)
}
private fun doDirectoryTest(handler: OverrideImplementMethodsHandler, memberToOverride: String?) {
private fun doDirectoryTest(handler: OverrideImplementMembersHandler, memberToOverride: String?) {
myFixture.copyDirectoryToProject(getTestName(true), "")
myFixture.configureFromTempProjectFile("foo/Impl.kt")
doOverrideImplement(handler, memberToOverride)
checkResultByFile(getTestName(true) + "/foo/Impl.kt.after")
}
private fun doMultiDirectoryTest(handler: OverrideImplementMethodsHandler) {
private fun doMultiDirectoryTest(handler: OverrideImplementMembersHandler) {
myFixture.copyDirectoryToProject(getTestName(true), "")
myFixture.configureFromTempProjectFile("foo/Impl.kt")
doMultiOverrideImplement(handler)
checkResultByFile(getTestName(true) + "/foo/Impl.kt.after")
}
private fun doOverrideImplement(handler: OverrideImplementMethodsHandler, memberToOverride: String?) {
private fun doOverrideImplement(handler: OverrideImplementMembersHandler, memberToOverride: String?) {
val elementAtCaret = myFixture.file.findElementAt(myFixture.editor.caretModel.offset)
val classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, javaClass<JetClassOrObject>())
?: error("Caret should be inside class or object")
val chooserObjects = handler.collectMethodsToGenerate(classOrObject)
val chooserObjects = handler.collectMembersToGenerate(classOrObject)
val singleToOverride = if (memberToOverride == null) {
val filtered = chooserObjects.filter { it.descriptor.containingDeclaration != KotlinBuiltIns.getInstance().any }
@@ -152,12 +152,12 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
performGenerateCommand(classOrObject, listOf(singleToOverride))
}
private fun doMultiOverrideImplement(handler: OverrideImplementMethodsHandler) {
private fun doMultiOverrideImplement(handler: OverrideImplementMembersHandler) {
val elementAtCaret = myFixture.file.findElementAt(myFixture.editor.caretModel.offset)
val classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, javaClass<JetClassOrObject>())
?: error("Caret should be inside class or object")
val chooserObjects = handler.collectMethodsToGenerate(classOrObject).sortBy { it.descriptor.name.asString() + " in " + it.immediateSuper.containingDeclaration.name.asString() }
val chooserObjects = handler.collectMembersToGenerate(classOrObject).sortBy { it.descriptor.name.asString() + " in " + it.immediateSuper.containingDeclaration.name.asString() }
performGenerateCommand(classOrObject, chooserObjects)
}
@@ -178,7 +178,7 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
selectedElements: List<OverrideMemberChooserObject>) {
try {
myFixture.project.executeWriteCommand("") {
OverrideImplementMethodsHandler.generateMethods(myFixture.editor, classOrObject, selectedElements)
OverrideImplementMembersHandler.generateMethods(myFixture.editor, classOrObject, selectedElements)
}
}
catch (throwable: Throwable) {
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.idea.codeInsight;
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMethodsHandler;
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler;
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
public final class OverrideImplementTest extends AbstractOverrideImplementTest {
@@ -180,11 +180,11 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest {
}
public void testSameTypeName() {
doDirectoryTest(new OverrideMethodsHandler());
doDirectoryTest(new OverrideMembersHandler());
}
public void testPropagationKJK() {
doDirectoryTest(new OverrideMethodsHandler());
doDirectoryTest(new OverrideMembersHandler());
}
public void testMultipleSupers() {