From d71217eb5cfc9e2b312bd4755d006b5934997ea3 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 29 Jul 2015 13:46:07 +0300 Subject: [PATCH] Pull Up: Rewrite some classes to Java to allow compilation against both Java 6 and Java 8 --- .../JetClassOrObjectListCellRenderer.java | 36 +++++++++++ .../memberInfo/KotlinPullUpDialogBase.java | 62 +++++++++++++++++++ ...tClassOrObjectCellRenderer.kt => Utils.kt} | 12 ---- .../refactoring/pullUp/KotlinPullUpDialog.kt | 17 +---- 4 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectListCellRenderer.java create mode 100644 idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinPullUpDialogBase.java rename idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/{JetClassOrObjectCellRenderer.kt => Utils.kt} (61%) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectListCellRenderer.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectListCellRenderer.java new file mode 100644 index 00000000000..7cc6acc6618 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectListCellRenderer.java @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2015 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.kotlin.idea.refactoring.memberInfo; + +import com.intellij.openapi.util.Iconable; +import com.intellij.ui.ListCellRendererWrapper; +import org.jetbrains.kotlin.psi.JetClassOrObject; + +import javax.swing.*; + +public class JetClassOrObjectListCellRenderer extends ListCellRendererWrapper { + @Override + public void customize(JList list, JetClassOrObject value, int index, boolean selected, boolean hasFocus) { + if (value == null) return; + + setText(MemberInfoPackage.qualifiedNameForRendering(value)); + Icon icon = value.getIcon(Iconable.ICON_FLAG_VISIBILITY | Iconable.ICON_FLAG_READ_STATUS); + if (icon != null) { + setIcon(icon); + } + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinPullUpDialogBase.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinPullUpDialogBase.java new file mode 100644 index 00000000000..55917cc002f --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinPullUpDialogBase.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2015 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.kotlin.idea.refactoring.memberInfo; + +import com.intellij.openapi.project.Project; +import com.intellij.refactoring.memberPullUp.PullUpDialogBase; +import com.intellij.refactoring.ui.AbstractMemberSelectionTable; +import org.jetbrains.kotlin.psi.JetClassOrObject; +import org.jetbrains.kotlin.psi.JetNamedDeclaration; + +import javax.swing.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.List; + +// TODO: This is workaround which allows KotlinPullUpDialog to be compiled against both Java 6 and 8 +public abstract class KotlinPullUpDialogBase extends + PullUpDialogBase { + protected KotlinPullUpDialogBase( + Project project, + JetClassOrObject object, + List superClasses, + KotlinMemberInfoStorage memberInfoStorage, + String title + ) { + super(project, object, superClasses, memberInfoStorage, title); + } + + @SuppressWarnings("unchecked") + @Override + protected void initClassCombo(JComboBox classCombo) { + classCombo.setRenderer(new JetClassOrObjectListCellRenderer()); + classCombo.addItemListener( + new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + if (myMemberSelectionPanel == null) return; + AbstractMemberSelectionTable table = myMemberSelectionPanel.getTable(); + if (table == null) return; + table.setMemberInfos(myMemberInfos); + table.fireExternalDataChange(); + } + } + } + ); + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectCellRenderer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/Utils.kt similarity index 61% rename from idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectCellRenderer.kt rename to idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/Utils.kt index e05ef9366dc..9b836c8c5bc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/JetClassOrObjectCellRenderer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/Utils.kt @@ -16,18 +16,6 @@ package org.jetbrains.kotlin.idea.refactoring.memberInfo -import com.intellij.openapi.util.Iconable -import com.intellij.ui.ListCellRendererWrapper import org.jetbrains.kotlin.psi.JetClassOrObject -import javax.swing.JList - -public class JetClassOrObjectCellRenderer: ListCellRendererWrapper() { - override fun customize(list: JList, value: JetClassOrObject?, index: Int, selected: Boolean, hasFocus: Boolean) { - if (value == null) return - - setText(value.qualifiedNameForRendering()) - value.getIcon(Iconable.ICON_FLAG_VISIBILITY or Iconable.ICON_FLAG_READ_STATUS)?.let { setIcon(it) } - } -} public fun JetClassOrObject.qualifiedNameForRendering(): String = getFqName()?.asString() ?: getName() ?: "[Anonymous]" \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt index 66849bbe3e7..8ac56ed0948 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt @@ -21,21 +21,18 @@ import com.intellij.openapi.ui.DialogWrapper import com.intellij.psi.PsiComment import com.intellij.refactoring.JavaRefactoringSettings import com.intellij.refactoring.classMembers.AbstractMemberInfoModel -import com.intellij.refactoring.memberPullUp.PullUpDialogBase import com.intellij.refactoring.memberPullUp.PullUpProcessor import com.intellij.refactoring.util.DocCommentPolicy import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.idea.refactoring.memberInfo.* import org.jetbrains.kotlin.psi.* -import java.awt.event.ItemEvent -import javax.swing.JComboBox public class KotlinPullUpDialog( project: Project, private val classOrObject: JetClassOrObject, superClasses: List, memberInfoStorage: KotlinMemberInfoStorage -) : PullUpDialogBase( +) : KotlinPullUpDialogBase( project, classOrObject, superClasses, memberInfoStorage, PULL_MEMBERS_UP ) { init { @@ -82,18 +79,6 @@ public class KotlinPullUpDialog( override fun getSuperClass() = super.getSuperClass() as? JetClass - override fun initClassCombo(classCombo: JComboBox) { - classCombo.setRenderer(JetClassOrObjectCellRenderer()) - classCombo.addItemListener { event -> - if (event.getStateChange() == ItemEvent.SELECTED) { - myMemberSelectionPanel?.getTable()?.let { - it.setMemberInfos(myMemberInfos) - it.fireExternalDataChange() - } - } - } - } - override fun createMemberInfoModel() = MemberInfoModelImpl() override fun getPreselection() = mySuperClasses.firstOrNull()