diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt index 5ac7f5161ca..c53281d01f1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/evaluate/ConstantExpressionEvaluator.kt @@ -32,8 +32,8 @@ import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument import org.jetbrains.jet.JetNodeTypes import java.math.BigInteger import org.jetbrains.jet.lang.diagnostics.Errors -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class ConstantExpressionEvaluator private (val trace: BindingTrace) : JetVisitor, JetType>() { @@ -257,7 +257,7 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet assert (name == "minus", "Only negation should be checked for overflow") if (receiver.value == result) { - trace.report(Errors.INTEGER_OVERFLOW.on(PsiTreeUtil.getParentOfType(callExpression, javaClass()) ?: callExpression)) + trace.report(Errors.INTEGER_OVERFLOW.on(callExpression.getStrictParentOfType() ?: callExpression)) } return result } @@ -282,7 +282,7 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet val resultInBigIntegers = checker(toBigInteger(receiver.value), toBigInteger(parameter.value)) if (toBigInteger(actualResult) != resultInBigIntegers) { - trace.report(Errors.INTEGER_OVERFLOW.on(PsiTreeUtil.getParentOfType(callExpression, javaClass()) ?: callExpression)) + trace.report(Errors.INTEGER_OVERFLOW.on(callExpression.getStrictParentOfType() ?: callExpression)) } return actualResult } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt index 38eb85f1414..93b35105160 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt @@ -50,7 +50,7 @@ public fun JetCallElement.getCallNameExpression(): JetSimpleNameExpression? { } } -public fun PsiElement.getParentByTypesAndPredicate( +public fun PsiElement.getParentOfTypesAndPredicate( strict : Boolean = false, vararg parentClasses : Class, predicate: (T) -> Boolean ) : T? { var element = if (strict) getParent() else this @@ -69,8 +69,20 @@ public fun PsiElement.getParentByTypesAndPredicate( return null } -public fun PsiElement.getParentByType(parentClass : Class, strict : Boolean = false) : T? { - return PsiTreeUtil.getParentOfType(this, parentClass, strict) +public fun PsiElement.getNonStrictParentOfType(parentClass : Class) : T? { + return PsiTreeUtil.getParentOfType(this, parentClass, false) +} + +inline public fun PsiElement.getParentOfType(strict: Boolean): T? { + return PsiTreeUtil.getParentOfType(this, javaClass(), strict) +} + +inline public fun PsiElement.getStrictParentOfType(): T? { + return PsiTreeUtil.getParentOfType(this, javaClass(), true) +} + +inline public fun PsiElement.getNonStrictParentOfType(): T? { + return PsiTreeUtil.getParentOfType(this, javaClass(), false) } public fun PsiElement?.isAncestor(element: PsiElement, strict: Boolean = false): Boolean { @@ -81,9 +93,8 @@ public fun T.getIfChildIsInBranch(element: PsiElement, branch: T return if (branch().isAncestor(element)) this else null } -public fun PsiElement.getParentByTypeAndBranch( - parentClass : Class, strict : Boolean = false, branch: T.() -> PsiElement?) : T? { - return getParentByType(parentClass, strict)?.getIfChildIsInBranch(this, branch) +inline public fun PsiElement.getParentOfTypeAndBranch(strict: Boolean = false, noinline branch: T.() -> PsiElement?) : T? { + return getParentOfType(strict)?.getIfChildIsInBranch(this, branch) } public fun JetClassOrObject.effectiveDeclarations(): List = @@ -192,7 +203,7 @@ public fun JetDeclaration.isOverridable(): Boolean { public fun PsiElement.isExtensionDeclaration(): Boolean { val callable: JetCallableDeclaration? = when (this) { is JetNamedFunction, is JetProperty -> this as JetCallableDeclaration - is JetPropertyAccessor -> getParentByType(javaClass()) + is JetPropertyAccessor -> getNonStrictParentOfType() else -> null } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt index 27c1e5dc3ed..9f030b06d0a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt @@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import org.jetbrains.jet.lang.resolve.BindingContext.LABEL_TARGET import org.jetbrains.jet.lang.resolve.BindingContext.FUNCTION import org.jetbrains.jet.lang.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetDeclarationWithBody import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor @@ -34,7 +34,7 @@ public fun JetReturnExpression.getTargetFunctionDescriptor(context: BindingConte val targetLabel = getTargetLabel() if (targetLabel != null) return context[LABEL_TARGET, targetLabel]?.let { context[FUNCTION, it] } - val declarationDescriptor = context[DECLARATION_TO_DESCRIPTOR, getParentByType(javaClass())] + val declarationDescriptor = context[DECLARATION_TO_DESCRIPTOR, getNonStrictParentOfType()] val containingFunctionDescriptor = DescriptorUtils.getParentOfType(declarationDescriptor, javaClass(), false) if (containingFunctionDescriptor == null) return null diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt index 558958e4596..63084f0adde 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightMethodForDeclaration.kt @@ -26,7 +26,7 @@ import com.intellij.psi.util.PsiModificationTracker import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValue import org.jetbrains.jet.lang.psi.JetPropertyAccessor -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.psi.JetClassOrObject import com.intellij.psi.impl.light.LightTypeParameterListBuilder @@ -56,7 +56,7 @@ open public class KotlinLightMethodForDeclaration( private val typeParamsList: CachedValue by Delegates.blockingLazy { val cacheManager = CachedValuesManager.getManager(delegate.getProject()) cacheManager.createCachedValue({ - val declaration = if (origin is JetPropertyAccessor) origin.getParentByType(javaClass()) else origin + val declaration = if (origin is JetPropertyAccessor) origin.getNonStrictParentOfType() else origin val list = if (origin is JetClassOrObject) { LightTypeParameterListBuilder(getManager(), getLanguage()) diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/lightClassUtils.kt b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/lightClassUtils.kt index a9e3cfac43e..feac9f0c731 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/lightClassUtils.kt +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/lightClassUtils.kt @@ -19,7 +19,7 @@ package org.jetbrains.jet.asJava import com.intellij.psi.* import org.jetbrains.jet.lang.psi.* import java.util.Collections -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import java.util.ArrayList import org.jetbrains.jet.lang.psi.psiUtil.isExtensionDeclaration import org.jetbrains.jet.utils.addToStdlib.singletonOrEmptyList @@ -64,7 +64,7 @@ public fun PsiElement.getRepresentativeLightMethod(): PsiMethod? = } public fun JetParameter.toPsiParameter(): PsiParameter? { - val paramList = getParentByType(javaClass()) + val paramList = getNonStrictParentOfType() if (paramList == null) return null val paramIndex = paramList.getParameters().indexOf(this) @@ -85,11 +85,11 @@ public fun JetParameter.toPsiParameter(): PsiParameter? { } public fun JetTypeParameter.toPsiTypeParameters(): List { - val paramList = getParentByType(javaClass()) + val paramList = getNonStrictParentOfType() if (paramList == null) return listOf() val paramIndex = paramList.getParameters().indexOf(this) - val jetDeclaration = paramList.getParentByType(javaClass()) ?: return listOf() + val jetDeclaration = paramList.getNonStrictParentOfType() ?: return listOf() val lightOwners = jetDeclaration.toLightElements() return lightOwners.map { lightOwner -> (lightOwner as PsiTypeParameterListOwner).getTypeParameters()[paramIndex] } @@ -100,4 +100,4 @@ public val PsiElement.unwrapped: PsiElement? get() = if (this is KotlinLightElement<*, *>) origin else this public val PsiElement.namedUnwrappedElement: PsiNamedElement? - get() = unwrapped?.getParentByType(javaClass()) \ No newline at end of file + get() = unwrapped?.getNonStrictParentOfType() \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt b/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt index 3dd485db0d5..0c148ac701d 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt +++ b/compiler/tests/org/jetbrains/jet/resolve/calls/AbstractResolvedCallsTest.kt @@ -33,13 +33,13 @@ import com.intellij.openapi.util.io.FileUtil import org.jetbrains.jet.lang.psi.ValueArgument import org.jetbrains.jet.lang.psi.JetPsiFactory import org.jetbrains.jet.lang.psi.JetExpression -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.resolve.calls.model.VariableAsFunctionResolvedCall import org.jetbrains.jet.lang.resolve.calls.callUtil.getParentResolvedCall import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public abstract class AbstractResolvedCallsTest() : JetLiteFixture() { override fun createEnvironment(): JetCoreEnvironment = createEnvironmentWithMockJdk(ConfigurationKind.ALL) @@ -51,7 +51,7 @@ public abstract class AbstractResolvedCallsTest() : JetLiteFixture() { val bindingContext = JvmResolveUtil.analyzeOneFileWithJavaIntegration(jetFile).bindingContext val element = jetFile.findElementAt(text.indexOf("")) - val expression = PsiTreeUtil.getParentOfType(element, javaClass()) + val expression = element.getStrictParentOfType() val cachedCall = expression?.getParentResolvedCall(bindingContext, strict = false) diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt index ebb1d6ac43d..a192776b112 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.ImportPath import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElement import org.jetbrains.jet.lang.resolve.descriptorUtil.getImportableDescriptor import org.jetbrains.jet.plugin.caches.resolve.ResolutionFacade +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public object ShortenReferences { public fun process(element: JetElement) { @@ -192,7 +193,7 @@ public object ShortenReferences { } if (target == null) return false - val typeReference = PsiTreeUtil.getParentOfType(userType, javaClass())!! + val typeReference = userType.getStrictParentOfType()!! val scope = resolutionFacade.analyze(typeReference)[BindingContext.TYPE_RESOLUTION_SCOPE, typeReference]!! val name = target.getName() val targetByName = scope.getClassifier(name) diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/findUsages/UsageTypeUtils.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/findUsages/UsageTypeUtils.kt index 00eabcb7ca2..c9c53599e7b 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/findUsages/UsageTypeUtils.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/findUsages/UsageTypeUtils.kt @@ -19,10 +19,9 @@ package org.jetbrains.jet.plugin.findUsages import com.intellij.psi.PsiElement import org.jetbrains.jet.lang.psi.JetForExpression import org.jetbrains.jet.lang.psi.JetMultiDeclaration -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetReferenceExpression import org.jetbrains.jet.lang.psi.JetImportDirective -import org.jetbrains.jet.lang.psi.psiUtil.getParentByTypeAndBranch import org.jetbrains.jet.lang.psi.JetCallableReferenceExpression import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.psi.psiUtil.isAncestor @@ -39,7 +38,7 @@ import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression import org.jetbrains.jet.lang.psi.JetSuperExpression import org.jetbrains.jet.lang.psi.JetDelegatorByExpressionSpecifier -import org.jetbrains.jet.lang.psi.psiUtil.getParentByTypesAndPredicate +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfTypesAndPredicate import org.jetbrains.jet.lang.psi.JetBinaryExpression import org.jetbrains.jet.lang.psi.JetPsiUtil import org.jetbrains.jet.lang.psi.JetSimpleNameExpression @@ -62,6 +61,7 @@ import com.intellij.psi.PsiPackage import org.jetbrains.jet.lang.descriptors.VariableDescriptor import org.jetbrains.jet.plugin.findUsages.UsageTypeEnum.* import org.jetbrains.jet.plugin.caches.resolve.analyze +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfTypeAndBranch public object UsageTypeUtils { public fun getUsageType(element: PsiElement?): UsageTypeEnum? { @@ -70,23 +70,23 @@ public object UsageTypeUtils { is JetMultiDeclaration -> return READ } - val refExpr = element?.getParentByType(javaClass()) + val refExpr = element?.getNonStrictParentOfType() if (refExpr == null) return null val context = refExpr.analyze() fun getCommonUsageType(): UsageTypeEnum? { return when { - refExpr.getParentByType(javaClass()) != null -> + refExpr.getNonStrictParentOfType() != null -> CLASS_IMPORT - refExpr.getParentByTypeAndBranch(javaClass()) { getCallableReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getCallableReference() } != null -> CALLABLE_REFERENCE else -> null } } fun getClassUsageType(): UsageTypeEnum? { - val property = refExpr.getParentByType(javaClass()) + val property = refExpr.getNonStrictParentOfType() if (property != null) { when { property.getTypeReference().isAncestor(refExpr) -> @@ -97,7 +97,7 @@ public object UsageTypeUtils { } } - val function = refExpr.getParentByType(javaClass()) + val function = refExpr.getNonStrictParentOfType() if (function != null) { when { function.getTypeReference().isAncestor(refExpr) -> @@ -108,42 +108,42 @@ public object UsageTypeUtils { } return when { - refExpr.getParentByTypeAndBranch(javaClass()) { getExtendsBound() } != null - || refExpr.getParentByTypeAndBranch(javaClass()) { getBoundTypeReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getExtendsBound() } != null + || refExpr.getParentOfTypeAndBranch(){ getBoundTypeReference() } != null -> TYPE_CONSTRAINT refExpr is JetDelegationSpecifier - || refExpr.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + || refExpr.getParentOfTypeAndBranch(){ getTypeReference() } != null -> SUPER_TYPE - refExpr.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getTypeReference() } != null -> TYPE_DEFINITION - refExpr.getParentByType(javaClass()) != null -> + refExpr.getNonStrictParentOfType() != null -> TYPE_PARAMETER - refExpr.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getTypeReference() } != null -> VALUE_PARAMETER_TYPE - refExpr.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getTypeReference() } != null -> IS - with(refExpr.getParentByTypeAndBranch(javaClass()) { getRight() }) { + with(refExpr.getParentOfTypeAndBranch(){ getRight() }) { val opType = this?.getOperationReference()?.getReferencedNameElementType() opType == JetTokens.AS_KEYWORD || opType == JetTokens.AS_SAFE } -> CLASS_CAST_TO - with(refExpr.getParentByType(javaClass())) { + with(refExpr.getNonStrictParentOfType()) { if (this == null) false else if (getReceiverExpression() == refExpr) true else getSelectorExpression() == refExpr - && getParentByTypeAndBranch(javaClass(), true) { getReceiverExpression() } != null + && getParentOfTypeAndBranch(strict = true) { getReceiverExpression() } != null } -> CLASS_OBJECT_ACCESS - refExpr.getParentByTypeAndBranch(javaClass()) { getSuperTypeQualifier() } != null -> + refExpr.getParentOfTypeAndBranch(){ getSuperTypeQualifier() } != null -> SUPER_TYPE_QUALIFIER else -> null @@ -151,11 +151,11 @@ public object UsageTypeUtils { } fun getVariableUsageType(): UsageTypeEnum? { - if (refExpr.getParentByTypeAndBranch(javaClass()) { getDelegateExpression() } != null) { + if (refExpr.getParentOfTypeAndBranch(){ getDelegateExpression() } != null) { return DELEGATE } - val dotQualifiedExpression = refExpr.getParentByType(javaClass()) + val dotQualifiedExpression = refExpr.getNonStrictParentOfType() if (dotQualifiedExpression != null) { val parent = dotQualifiedExpression.getParent() @@ -169,11 +169,11 @@ public object UsageTypeUtils { } return when { - (refExpr.getParentByTypesAndPredicate(false, javaClass()) { JetPsiUtil.isAssignment(it) }) + (refExpr.getParentOfTypesAndPredicate(false, javaClass()) { JetPsiUtil.isAssignment(it) }) ?.getLeft().isAncestor(refExpr) -> WRITE - refExpr.getParentByType(javaClass()) != null -> + refExpr.getNonStrictParentOfType() != null -> READ else -> null @@ -194,21 +194,21 @@ public object UsageTypeUtils { } return when { - refExpr.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getTypeReference() } != null -> SUPER_TYPE descriptor is ConstructorDescriptor - && refExpr.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + && refExpr.getParentOfTypeAndBranch(){ getTypeReference() } != null -> ANNOTATION - with(refExpr.getParentByTypeAndBranch(javaClass()) { getCalleeExpression() }) { + with(refExpr.getParentOfTypeAndBranch(){ getCalleeExpression() }) { this?.getCalleeExpression() is JetSimpleNameExpression } -> if (descriptor is ConstructorDescriptor) CLASS_NEW_OPERATOR else FUNCTION_CALL - refExpr.getParentByTypeAndBranch(javaClass()) { getOperationReference() } != null, - refExpr.getParentByTypeAndBranch(javaClass()) { getOperationReference() } != null, - refExpr.getParentByTypeAndBranch(javaClass()) { getOperationReference() } != null -> + refExpr.getParentOfTypeAndBranch(){ getOperationReference() } != null, + refExpr.getParentOfTypeAndBranch(){ getOperationReference() } != null, + refExpr.getParentOfTypeAndBranch(){ getOperationReference() } != null -> FUNCTION_CALL else -> null @@ -217,8 +217,8 @@ public object UsageTypeUtils { fun getPackageUsageType(): UsageTypeEnum? { return when { - refExpr.getParentByType(javaClass()) != null -> PACKAGE_DIRECTIVE - refExpr.getParentByType(javaClass()) != null -> PACKAGE_MEMBER_ACCESS + refExpr.getNonStrictParentOfType() != null -> PACKAGE_DIRECTIVE + refExpr.getNonStrictParentOfType() != null -> PACKAGE_MEMBER_ACCESS else -> getClassUsageType() } } diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt index 5ff1a7bcf07..4e4e40ee3b4 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/highlighter/KotlinSuppressableWarningProblemGroup.kt @@ -25,7 +25,7 @@ import org.jetbrains.jet.plugin.quickfix.KotlinSuppressIntentionAction import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.plugin.quickfix.AnnotationHostKind import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory -import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType class KotlinSuppressableWarningProblemGroup( private val diagnosticFactory: DiagnosticFactory<*> @@ -86,7 +86,7 @@ private object DeclarationKindDetector : JetVisitor( override fun visitClass(d: JetClass, _: Unit?) = detect(d, if (d.isTrait()) "trait" else "class") override fun visitClassObject(d: JetClassObject, _: Unit?) = detect(d, "class object", - name = "of " + PsiTreeUtil.getParentOfType(d, javaClass())?.getName()) + name = "of " + d.getStrictParentOfType()?.getName()) override fun visitNamedFunction(d: JetNamedFunction, _: Unit?) = detect(d, "fun") diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt index a3f266e1b17..96dacc53dab 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/intentions/JetSelfTargetingIntention.kt @@ -21,7 +21,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile import org.jetbrains.jet.lang.psi.JetElement import org.jetbrains.jet.plugin.JetBundle -import org.jetbrains.jet.lang.psi.psiUtil.getParentByTypesAndPredicate +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfTypesAndPredicate import com.intellij.codeInsight.intention.IntentionAction public abstract class JetSelfTargetingIntention(protected val key: String, val elementType: Class) : IntentionAction { @@ -37,7 +37,7 @@ public abstract class JetSelfTargetingIntention(protected val key protected fun getTarget(editor: Editor, file: PsiFile): T? { val offset = editor.getCaretModel().getOffset() - return file.findElementAt(offset)?.getParentByTypesAndPredicate(false, elementType) { element -> isApplicableTo(element, editor) } + return file.findElementAt(offset)?.getParentOfTypesAndPredicate(false, elementType) { element -> isApplicableTo(element, editor) } } public override fun getFamilyName(): String { diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetPropertyDelegationMethodsReference.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetPropertyDelegationMethodsReference.kt index ddb076b80e7..d60daa4986e 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetPropertyDelegationMethodsReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetPropertyDelegationMethodsReference.kt @@ -17,13 +17,13 @@ package org.jetbrains.jet.plugin.references import com.intellij.openapi.util.TextRange -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.descriptors.PropertyDescriptor import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.psi.JetPropertyDelegate import org.jetbrains.jet.lang.resolve.BindingContext import java.util.Collections +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class JetPropertyDelegationMethodsReference(element: JetPropertyDelegate) : JetMultiReference(element) { @@ -34,7 +34,7 @@ public class JetPropertyDelegationMethodsReference(element: JetPropertyDelegate) } override fun getTargetDescriptors(context: BindingContext): Collection { - val property = PsiTreeUtil.getParentOfType(expression, javaClass()) + val property = expression.getStrictParentOfType() if (property == null) { return Collections.emptyList() } diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt index 4e81dcc5d5a..f78bc6c1428 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.kt @@ -33,10 +33,10 @@ import org.jetbrains.jet.lexer.JetToken import org.jetbrains.jet.plugin.intentions.OperatorToFunctionIntention import org.jetbrains.jet.lang.resolve.BindingContext import com.intellij.util.IncorrectOperationException -import org.jetbrains.jet.lang.psi.psiUtil.getParentByTypeAndBranch import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.lang.resolve.dataClassUtils.isComponentLike import org.jetbrains.jet.plugin.caches.resolve.analyze +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfTypeAndBranch public class JetSimpleNameReference( jetSimpleNameExpression: JetSimpleNameExpression @@ -45,7 +45,7 @@ public class JetSimpleNameReference( override fun getRangeInElement(): TextRange = TextRange(0, getElement().getTextLength()) override fun canRename(): Boolean { - if (expression.getParentByTypeAndBranch(javaClass()) { getOperationReference() } != null) return false + if (expression.getParentOfTypeAndBranch(strict = true){ getOperationReference() } != null) return false val elementType = expression.getReferencedNameElementType() if (elementType == JetTokens.PLUSPLUS || elementType == JetTokens.MINUSMINUS) return false diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt index a93086bccf1..45b04d4fa82 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/references/referenceUtil.kt @@ -21,18 +21,19 @@ import com.intellij.psi.PsiElement import org.jetbrains.jet.asJava.unwrapped import com.intellij.psi.PsiMethod import org.jetbrains.jet.lang.psi.JetPropertyAccessor -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType import org.jetbrains.jet.lang.psi.JetProperty import java.util.HashSet import org.jetbrains.jet.lang.psi.JetExpression import org.jetbrains.jet.plugin.intentions.OperatorToFunctionIntention import org.jetbrains.jet.lang.psi.JetQualifiedExpression import org.jetbrains.jet.lang.psi.JetCallExpression -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetObjectDeclaration import org.jetbrains.jet.lang.psi.JetClass import com.intellij.psi.PsiPolyVariantReference import org.jetbrains.jet.utils.emptyOrSingletonList +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType // Navigation element of the resolved reference // For property accessor return enclosing property @@ -42,8 +43,8 @@ public val PsiReference.unwrappedTargets: Set fun PsiElement.adjust(): PsiElement? { val target = unwrapped return when { - target is JetPropertyAccessor -> target.getParentByType(javaClass()) - target is JetObjectDeclaration && target.isClassObject() -> target.getParentByType(javaClass()) + target is JetPropertyAccessor -> target.getNonStrictParentOfType() + target is JetObjectDeclaration && target.isClassObject() -> target.getNonStrictParentOfType() else -> target } } @@ -74,5 +75,5 @@ fun AbstractJetReference.renameImplicitConventionalCall(newNa val expr = OperatorToFunctionIntention.convert(expression) as JetQualifiedExpression val newCallee = (expr.getSelectorExpression() as JetCallExpression).getCalleeExpression()!!.getReference()!!.handleElementRename(newName) - return PsiTreeUtil.getParentOfType(newCallee, javaClass()) as JetExpression + return newCallee.getStrictParentOfType() as JetExpression } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/usagesSearch/utils.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/usagesSearch/utils.kt index 4c08f4e5734..d4ac11224e7 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/usagesSearch/utils.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/search/usagesSearch/utils.kt @@ -54,16 +54,16 @@ fun PsiReference.checkUsageVsOriginalDescriptor( } fun PsiReference.isImportUsage(): Boolean = - getElement()!!.getParentByType(javaClass()) != null + getElement()!!.getNonStrictParentOfType() != null fun PsiReference.isConstructorUsage(jetClassOrObject: JetClassOrObject): Boolean = with (getElement()!!) { fun getCallDescriptor(bindingContext: BindingContext): DeclarationDescriptor? { - val constructorCalleeExpression = getParentByType(javaClass()) + val constructorCalleeExpression = getNonStrictParentOfType() if (constructorCalleeExpression != null) { return bindingContext.get(BindingContext.REFERENCE_TARGET, constructorCalleeExpression.getConstructorReferenceExpression()) } - val callExpression = getParentByType(javaClass()) + val callExpression = getNonStrictParentOfType() if (callExpression != null) { val callee = callExpression.getCalleeExpression() if (callee is JetReferenceExpression) { @@ -75,7 +75,7 @@ fun PsiReference.isConstructorUsage(jetClassOrObject: JetClassOrObject): Boolean } fun checkJavaUsage(): Boolean { - val call = getParentByType(javaClass()) + val call = getNonStrictParentOfType() return call == getParent() && call?.resolveConstructor()?.getContainingClass()?.getNavigationElement() == jetClassOrObject } @@ -142,7 +142,7 @@ fun PsiReference.isPropertyReadOnlyUsage(): Boolean { if (refTarget is KotlinLightMethod) { val origin = refTarget.origin val declaration: JetNamedDeclaration? = when (origin) { - is JetPropertyAccessor -> origin.getParentByType(javaClass()) + is JetPropertyAccessor -> origin.getNonStrictParentOfType() is JetProperty, is JetParameter -> origin as JetNamedDeclaration else -> null } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt index 421080fdc62..dd8a8802aec 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -65,6 +65,7 @@ import org.jetbrains.jet.renderer.DescriptorRenderer import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType //NOTE: this class is based on CopyPasteReferenceProcessor and JavaCopyPasteReferenceProcessor public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor() { @@ -340,7 +341,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor()) + val typeReference = expression.getStrictParentOfType() LOG.assertTrue(typeReference != null, "JetUserType is expected to have parent of type JetTypeReference:\n" + "At: ${DiagnosticUtils.atLocation(expression)}\nFILE:\n${expression.getContainingFile()!!.getText()}") typeReference!!.replace(psiFactory.createType("$prefixToInsert.${typeReference.getText()}")) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java index 05ebf441e77..5b6317fc7b5 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java @@ -396,7 +396,7 @@ public class JetExpressionMover extends AbstractJetUpDownMover { @Nullable private static PsiElement getMovableElement(@NotNull PsiElement element, boolean lookRight) { //noinspection unchecked - PsiElement movableElement = PsiUtilPackage.getParentByTypesAndPredicate( + PsiElement movableElement = PsiUtilPackage.getParentOfTypesAndPredicate( element, false, MOVABLE_ELEMENT_CLASSES, diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt index 4c71320a762..653fb644928 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt @@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter import org.jetbrains.jet.lang.resolve.calls.smartcasts.SmartCastUtils import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo import org.jetbrains.jet.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType class CompletionSessionConfiguration( val completeNonImportedDeclarations: Boolean, @@ -202,12 +203,12 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, } private fun isOnlyKeywordCompletion() - = PsiTreeUtil.getParentOfType(position, javaClass()) != null + = position.getStrictParentOfType() != null private fun shouldRunOnlyTypeCompletion(): Boolean { // Check that completion in the type annotation context and if there's a qualified // expression we are at first of it - val typeReference = PsiTreeUtil.getParentOfType(position, javaClass()) + val typeReference = position.getStrictParentOfType() if (typeReference != null) { val firstPartReference = PsiTreeUtil.findChildOfType(typeReference, javaClass()) return firstPartReference == jetReference!!.expression diff --git a/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt index 02dd563b584..efeefb1fb00 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/KeywordCompletion.kt @@ -27,12 +27,12 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.psi.PsiErrorElement import org.jetbrains.jet.lexer.JetKeywordToken import com.intellij.openapi.project.Project -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType import org.jetbrains.jet.plugin.completion.handlers.KotlinKeywordInsertHandler import org.jetbrains.jet.lang.psi.psiUtil.siblings import org.jetbrains.jet.lexer.JetTokens.* import org.jetbrains.jet.lang.psi.psiUtil.prevLeafSkipWhitespacesAndComments +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType class KeywordLookupObject(val keyword: String) @@ -162,7 +162,7 @@ object KeywordCompletion { when { nodeType != keywordTokenType -> false - elementAt.getParentByType(javaClass(), strict = false) != null -> false + elementAt.getNonStrictParentOfType() != null -> false elementAt.prevLeafSkipWhitespacesAndComments() is PsiErrorElement -> false diff --git a/idea/src/org/jetbrains/jet/plugin/completion/KotlinCompletionContributor.kt b/idea/src/org/jetbrains/jet/plugin/completion/KotlinCompletionContributor.kt index 9587c921f67..50fd5f71789 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/KotlinCompletionContributor.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/KotlinCompletionContributor.kt @@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.psi.JetFunctionLiteral import org.jetbrains.jet.lang.psi.psiUtil.prevLeafSkipWhitespacesAndComments import org.jetbrains.jet.lang.psi.JetValueArgument import org.jetbrains.jet.lang.psi.JetValueArgumentList +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType public class KotlinCompletionContributor : CompletionContributor() { @@ -215,7 +216,7 @@ public class KotlinCompletionContributor : CompletionContributor() { // no completion in comments // TODO: this must be changed if we will have references in doc-comments - if (PsiTreeUtil.getParentOfType(position, javaClass(), false) != null) return true + if (position.getNonStrictParentOfType() != null) return true // no completion inside number literals if (AFTER_NUMBER_LITERAL.accepts(position)) return true diff --git a/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt index 37312e85d82..7ca03e1232b 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt @@ -18,7 +18,6 @@ package org.jetbrains.jet.plugin.completion import org.jetbrains.jet.lang.psi.JetValueArgument import org.jetbrains.jet.lexer.JetTokens -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetCallElement import org.jetbrains.jet.plugin.references.JetReference import org.jetbrains.jet.lang.descriptors.FunctionDescriptor @@ -40,6 +39,7 @@ import com.intellij.codeInsight.completion.InsertHandler import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers import org.jetbrains.jet.plugin.completion.handlers.WithTailInsertHandler +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType object NamedParametersCompletion { private val positionFilter = AndFilter( @@ -56,9 +56,9 @@ object NamedParametersCompletion { public fun isOnlyNamedParameterExpected(position: PsiElement): Boolean { if (!positionFilter.isAcceptable(position, position)) return false - val thisArgument = PsiTreeUtil.getParentOfType(position, javaClass())!! + val thisArgument = position.getStrictParentOfType()!! - val callElement = PsiTreeUtil.getParentOfType(thisArgument, javaClass()) ?: return false + val callElement = thisArgument.getStrictParentOfType() ?: return false for (argument in callElement.getValueArguments()) { if (argument == thisArgument) break @@ -71,9 +71,9 @@ object NamedParametersCompletion { public fun complete(position: PsiElement, collector: LookupElementsCollector) { if (!positionFilter.isAcceptable(position, position)) return - val valueArgument = PsiTreeUtil.getParentOfType(position, javaClass())!! + val valueArgument = position.getStrictParentOfType()!! - val callElement = PsiTreeUtil.getParentOfType(valueArgument, javaClass()) ?: return + val callElement = valueArgument.getStrictParentOfType() ?: return val callSimpleName = callElement.getCallNameExpression() ?: return val callReference = callSimpleName.getReference() as JetReference diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt index 57a5144948e..f2ee68b58bc 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt @@ -20,7 +20,6 @@ import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.completion.InsertionContext import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetImportDirective import com.intellij.codeInsight.AutoPopupController import com.intellij.psi.codeStyle.CodeStyleSettingsManager @@ -38,6 +37,7 @@ import org.jetbrains.jet.plugin.completion.DeclarationDescriptorLookupObject import org.jetbrains.jet.lang.descriptors.CallableDescriptor import org.jetbrains.jet.lang.psi.JetBinaryExpression import org.jetbrains.jet.lang.psi.JetSimpleNameExpression +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public abstract class KotlinCallableInsertHandler : BaseDeclarationInsertHandler() { public override fun handleInsert(context: InsertionContext, item: LookupElement) { @@ -60,7 +60,7 @@ public abstract class KotlinCallableInsertHandler : BaseDeclarationInsertHandler if (file is JetFile && o is DeclarationDescriptorLookupObject) { val descriptor = o.descriptor as? CallableDescriptor if (descriptor != null) { - if (PsiTreeUtil.getParentOfType(element, javaClass()) != null && + if (element.getStrictParentOfType() != null && descriptor.getExtensionReceiverParameter() == null) { return@runReadAction } @@ -103,7 +103,7 @@ public class KotlinFunctionInsertHandler(val caretPosition : CaretPosition, val val element = context.getFile().findElementAt(startOffset) ?: return when { - PsiTreeUtil.getParentOfType(element, javaClass()) != null -> return + element.getStrictParentOfType() != null -> return isInfixCall(element) -> { if (context.getCompletionChar() == ' ') { @@ -194,7 +194,7 @@ public class KotlinFunctionInsertHandler(val caretPosition : CaretPosition, val public val WITH_PARAMETERS_HANDLER: KotlinFunctionInsertHandler = KotlinFunctionInsertHandler(CaretPosition.IN_BRACKETS, null) private fun shouldAddBrackets(element : PsiElement) : Boolean { - return PsiTreeUtil.getParentOfType(element, javaClass()) == null + return element.getStrictParentOfType() == null } private fun indexOfSkippingSpace(document: Document, ch : Char, startIndex : Int) : Int { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinKeywordInsertHandler.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinKeywordInsertHandler.kt index 89ffe593d0c..0d5839ec198 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinKeywordInsertHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinKeywordInsertHandler.kt @@ -19,10 +19,10 @@ package org.jetbrains.jet.plugin.completion.handlers import com.intellij.codeInsight.completion.InsertHandler import com.intellij.codeInsight.completion.InsertionContext import com.intellij.codeInsight.lookup.LookupElement -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetFunction import org.jetbrains.jet.lang.psi.JetPsiUtil import org.jetbrains.jet.lexer.JetTokens +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public object KotlinKeywordInsertHandler : InsertHandler { private val NO_SPACE_AFTER = setOf(JetTokens.THIS_KEYWORD.toString(), @@ -46,7 +46,7 @@ public object KotlinKeywordInsertHandler : InsertHandler { if (keyword == JetTokens.RETURN_KEYWORD.toString()) { val element = context.getFile().findElementAt(context.getStartOffset()) if (element != null) { - val jetFunction = PsiTreeUtil.getParentOfType(element, javaClass()) + val jetFunction = element.getStrictParentOfType() if (jetFunction != null && (!jetFunction.hasDeclaredReturnType() || JetPsiUtil.isVoidType(jetFunction.getTypeReference()))) { // No space for void function return false diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/render/KotlinObjectRenderer.kt b/idea/src/org/jetbrains/jet/plugin/debugger/render/KotlinObjectRenderer.kt index f524a717c9d..0ef1c91790f 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/render/KotlinObjectRenderer.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/render/KotlinObjectRenderer.kt @@ -35,7 +35,6 @@ import com.intellij.debugger.settings.NodeRendererSettings import com.intellij.psi.PsiClass import com.intellij.psi.JavaPsiFacade import com.intellij.debugger.SourcePosition -import com.intellij.psi.util.PsiTreeUtil import com.intellij.debugger.impl.DebuggerContextUtil import com.intellij.psi.search.GlobalSearchScope import com.sun.jdi.AbsentInformationException @@ -46,6 +45,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName import com.sun.jdi.ReferenceType import org.jetbrains.jet.codegen.AsmUtil import org.jetbrains.jet.lang.psi.JetClassOrObject +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public open class KotlinObjectRenderer : ClassRenderer() { @@ -129,7 +129,7 @@ public class KotlinObjectFieldDescriptor( if (position != null) { val element = position.getElementAt() if (element != null) { - return PsiTreeUtil.getParentOfType(element, javaClass()) + return element.getStrictParentOfType() } } return null diff --git a/idea/src/org/jetbrains/jet/plugin/editor/KotlinSmartEnterHandler.kt b/idea/src/org/jetbrains/jet/plugin/editor/KotlinSmartEnterHandler.kt index 8ca5efbbfb7..43bb14dae1f 100644 --- a/idea/src/org/jetbrains/jet/plugin/editor/KotlinSmartEnterHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/editor/KotlinSmartEnterHandler.kt @@ -22,7 +22,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiFile import com.intellij.util.text.CharArrayUtil import com.intellij.psi.codeStyle.CodeStyleSettingsManager -import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace import org.jetbrains.jet.lang.psi.JetDeclaration @@ -37,6 +36,7 @@ import com.intellij.psi.tree.TokenSet import org.jetbrains.jet.JetNodeTypes import org.jetbrains.jet.lang.psi.JetLoopExpression import org.jetbrains.jet.lexer.JetTokens +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class KotlinSmartEnterHandler: SmartEnterProcessorWithFixers() { { @@ -106,7 +106,7 @@ public class KotlinSmartEnterHandler: SmartEnterProcessorWithFixers() { val settings = CodeStyleSettingsManager.getSettings(file.getProject()) val old = settings.KEEP_SIMPLE_BLOCKS_IN_ONE_LINE settings.KEEP_SIMPLE_BLOCKS_IN_ONE_LINE = false - val elt = PsiTreeUtil.getParentOfType(file.findElementAt(caretOffset - 1), javaClass()) + val elt = file.findElementAt(caretOffset - 1).getStrictParentOfType() if (elt != null) { reformat(elt) } diff --git a/idea/src/org/jetbrains/jet/plugin/editor/fixers/KotlinFunctionDeclarationBodyFixer.kt b/idea/src/org/jetbrains/jet/plugin/editor/fixers/KotlinFunctionDeclarationBodyFixer.kt index c6845d9c096..7de30099405 100644 --- a/idea/src/org/jetbrains/jet/plugin/editor/fixers/KotlinFunctionDeclarationBodyFixer.kt +++ b/idea/src/org/jetbrains/jet/plugin/editor/fixers/KotlinFunctionDeclarationBodyFixer.kt @@ -20,13 +20,13 @@ import com.intellij.lang.SmartEnterProcessorWithFixers import com.intellij.openapi.editor.Editor import org.jetbrains.jet.plugin.editor.KotlinSmartEnterHandler import com.intellij.psi.PsiElement -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetDeclaration import org.jetbrains.jet.lang.psi.JetFunction import org.jetbrains.jet.lang.psi.JetClassOrObject import org.jetbrains.jet.lang.psi.JetPsiUtil import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.lang.psi.JetNamedFunction +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class KotlinFunctionDeclarationBodyFixer : SmartEnterProcessorWithFixers.Fixer() { @@ -34,7 +34,7 @@ public class KotlinFunctionDeclarationBodyFixer : SmartEnterProcessorWithFixers. if (psiElement !is JetNamedFunction) return if (psiElement.getBodyExpression() != null|| psiElement.getEqualsToken() != null) return - val parentDeclaration = PsiTreeUtil.getParentOfType(psiElement, javaClass()) + val parentDeclaration = psiElement.getStrictParentOfType() if (parentDeclaration is JetClassOrObject) { if (JetPsiUtil.isTrait(parentDeclaration) || psiElement.hasModifier(JetTokens.ABSTRACT_KEYWORD)) { return diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetImportFilteringRule.kt b/idea/src/org/jetbrains/jet/plugin/findUsages/JetImportFilteringRule.kt index 00829012a6b..f091bee2f7b 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/JetImportFilteringRule.kt +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetImportFilteringRule.kt @@ -23,12 +23,12 @@ import com.intellij.usages.rules.ImportFilteringRule import com.intellij.usages.rules.PsiElementUsage import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.lang.psi.JetImportDirective -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType public class JetImportFilteringRule : ImportFilteringRule() { public override fun isVisible(usage: Usage): Boolean { if (usage is PsiElementUsage) { - return usage.getElement()?.getParentByType(javaClass()) == null + return usage.getElement()?.getNonStrictParentOfType() == null } return true diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java index 08f4c80ff52..9a48afbc313 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/HierarchyUtils.java @@ -70,11 +70,11 @@ public class HierarchyUtils { public static PsiElement getCallHierarchyElement(PsiElement element) { //noinspection unchecked - return PsiUtilPackage.getParentByTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_CALL_HIERARCHY_ELEMENT); + return PsiUtilPackage.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_CALL_HIERARCHY_ELEMENT); } public static PsiElement getOverrideHierarchyElement(PsiElement element) { //noinspection unchecked - return PsiUtilPackage.getParentByTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_OVERRIDE_HIERARCHY_ELEMENT); + return PsiUtilPackage.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_OVERRIDE_HIERARCHY_ELEMENT); } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallTreeStructure.java b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallTreeStructure.java index 8e23b023c74..81a5df3d7bb 100644 --- a/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallTreeStructure.java +++ b/idea/src/org/jetbrains/jet/plugin/hierarchy/calls/KotlinCallTreeStructure.java @@ -76,7 +76,7 @@ public abstract class KotlinCallTreeStructure extends HierarchyTreeStructure { @Nullable protected static PsiMethod getRepresentativePsiMethod(PsiElement element) { while (true) { - element = PsiUtilPackage.getParentByTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_NON_LOCAL_DECLARATION); + element = PsiUtilPackage.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_NON_LOCAL_DECLARATION); if (element == null) return null; PsiMethod method = getRepresentativePsiMethodForNonLocalDeclaration(element); diff --git a/idea/src/org/jetbrains/jet/plugin/imports/KotlinImportOptimizer.kt b/idea/src/org/jetbrains/jet/plugin/imports/KotlinImportOptimizer.kt index dee6b296c87..22b68f7c3ac 100644 --- a/idea/src/org/jetbrains/jet/plugin/imports/KotlinImportOptimizer.kt +++ b/idea/src/org/jetbrains/jet/plugin/imports/KotlinImportOptimizer.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.progress.ProgressIndicatorProvider import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.resolve.ImportPath import org.jetbrains.jet.lang.resolve.name.* @@ -29,6 +28,7 @@ import org.jetbrains.jet.plugin.references.JetReference import java.util.HashSet import java.util.ArrayList import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class KotlinImportOptimizer() : ImportOptimizer { @@ -80,8 +80,8 @@ public class KotlinImportOptimizer() : ImportOptimizer { } override fun visitJetElement(element: JetElement) { - if (PsiTreeUtil.getParentOfType(element, javaClass()) != null || - PsiTreeUtil.getParentOfType(element, javaClass()) != null) { + if (element.getStrictParentOfType() != null || + element.getStrictParentOfType() != null) { return } val reference = element.getReference() diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToBlockBodyAction.kt b/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToBlockBodyAction.kt index b541a2b61de..476ee510c7f 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToBlockBodyAction.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToBlockBodyAction.kt @@ -20,10 +20,10 @@ import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction import com.intellij.openapi.project.Project import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiElement -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.plugin.JetBundle import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() { override fun getFamilyName(): String = JetBundle.message("convert.to.block.body.action.family.name") @@ -76,7 +76,7 @@ public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() { } private fun findDeclaration(element: PsiElement): JetDeclarationWithBody? { - val declaration = PsiTreeUtil.getParentOfType(element, javaClass()) + val declaration = element.getStrictParentOfType() if (declaration == null || declaration is JetFunctionLiteral || declaration.hasBlockBody()) return null val body = declaration.getBodyExpression() if (body == null) return null diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToExpressionBodyAction.kt b/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToExpressionBodyAction.kt index 8deaba00b3b..118d22cfb5c 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToExpressionBodyAction.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/ConvertToExpressionBodyAction.kt @@ -20,7 +20,6 @@ import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction import com.intellij.openapi.project.Project import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiElement -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.plugin.JetBundle import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns @@ -28,6 +27,7 @@ import org.jetbrains.jet.lexer.JetTokens import com.intellij.openapi.util.TextRange import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility import org.jetbrains.jet.plugin.caches.resolve.resolveToDescriptor +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class ConvertToExpressionBodyAction : PsiElementBaseIntentionAction() { override fun getFamilyName(): String = JetBundle.message("convert.to.expression.body.action.family.name") @@ -70,7 +70,7 @@ public class ConvertToExpressionBodyAction : PsiElementBaseIntentionAction() { private data class Data(val declaration: JetDeclarationWithBody, val value: JetExpression) private fun calcData(element: PsiElement): Data? { - val declaration = PsiTreeUtil.getParentOfType(element, javaClass()) + val declaration = element.getStrictParentOfType() if (declaration == null || declaration is JetFunctionLiteral) return null val body = declaration.getBodyExpression() if (!declaration.hasBlockBody() || body !is JetBlockExpression) return null diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceItWithExplicitFunctionLiteralParamIntention.kt b/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceItWithExplicitFunctionLiteralParamIntention.kt index 6f999bc27fd..f3cbb4ce537 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceItWithExplicitFunctionLiteralParamIntention.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/ReplaceItWithExplicitFunctionLiteralParamIntention.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement -import com.intellij.psi.util.PsiTreeUtil import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler import org.jetbrains.jet.lang.psi.JetFunctionLiteralExpression import org.jetbrains.jet.lang.psi.JetPsiFactory @@ -33,10 +32,11 @@ import org.jetbrains.jet.lang.psi.JetFunctionLiteral import org.jetbrains.jet.plugin.references.JetReference import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils import org.jetbrains.jet.plugin.caches.resolve.analyze +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class ReplaceItWithExplicitFunctionLiteralParamIntention() : PsiElementBaseIntentionAction() { override fun invoke(project: Project, editor: Editor, element: PsiElement) { - val simpleNameExpression = PsiTreeUtil.getParentOfType(element, javaClass())!! + val simpleNameExpression = element.getStrictParentOfType()!! val simpleNameReference = simpleNameExpression.getReference() as JetReference? val target = simpleNameReference?.resolveToDescriptors()?.first()!! @@ -55,7 +55,7 @@ public class ReplaceItWithExplicitFunctionLiteralParamIntention() : PsiElementBa } override fun isAvailable(project: Project, editor: Editor, element: PsiElement): Boolean { - val simpleNameExpression = PsiTreeUtil.getParentOfType(element, javaClass()) + val simpleNameExpression = element.getStrictParentOfType() if (simpleNameExpression == null || !isAutoCreatedIt(simpleNameExpression)) { return false } diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/SplitIfIntention.kt b/idea/src/org/jetbrains/jet/plugin/intentions/SplitIfIntention.kt index 26597be3728..a2abcf3762a 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/SplitIfIntention.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/SplitIfIntention.kt @@ -21,7 +21,7 @@ import com.intellij.openapi.editor.Editor import org.jetbrains.jet.lang.psi.JetBinaryExpression import org.jetbrains.jet.lang.psi.JetPsiFactory import org.jetbrains.jet.lexer.JetTokens -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import org.jetbrains.jet.lang.psi.JetExpression @@ -52,7 +52,7 @@ public class SplitIfIntention : JetSelfTargetingIntention("split. else -> element as JetSimpleNameExpression } - val ifExpression = currentElement!!.getParentByType(javaClass()) + val ifExpression = currentElement!!.getNonStrictParentOfType() val expression = currentElement.getParent() as JetBinaryExpression val rightExpression = getRight(expression, ifExpression!!.getCondition() as JetExpression) val leftExpression = expression.getLeft() diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/templateExpressions.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/templateExpressions.kt index d040cd3dcf6..8d4da8f8c04 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/templateExpressions.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/templateExpressions.kt @@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.descriptors.ClassKind import org.jetbrains.jet.lang.psi.JetClass import org.jetbrains.jet.lang.psi.JetParameterList import org.jetbrains.jet.lang.psi.JetNamedDeclaration +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType /** * Special Expression for parameter names based on its type. @@ -61,7 +62,7 @@ private class ParameterNameExpression( } // add names based on selected type - val parameter = PsiTreeUtil.getParentOfType(elementAt, javaClass()) + val parameter = elementAt.getStrictParentOfType() if (parameter != null) { val parameterTypeRef = parameter.getTypeReference() if (parameterTypeRef != null) { @@ -138,7 +139,7 @@ private class TypeParameterListExpression(private val mandatoryTypeParameters: L val editor = context.getEditor()!! val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()) as JetFile val elementAt = file.findElementAt(offset) - val declaration = PsiTreeUtil.getParentOfType(elementAt, javaClass()) ?: return TextResult("") + val declaration = elementAt.getStrictParentOfType() ?: return TextResult("") val renderedTypeParameters = LinkedHashSet() renderedTypeParameters.addAll(mandatoryTypeParameters) diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt index ec7c7f388d4..bedf125100a 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt @@ -35,7 +35,7 @@ import kotlin.properties.Delegates import org.jetbrains.jet.lang.descriptors.PropertyDescriptor import org.jetbrains.jet.plugin.util.makeNotNullable import org.jetbrains.jet.lang.psi.JetAnnotationEntry -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType private fun JetType.contains(inner: JetType): Boolean { return JetTypeChecker.DEFAULT.equalTypes(this, inner) || getArguments().any { inner in it.getType() } @@ -95,7 +95,7 @@ fun JetExpression.guessTypes( if (coerceUnusedToUnit && this !is JetDeclaration && isUsedAsStatement(context) - && getParentByType(javaClass()) == null) return array(builtIns.getUnitType()) + && getNonStrictParentOfType() == null) return array(builtIns.getUnitType()) // if we know the actual type of the expression val theType1 = context[BindingContext.EXPRESSION_TYPE, this] diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromConstructorCallActionFactory.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromConstructorCallActionFactory.kt index 2b7eb1eaa07..9a1ab265a11 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromConstructorCallActionFactory.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromConstructorCallActionFactory.kt @@ -2,7 +2,7 @@ package org.jetbrains.jet.plugin.quickfix.createFromUsage.createClass import org.jetbrains.jet.lang.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetTypeReference import org.jetbrains.jet.lang.psi.JetCallExpression import org.jetbrains.jet.lang.psi.JetSimpleNameExpression @@ -21,9 +21,9 @@ import java.util.Collections public object CreateClassFromConstructorCallActionFactory: JetSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { val diagElement = diagnostic.getPsiElement() - if (diagElement.getParentByType(javaClass()) != null) return null + if (diagElement.getNonStrictParentOfType() != null) return null - val inAnnotationEntry = diagElement.getParentByType(javaClass()) != null + val inAnnotationEntry = diagElement.getNonStrictParentOfType() != null val callExpr = diagElement.getParent() as? JetCallExpression ?: return null if (callExpr.getCalleeExpression() != diagElement) return null diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt index 981ddf33348..b0bef0dd837 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createClass/CreateClassFromReferenceExpressionActionFactory.kt @@ -4,7 +4,7 @@ import org.jetbrains.jet.lang.diagnostics.Diagnostic import com.intellij.codeInsight.intention.IntentionAction import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import org.jetbrains.jet.lang.psi.JetExpression -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetTypeReference import java.util.Collections import org.jetbrains.jet.plugin.quickfix.JetIntentionActionsFactory @@ -32,7 +32,7 @@ import org.jetbrains.jet.utils.addToStdlib.singletonOrEmptyList public object CreateClassFromReferenceExpressionActionFactory : JetIntentionActionsFactory() { override fun doCreateActions(diagnostic: Diagnostic): List { val refExpr = diagnostic.getPsiElement() as? JetSimpleNameExpression ?: return Collections.emptyList() - if (refExpr.getParentByType(javaClass()) != null) return Collections.emptyList() + if (refExpr.getNonStrictParentOfType() != null) return Collections.emptyList() val file = refExpr.getContainingFile() as? JetFile ?: return Collections.emptyList() @@ -48,7 +48,7 @@ public object CreateClassFromReferenceExpressionActionFactory : JetIntentionActi } } as? JetExpression ?: return Collections.emptyList() - val inImport = refExpr.getParentByType(javaClass()) != null + val inImport = refExpr.getNonStrictParentOfType() != null val qualifierExpected = refExpr.isDotReceiver() || ((refExpr.getParent() as? JetDotQualifiedExpression)?.isDotReceiver() ?: false) if (inImport || qualifierExpected) { diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt index 58a346a6277..93ffe1c20f2 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt @@ -14,7 +14,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue import org.jetbrains.jet.lang.resolve.scopes.receivers.Qualifier import org.jetbrains.jet.plugin.quickfix.createFromUsage.callableBuilder.* import org.jetbrains.jet.lang.diagnostics.Errors -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetExpression import java.util.Collections import org.jetbrains.jet.plugin.refactoring.getExtractionContainers @@ -39,7 +39,7 @@ object CreateFunctionOrPropertyFromCallActionFactory : JetSingleIntentionActionF } Errors.NO_VALUE_FOR_PARAMETER, - Errors.TOO_MANY_ARGUMENTS -> diagElement.getParentByType(javaClass()) + Errors.TOO_MANY_ARGUMENTS -> diagElement.getNonStrictParentOfType() else -> throw AssertionError("Unexpected diagnostic: ${diagnostic.getFactory()}") } as? JetExpression ?: return null diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreatePropertyDelegateAccessorsActionFactory.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreatePropertyDelegateAccessorsActionFactory.kt index 3c2dba01352..9a074af255e 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreatePropertyDelegateAccessorsActionFactory.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreatePropertyDelegateAccessorsActionFactory.kt @@ -10,7 +10,7 @@ import org.jetbrains.jet.plugin.quickfix.createFromUsage.callableBuilder.Functio import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.lang.descriptors.PropertyDescriptor -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetExpression import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns import org.jetbrains.jet.plugin.quickfix.createFromUsage.callableBuilder.CallableInfo @@ -29,7 +29,7 @@ object CreatePropertyDelegateAccessorsActionFactory : JetSingleIntentionActionFa val builtIns = KotlinBuiltIns.getInstance() - val property = expression.getParentByType(javaClass()) ?: return null + val property = expression.getNonStrictParentOfType() ?: return null val propertyDescriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, property] as? PropertyDescriptor ?: return null diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetEnumEntryWithoutSuperCallUsage.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetEnumEntryWithoutSuperCallUsage.kt index f0d89fffcc7..2bfaacd068c 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetEnumEntryWithoutSuperCallUsage.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetEnumEntryWithoutSuperCallUsage.kt @@ -19,16 +19,18 @@ package org.jetbrains.jet.plugin.refactoring.changeSignature.usages import org.jetbrains.jet.lang.psi.JetEnumEntry import org.jetbrains.jet.plugin.refactoring.changeSignature.JetChangeInfo import org.jetbrains.jet.lang.psi.JetPsiFactory -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetClass import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public class JetEnumEntryWithoutSuperCallUsage(enumEntry: JetEnumEntry) : JetUsageInfo(enumEntry) { override fun processUsage(changeInfo: JetChangeInfo, element: JetEnumEntry): Boolean { if (changeInfo.getNewParameters().size > 0) { val psiFactory = JetPsiFactory(element) - val enumClass = element.getParentByType(javaClass(), true)!! + val enumClass = element.getStrictParentOfType()!! val delegatorToSuperCall = element.addAfter( psiFactory.createDelegatorToSuperCall("${enumClass.getName()}()"), element.getNameAsDeclaration() diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractionData.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractionData.kt index 3cd5344a63c..77ad1b3502e 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractionData.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractionData.kt @@ -40,7 +40,7 @@ import org.jetbrains.jet.lang.psi.JetSuperExpression import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.resolve.scopes.receivers.ThisReceiver import org.jetbrains.jet.lang.descriptors.ClassKind -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetDeclaration import org.jetbrains.jet.lang.psi.JetDeclarationWithBody import org.jetbrains.jet.lang.psi.JetUserType @@ -52,6 +52,8 @@ import org.jetbrains.jet.lang.psi.JetClassInitializer import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils import org.jetbrains.jet.plugin.util.psi.patternMatching.JetPsiRange +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType data class ExtractionOptions( val inferUnitTypeForUnusedValues: Boolean, @@ -84,7 +86,7 @@ data class ExtractionData( val project: Project = originalFile.getProject() val originalElements: List = originalRange.elements - val insertBefore: Boolean = targetSibling.getParentByType(javaClass(), true)?.let { + val insertBefore: Boolean = targetSibling.getStrictParentOfType()?.let { it is JetDeclarationWithBody || it is JetClassInitializer } ?: false diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractableAnalysisUtil.kt index f92067a1202..bc700b19d76 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractableAnalysisUtil.kt @@ -24,7 +24,7 @@ import org.jetbrains.jet.plugin.refactoring.JetRefactoringBundle import org.jetbrains.jet.lang.psi.psiUtil.isInsideOf import java.util.* import org.jetbrains.jet.plugin.refactoring.createTempCopy -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.plugin.refactoring.JetNameSuggester import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns import com.intellij.psi.util.PsiTreeUtil @@ -67,6 +67,8 @@ import org.jetbrains.jet.plugin.refactoring.getContextForContainingDeclarationBo import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers import org.jetbrains.jet.plugin.caches.resolve.findModuleDescriptor import org.jetbrains.jet.plugin.caches.resolve.analyze +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType private val DEFAULT_FUNCTION_NAME = "myFun" private val DEFAULT_RETURN_TYPE = KotlinBuiltIns.getInstance().getUnitType() @@ -214,7 +216,7 @@ private fun ExtractionData.analyzeControlFlow( is ReturnValueInstruction -> { val returnExpression = insn.returnExpressionIfAny if (returnExpression == null) { - val containingDeclaration = insn.returnedValue.element?.getParentByType(javaClass()) + val containingDeclaration = insn.returnedValue.element?.getNonStrictParentOfType() if (containingDeclaration == pseudocode.getCorrespondingElement()) { defaultExits.add(insn) } @@ -355,7 +357,7 @@ fun ExtractionData.createTemporaryDeclaration(functionText: String): JetNamedDec val tmpFile = originalFile.createTempCopy { text -> StringBuilder(text).insert(insertPosition, insertText).toString() } - return tmpFile.findElementAt(lookupPosition)?.getParentByType(javaClass())!! + return tmpFile.findElementAt(lookupPosition)?.getNonStrictParentOfType()!! } private fun ExtractionData.createTemporaryCodeBlock(): JetBlockExpression = @@ -378,7 +380,7 @@ private fun JetType.collectReferencedTypes(processTypeArguments: Boolean): List< } fun JetTypeParameter.collectRelevantConstraints(): List { - val typeConstraints = getParentByType(javaClass())?.getTypeConstraints() + val typeConstraints = getNonStrictParentOfType()?.getTypeConstraints() if (typeConstraints == null) return Collections.emptyList() return typeConstraints.filter { it.getSubjectTypeParameterName()?.getReference()?.resolve() == this} } @@ -534,7 +536,7 @@ private fun ExtractionData.inferParametersInfo( when(it.getKind()) { ClassKind.OBJECT, ClassKind.ENUM_CLASS -> it as ClassDescriptor ClassKind.CLASS_OBJECT, ClassKind.ENUM_ENTRY -> it.getContainingDeclaration() as? ClassDescriptor - else -> if (ref.getParentByType(javaClass()) != null) it as ClassDescriptor else null + else -> if (ref.getNonStrictParentOfType() != null) it as ClassDescriptor else null } is ConstructorDescriptor -> it.getContainingDeclaration() @@ -598,7 +600,7 @@ private fun ExtractionData.inferParametersInfo( } val varNameValidator = JetNameValidatorImpl( - commonParent.getParentByType(javaClass()), + commonParent.getNonStrictParentOfType(), originalElements.first, JetNameValidatorImpl.Target.PROPERTIES ) @@ -635,7 +637,7 @@ private fun ExtractionData.checkDeclarationsMovingOutOfScope( val target = expression.getReference()?.resolve() if (target is JetNamedDeclaration && target.isInsideOf(originalElements) - && target.getParentByType(javaClass(), true) == enclosingDeclaration) { + && target.getStrictParentOfType() == enclosingDeclaration) { declarationsOutOfScope.add(target) } } @@ -681,7 +683,7 @@ fun ExtractionData.performAnalysis(): AnalysisResult { val pseudocodeDeclaration = PsiTreeUtil.getParentOfType( commonParent, javaClass(), javaClass() - ) ?: commonParent.getParentByType(javaClass()) + ) ?: commonParent.getNonStrictParentOfType() ?: return noContainerError val pseudocode = PseudocodeUtil.generatePseudocode(pseudocodeDeclaration, bindingContext) val localInstructions = getLocalInstructions(pseudocode) @@ -720,7 +722,7 @@ fun ExtractionData.performAnalysis(): AnalysisResult { ) } - val enclosingDeclaration = commonParent.getParentByType(javaClass(), true)!! + val enclosingDeclaration = commonParent.getStrictParentOfType()!! checkDeclarationsMovingOutOfScope(enclosingDeclaration, controlFlow, bindingContext)?.let { messages.add(it) } val functionNameValidator = diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractorUtil.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractorUtil.kt index 915eb8812e3..f0d6687d4f6 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractorUtil.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractorUtil.kt @@ -21,7 +21,7 @@ import org.jetbrains.jet.lang.psi.JetElement import org.jetbrains.jet.lang.psi.JetSimpleNameExpression import java.util.HashMap import org.jetbrains.jet.lang.psi.JetTreeVisitorVoid -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetNamedFunction import org.jetbrains.jet.lang.psi.JetExpression import com.intellij.psi.PsiElement @@ -59,6 +59,8 @@ import org.jetbrains.jet.plugin.util.psi.patternMatching.UnificationResult.Stron import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers import org.jetbrains.jet.lang.psi.psiUtil.parents import java.util.ArrayList +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType fun ExtractableCodeDescriptor.getDeclarationText( options: ExtractionGeneratorOptions = ExtractionGeneratorOptions.DEFAULT, @@ -107,7 +109,7 @@ fun createNameCounterpartMap(from: JetElement, to: JetElement): Map()) + val newExpression = to.findElementAt(offset)?.getNonStrictParentOfType() assert(newExpression!= null, "Couldn't find expression at $offset in '${to.getText()}'") map[expression] = newExpression!! @@ -200,7 +202,7 @@ private fun makeCall( fun insertCall(anchor: PsiElement, wrappedCall: JetExpression) { val firstExpression = rangeToReplace.elements.firstOrNull { it is JetExpression } as? JetExpression if (firstExpression?.isFunctionLiteralOutsideParentheses() ?: false) { - val functionLiteralArgument = PsiTreeUtil.getParentOfType(firstExpression, javaClass())!! + val functionLiteralArgument = firstExpression?.getStrictParentOfType()!! functionLiteralArgument.moveInsideParenthesesAndReplaceWith(wrappedCall, extractableDescriptor.originalContext) return } @@ -402,7 +404,7 @@ fun ExtractableCodeDescriptor.generateDeclaration(options: ExtractionGeneratorOp * before calls/types themselves */ for ((offsetInBody, resolveResult) in extractionData.refOffsetToDeclaration.entrySet().sortDescendingBy { it.key }) { - val expr = file.findElementAt(bodyOffset + offsetInBody)?.getParentByType(javaClass()) + val expr = file.findElementAt(bodyOffset + offsetInBody)?.getNonStrictParentOfType() assert(expr != null, "Couldn't find expression at $offsetInBody in '${body.getText()}'") originalOffsetByExpr[expr!!] = offsetInBody @@ -422,7 +424,7 @@ fun ExtractableCodeDescriptor.generateDeclaration(options: ExtractionGeneratorOp replacingReturn = psiFactory.createExpression(if (jumpValue.conditional) "return true" else "return") expressionsToReplaceWithReturn = jumpValue.elementsToReplace.map { jumpElement -> val offsetInBody = jumpElement.getTextRange()!!.getStartOffset() - extractionData.originalStartOffset!! - val expr = file.findElementAt(bodyOffset + offsetInBody)?.getParentByType(jumpElement.javaClass) + val expr = file.findElementAt(bodyOffset + offsetInBody)?.getNonStrictParentOfType(jumpElement.javaClass) assert(expr != null, "Couldn't find expression at $offsetInBody in '${body.getText()}'") expr!! diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt index c18911aad92..072313d67ec 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/jetRefactoringUtil.kt @@ -56,7 +56,6 @@ import com.intellij.openapi.ui.popup.JBPopupAdapter import com.intellij.openapi.ui.popup.LightweightWindowEvent import com.intellij.psi.PsiDocumentManager import org.jetbrains.jet.lang.resolve.BindingContext -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType import org.jetbrains.jet.lang.psi.psiUtil.isAncestor import com.intellij.psi.PsiNamedElement import org.jetbrains.jet.lang.descriptors.FunctionDescriptor @@ -65,6 +64,9 @@ import com.intellij.openapi.util.text.StringUtil import javax.swing.Icon import org.jetbrains.jet.plugin.util.string.collapseSpaces import org.jetbrains.jet.plugin.caches.resolve.analyze +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType fun PsiElement.getAndRemoveCopyableUserData(key: Key): T? { val data = getCopyableUserData(key) @@ -131,8 +133,8 @@ public fun PsiElement.getAllExtractionContainers(strict: Boolean = true): List { if (includeAll) return getAllExtractionContainers(strict) - val declaration = getParentByType(javaClass(), strict)?.let { declaration -> - stream(declaration) { it.getParentByType(javaClass(), true) }.firstOrNull { it !is JetFunctionLiteral } + val declaration = getParentOfType(strict)?.let { declaration -> + stream(declaration) { it.getStrictParentOfType() }.firstOrNull { it !is JetFunctionLiteral } } ?: return Collections.emptyList() val parent = declaration.getParent()?.let { @@ -259,7 +261,7 @@ fun PsiElement.getLineCount(): Int { fun PsiElement.isMultiLine(): Boolean = getLineCount() > 1 public fun JetElement.getContextForContainingDeclarationBody(): BindingContext? { - val enclosingDeclaration = getParentByType(javaClass(), true) + val enclosingDeclaration = getStrictParentOfType() val bodyElement = when (enclosingDeclaration) { is JetDeclarationWithBody -> enclosingDeclaration.getBodyExpression() is JetWithExpressionInitializer -> enclosingDeclaration.getInitializer() @@ -291,7 +293,7 @@ public fun chooseContainerElement( return (getParent() as JetProperty).renderName() + if (isGetter()) ".get" else ".set" } if (this is JetObjectDeclaration && this.isClassObject()) { - return "Class object of ${getParentByType(javaClass(), true)?.renderName() ?: ""}" + return "Class object of ${getStrictParentOfType()?.renderName() ?: ""}" } return (this as? PsiNamedElement)?.getName() ?: "" } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/move/moveUtils.kt index 278adb62ae5..69b8d26c747 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/move/moveUtils.kt @@ -41,7 +41,7 @@ import com.intellij.psi.PsiReference import com.intellij.refactoring.util.MoveRenameUsageInfo import org.jetbrains.jet.plugin.references.JetReference import org.jetbrains.jet.asJava.namedUnwrappedElement -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.JetImportDirective import java.util.ArrayList import com.intellij.refactoring.util.NonCodeUsageInfo @@ -158,7 +158,7 @@ fun createMoveUsageInfo( if (reference is JetReference && referencedElement.namedUnwrappedElement!!.isExtensionDeclaration() - && element.getParentByType(javaClass()) == null) { + && element.getNonStrictParentOfType() == null) { return MoveRenameUsageInfoForExtension( element, reference, startOffset, endOffset, referencedElement, element.getContainingFile()!!, addImportToOriginalFile ) diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/renameUtil.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/renameUtil.kt index 68b83424d44..3fa1cf7e1ce 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/renameUtil.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/renameUtil.kt @@ -21,7 +21,6 @@ import com.intellij.usageView.UsageInfo import java.util.ArrayList import com.intellij.refactoring.util.MoveRenameUsageInfo import org.jetbrains.jet.plugin.references.JetMultiDeclarationReference -import org.jetbrains.jet.lang.psi.psiUtil.getParentByTypeAndBranch import org.jetbrains.jet.lang.psi.JetWhenConditionInRange import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo import org.jetbrains.jet.plugin.refactoring.JetRefactoringBundle diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt index 2240438d439..da8da848cf7 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt @@ -26,7 +26,7 @@ import org.jetbrains.jet.asJava.unwrapped import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.plugin.references.JetReference -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.psiUtil.isAncestor import org.jetbrains.jet.lang.psi.psiUtil.parameterIndex import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils @@ -40,7 +40,7 @@ public class KotlinJavaSafeDeleteDelegate : JavaSafeDeleteDelegate { val element = reference.getElement() as JetElement - val callExpression = element.getParentByType(javaClass()) + val callExpression = element.getNonStrictParentOfType() if (callExpression == null) return val calleeExpression = callExpression.getCalleeExpression() diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index c28be5e209a..13a28faf21d 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -42,7 +42,7 @@ import org.jetbrains.jet.plugin.JetBundle import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil import org.jetbrains.jet.plugin.references.JetReference import java.util.* -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.psiUtil.deleteElementAndCleanParent import org.jetbrains.jet.plugin.caches.resolve.analyze @@ -88,9 +88,9 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { is SafeDeleteReferenceJavaDeleteUsageInfo -> usageInfo.getElement()?.let { usageElement -> - if (usageElement.getParentByType(javaClass()) != null) null + if (usageElement.getNonStrictParentOfType() != null) null else { - usageElement.getParentByType(javaClass())?.let { importDirective -> + usageElement.getNonStrictParentOfType()?.let { importDirective -> SafeDeleteImportDirectiveUsageInfo(importDirective, element.unwrapped as JetDeclaration) } ?: if (forceReferencedElementUnwrapping) { SafeDeleteReferenceJavaDeleteUsageInfo(usageElement, element.unwrapped, usageInfo.isSafeDelete()) @@ -126,7 +126,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { .stream() .filterNot { reference -> getIgnoranceCondition().value(reference.getElement()) } .mapTo(usages) { reference -> - reference.getElement().getParentByType(javaClass())?.let { importDirective -> + reference.getElement().getNonStrictParentOfType()?.let { importDirective -> SafeDeleteImportDirectiveUsageInfo(importDirective, element.unwrapped as JetDeclaration) } ?: SafeDeleteReferenceSimpleDeleteUsageInfo(element, declaration, false) } @@ -135,7 +135,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } fun findTypeParameterUsages(parameter: JetTypeParameter) { - val owner = parameter.getParentByType(javaClass()) + val owner = parameter.getNonStrictParentOfType() if (owner == null) return val parameterList = owner.getTypeParameters() @@ -146,9 +146,9 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { val referencedElement = reference.getElement() - val argList = referencedElement.getParentByType(javaClass())?.let { jetType -> + val argList = referencedElement.getNonStrictParentOfType()?.let { jetType -> jetType.getTypeArgumentList() - } ?: referencedElement.getParentByType(javaClass())?.let { callExpression -> + } ?: referencedElement.getNonStrictParentOfType()?.let { callExpression -> callExpression.getTypeArgumentList() } ?: null @@ -202,7 +202,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { override fun findConflicts(element: PsiElement, allElementsToDelete: Array): MutableCollection? { if (element is JetNamedFunction || element is JetProperty) { - val jetClass = element.getParentByType(javaClass()) + val jetClass = element.getNonStrictParentOfType() if (jetClass == null || jetClass.getBody() != element.getParent()) return null val modifierList = jetClass.getModifierList() diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/utils.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/utils.kt index 1e3ed7d7c58..a23bd4380f1 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/utils.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/utils.kt @@ -37,7 +37,7 @@ public fun PsiElement.canDeleteElement(): Boolean { if (isObjectLiteral()) return false if (this is JetParameter) { - val declaration = getParentByType(javaClass(), true) + val declaration = getStrictParentOfType() return declaration != null && !(declaration is JetPropertyAccessor && declaration.isSetter()) } diff --git a/idea/tests/org/jetbrains/jet/completion/DataFlowValueRenderingTest.kt b/idea/tests/org/jetbrains/jet/completion/DataFlowValueRenderingTest.kt index 053cdbfae73..33d2ede4b91 100644 --- a/idea/tests/org/jetbrains/jet/completion/DataFlowValueRenderingTest.kt +++ b/idea/tests/org/jetbrains/jet/completion/DataFlowValueRenderingTest.kt @@ -19,7 +19,6 @@ package org.jetbrains.jet.completion import org.jetbrains.jet.plugin.PluginTestCaseBase import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.lang.psi.JetExpression -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.plugin.completion.renderDataFlowValue import org.jetbrains.jet.JetTestUtils import com.intellij.openapi.util.io.FileUtil @@ -29,6 +28,7 @@ import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo import org.jetbrains.jet.plugin.caches.resolve.analyze +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType public abstract class AbstractDataFlowValueRenderingTest: JetLightCodeInsightFixtureTestCase() { override fun getTestDataPath() : String { @@ -45,7 +45,7 @@ public abstract class AbstractDataFlowValueRenderingTest: JetLightCodeInsightFix val jetFile = fixture.getFile() as JetFile val element = jetFile.findElementAt(fixture.getCaretOffset()) - val expression = PsiTreeUtil.getParentOfType(element, javaClass())!! + val expression = element.getStrictParentOfType()!! val info = expression.analyze().getDataFlowInfo(expression) val allValues = (info.getCompleteTypeInfo().keySet() + info.getCompleteNullabilityInfo().keySet()).toSet() diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt b/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt index 23da901ab01..61803234180 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt @@ -22,7 +22,7 @@ import org.jetbrains.jet.plugin.PluginTestCaseBase import java.io.File import com.intellij.refactoring.move.moveMembers.MoveMembersProcessor import com.intellij.refactoring.move.moveMembers.MockMoveMembersOptions -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import com.intellij.psi.PsiMember import com.intellij.refactoring.BaseRefactoringProcessor.ConflictsInTestsException import com.google.gson.JsonObject @@ -141,7 +141,7 @@ public abstract class AbstractJetMoveTest : MultiFileTestCase() { enum class MoveAction { MOVE_MEMBERS { override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { - val member = elementAtCaret!!.getParentByType(javaClass())!! + val member = elementAtCaret!!.getNonStrictParentOfType()!! val targetClassName = config.getString("targetClass") val visibility = config.getNullableString("visibility") @@ -156,7 +156,7 @@ enum class MoveAction { MOVE_TOP_LEVEL_CLASSES { override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { - val classToMove = elementAtCaret!!.getParentByType(javaClass())!! + val classToMove = elementAtCaret!!.getNonStrictParentOfType()!! val targetPackage = config.getString("targetPackage") MoveClassesOrPackagesProcessor( @@ -191,7 +191,7 @@ enum class MoveAction { override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() - val classToMove = elementAtCaret!!.getParentByType(javaClass())!! + val classToMove = elementAtCaret!!.getNonStrictParentOfType()!! val targetClass = config.getString("targetClass") MoveClassToInnerProcessor( @@ -209,7 +209,7 @@ enum class MoveAction { override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() - val classToMove = elementAtCaret!!.getParentByType(javaClass())!! + val classToMove = elementAtCaret!!.getNonStrictParentOfType()!! val newClassName = config.getNullableString("newClassName") ?: classToMove.getName()!! val outerInstanceParameterName = config.getNullableString("outerInstanceParameterName") val targetPackage = config.getString("targetPackage") @@ -258,7 +258,7 @@ enum class MoveAction { MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS { override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() - val elementToMove = elementAtCaret!!.getParentByType(javaClass())!! + val elementToMove = elementAtCaret!!.getNonStrictParentOfType()!! val moveTarget = config.getNullableString("targetPackage")?.let { packageName -> MoveDestinationKotlinMoveTarget(MultipleRootsMoveDestination(PackageWrapper(mainFile.getManager(), packageName))) diff --git a/idea/tests/org/jetbrains/jet/resolve/AbstractPartialBodyResolveTest.kt b/idea/tests/org/jetbrains/jet/resolve/AbstractPartialBodyResolveTest.kt index 80336a0f8f9..e652f6851ba 100644 --- a/idea/tests/org/jetbrains/jet/resolve/AbstractPartialBodyResolveTest.kt +++ b/idea/tests/org/jetbrains/jet/resolve/AbstractPartialBodyResolveTest.kt @@ -18,7 +18,7 @@ package org.jetbrains.jet.resolve import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase import org.jetbrains.jet.lang.psi.JetFile -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.JetTestCaseBuilder import org.jetbrains.jet.plugin.JetWithJdkAndRuntimeLightProjectDescriptor @@ -59,7 +59,7 @@ public abstract class AbstractPartialBodyResolveTest : JetLightCodeInsightFixtur else { val offset = editor.getCaretModel().getOffset() val element = file.findElementAt(offset) - element.getParentByType(javaClass()) ?: error("No JetSimpleNameExpression at caret") + element.getNonStrictParentOfType() ?: error("No JetSimpleNameExpression at caret") } val resolutionFacade = file.getResolutionFacade() diff --git a/j2k/src/org/jetbrains/jet/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/jet/j2k/ExpressionConverter.kt index 7257868138b..c20de77bc82 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ExpressionConverter.kt @@ -28,7 +28,7 @@ import org.jetbrains.jet.asJava.KotlinLightMethod import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.psi.JetFunction import org.jetbrains.jet.lang.psi.JetClassOrObject -import org.jetbrains.jet.lang.psi.psiUtil.getParentByType +import org.jetbrains.jet.lang.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.jet.lang.psi.psiUtil.isExtensionDeclaration import org.jetbrains.jet.lang.psi.JetPropertyAccessor import org.jetbrains.jet.lang.psi.JetParameter @@ -37,6 +37,8 @@ import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.asJava.KotlinLightField import org.jetbrains.jet.lang.psi.JetObjectDeclaration +import org.jetbrains.jet.lang.psi.psiUtil.getParentOfType +import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType trait ExpressionConverter { fun convertExpression(expression: PsiExpression, codeConverter: CodeConverter): Expression @@ -70,7 +72,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { } override fun visitArrayAccessExpression(expression: PsiArrayAccessExpression) { - val assignment = PsiTreeUtil.getParentOfType(expression, javaClass()) + val assignment = expression.getStrictParentOfType() val lvalue = assignment != null && expression == assignment.getLExpression(); result = ArrayAccessExpression(codeConverter.convertExpression(expression.getArrayExpression()), codeConverter.convertExpression(expression.getIndexExpression()), @@ -211,7 +213,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { if (target is KotlinLightMethod) { val origin = target.origin - val isTopLevel = origin?.getParentByType(javaClass(), true) == null + val isTopLevel = origin?.getStrictParentOfType() == null if (origin is JetProperty || origin is JetPropertyAccessor || origin is JetParameter) { val property = if (origin is JetPropertyAccessor) origin.getParent() as JetProperty