KotlinProjectViewUtil, KtClassOrObjectTreeNode: J2K
This commit is contained in:
@@ -14,71 +14,59 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.projectView;
|
package org.jetbrains.kotlin.idea.projectView
|
||||||
|
|
||||||
import com.intellij.ide.projectView.ViewSettings;
|
import com.intellij.ide.projectView.ViewSettings
|
||||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
import com.intellij.ide.util.treeView.AbstractTreeNode
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile;
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
import java.util.*
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
fun getClassOrObjectChildren(
|
||||||
import java.util.Collection;
|
classOrObject: KtClassOrObject?, project: Project?,
|
||||||
import java.util.Collections;
|
settings: ViewSettings): Collection<AbstractTreeNode<*>> {
|
||||||
import java.util.List;
|
if (classOrObject != null && settings.isShowMembers) {
|
||||||
|
val result = ArrayList<AbstractTreeNode<*>>()
|
||||||
public final class KotlinProjectViewUtil {
|
val declarations = classOrObject.declarations
|
||||||
|
for (declaration in declarations) {
|
||||||
private KotlinProjectViewUtil() {
|
if (declaration is KtClassOrObject) {
|
||||||
}
|
result.add(KtClassOrObjectTreeNode(project, declaration, settings))
|
||||||
|
|
||||||
public static Collection<AbstractTreeNode> getClassOrObjectChildren(
|
|
||||||
KtClassOrObject classOrObject, Project project,
|
|
||||||
ViewSettings settings) {
|
|
||||||
if (classOrObject != null && settings.isShowMembers()) {
|
|
||||||
Collection<AbstractTreeNode> result = new ArrayList<AbstractTreeNode>();
|
|
||||||
List<KtDeclaration> declarations = classOrObject.getDeclarations();
|
|
||||||
for (KtDeclaration declaration : declarations) {
|
|
||||||
if (declaration instanceof KtClassOrObject) {
|
|
||||||
result.add(new KtClassOrObjectTreeNode(project, (KtClassOrObject) declaration, settings));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result.add(new KtDeclarationTreeNode(project, declaration, settings));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
return result;
|
result.add(KtDeclarationTreeNode(project, declaration, settings))
|
||||||
}
|
|
||||||
else {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean canRepresentPsiElement(PsiElement value, Object element, ViewSettings settings) {
|
|
||||||
if (value == null || !value.isValid()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PsiFile file = value.getContainingFile();
|
|
||||||
if (file != null && (file == element || file.getVirtualFile() == element)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value == element) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!settings.isShowMembers()) {
|
|
||||||
if (element instanceof PsiElement && ((PsiElement) element).getContainingFile() != null) {
|
|
||||||
PsiFile elementFile = ((PsiElement) element).getContainingFile();
|
|
||||||
if (elementFile != null && file != null) {
|
|
||||||
return elementFile.equals(file);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return result
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun canRepresentPsiElement(value: PsiElement?, element: Any?, settings: ViewSettings): Boolean {
|
||||||
|
if (value == null || !value.isValid) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
val file = value.containingFile
|
||||||
|
if (file != null && (file === element || file.virtualFile === element)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value === element) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!settings.isShowMembers) {
|
||||||
|
if (element is PsiElement && element.containingFile != null) {
|
||||||
|
val elementFile = element.containingFile
|
||||||
|
if (elementFile != null && file != null) {
|
||||||
|
return elementFile == file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,82 +14,69 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.projectView;
|
package org.jetbrains.kotlin.idea.projectView
|
||||||
|
|
||||||
import com.intellij.ide.projectView.PresentationData;
|
import com.intellij.ide.projectView.PresentationData
|
||||||
import com.intellij.ide.projectView.ProjectView;
|
import com.intellij.ide.projectView.ProjectView
|
||||||
import com.intellij.ide.projectView.ViewSettings;
|
import com.intellij.ide.projectView.ViewSettings
|
||||||
import com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode;
|
import com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode
|
||||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
import com.intellij.ide.util.treeView.AbstractTreeNode
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.idea.KotlinIconProvider;
|
import org.jetbrains.kotlin.idea.KotlinIconProvider
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtPsiUtil;
|
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||||
|
|
||||||
import java.util.Collection;
|
class KtClassOrObjectTreeNode(project: Project?, ktClassOrObject: KtClassOrObject, viewSettings: ViewSettings)
|
||||||
|
: AbstractPsiBasedNode<KtClassOrObject>(project, ktClassOrObject, viewSettings) {
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.idea.projectView.KotlinProjectViewUtil.canRepresentPsiElement;
|
override fun extractPsiFromValue(): PsiElement? {
|
||||||
import static org.jetbrains.kotlin.idea.projectView.KotlinProjectViewUtil.getClassOrObjectChildren;
|
return value
|
||||||
|
|
||||||
public class KtClassOrObjectTreeNode extends AbstractPsiBasedNode<KtClassOrObject> {
|
|
||||||
protected KtClassOrObjectTreeNode(Project project, KtClassOrObject ktClassOrObject, ViewSettings viewSettings) {
|
|
||||||
super(project, ktClassOrObject, viewSettings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun getChildrenImpl(): Collection<AbstractTreeNode<*>>? {
|
||||||
protected PsiElement extractPsiFromValue() {
|
return getClassOrObjectChildren(value, project, settings)
|
||||||
return getValue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private fun update(node: AbstractTreeNode<*>) {
|
||||||
protected Collection<AbstractTreeNode> getChildrenImpl() {
|
val project = project
|
||||||
return getClassOrObjectChildren(getValue(), getProject(), getSettings());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void update(AbstractTreeNode node) {
|
|
||||||
Project project = getProject();
|
|
||||||
if (project != null) {
|
if (project != null) {
|
||||||
ProjectView.getInstance(project).getCurrentProjectViewPane().getTreeBuilder().addSubtreeToUpdateByElement(node);
|
ProjectView.getInstance(project).currentProjectViewPane.treeBuilder.addSubtreeToUpdateByElement(node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun updateImpl(data: PresentationData) {
|
||||||
protected void updateImpl(PresentationData data) {
|
val classOrObject = value
|
||||||
KtClassOrObject classOrObject = getValue();
|
|
||||||
if (classOrObject != null) {
|
if (classOrObject != null) {
|
||||||
data.setPresentableText(classOrObject.getName());
|
data.setPresentableText(classOrObject.name)
|
||||||
|
|
||||||
AbstractTreeNode parent = getParent();
|
val parent = parent
|
||||||
if (KotlinIconProvider.Companion.getMainClass(classOrObject.getContainingKtFile()) != null) {
|
if (KotlinIconProvider.getMainClass(classOrObject.getContainingKtFile()) != null) {
|
||||||
if (parent instanceof KtFileTreeNode) {
|
if (parent is KtFileTreeNode) {
|
||||||
update(parent.getParent());
|
update(parent.getParent())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!(parent instanceof KtClassOrObjectTreeNode) && !(parent instanceof KtFileTreeNode)) {
|
if (parent !is KtClassOrObjectTreeNode && parent !is KtFileTreeNode) {
|
||||||
update(parent);
|
update(parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun isDeprecated(): Boolean {
|
||||||
protected boolean isDeprecated() {
|
return KtPsiUtil.isDeprecated(value)
|
||||||
return KtPsiUtil.isDeprecated(getValue());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun canRepresent(element: Any?): Boolean {
|
||||||
public boolean canRepresent(Object element) {
|
if (!isValid) {
|
||||||
if (!isValid()) {
|
return false
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.canRepresent(element) || canRepresentPsiElement(getValue(), element, getSettings());
|
return super.canRepresent(element) || canRepresentPsiElement(value, element, settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun getWeight(): Int {
|
||||||
public int getWeight() {
|
return 20
|
||||||
return 20;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user