From 3adddf62b82ebeea028712eda64b918ab4b4db1f Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 28 Jul 2010 18:42:58 +0400 Subject: [PATCH] same directory proximity weigher for use in non-IDEA IDEs --- .../util/proximity/SameDirectoryWeigher.java | 48 +++++++++++++++++++ .../src/META-INF/PlatformLangPlugin.xml | 2 + 2 files changed, 50 insertions(+) create mode 100644 platform/lang-impl/src/com/intellij/psi/util/proximity/SameDirectoryWeigher.java diff --git a/platform/lang-impl/src/com/intellij/psi/util/proximity/SameDirectoryWeigher.java b/platform/lang-impl/src/com/intellij/psi/util/proximity/SameDirectoryWeigher.java new file mode 100644 index 000000000000..13df01e65c5a --- /dev/null +++ b/platform/lang-impl/src/com/intellij/psi/util/proximity/SameDirectoryWeigher.java @@ -0,0 +1,48 @@ +/* + * Copyright 2000-2010 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 com.intellij.psi.util.proximity; + +import com.intellij.openapi.util.NullableLazyKey; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; +import com.intellij.psi.util.ProximityLocation; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.NullableFunction; +import org.jetbrains.annotations.NotNull; + +/** + * NOTE: This class is only registered in platform-based IDEs. In IDEA, SamePackageWeigher is used instead. + * + * @author yole + */ +public class SameDirectoryWeigher extends ProximityWeigher { + private static final NullableLazyKey + PLACE_DIRECTORY = NullableLazyKey.create("placeDirectory", new NullableFunction() { + @Override + public PsiDirectory fun(ProximityLocation location) { + return PsiTreeUtil.getParentOfType(location.getPosition(), PsiDirectory.class, false); + } + }); + + public Comparable weigh(@NotNull final PsiElement element, final ProximityLocation location) { + final PsiDirectory placeDirectory = PLACE_DIRECTORY.getValue(location); + if (placeDirectory == null) { + return false; + } + + return placeDirectory.equals(PsiTreeUtil.getParentOfType(element, PsiDirectory.class, false)); + } +} diff --git a/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml b/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml index f8d8e74278dc..ec1066d133c7 100644 --- a/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml +++ b/platform/platform-resources/src/META-INF/PlatformLangPlugin.xml @@ -80,6 +80,8 @@ +