New J2K: use internal getStrictParentOfType instead of custom one

This commit is contained in:
Ilya Kirillov
2019-08-26 17:50:42 +03:00
parent 2f5fa49c52
commit 64ecbd1418
17 changed files with 45 additions and 48 deletions
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
class ConstraintsCollectorAggregator(
private val resolutionFacade: ResolutionFacade,
@@ -24,7 +25,7 @@ class ConstraintsCollectorAggregator(
val constraintsBuilder = ConstraintBuilder(inferenceContext, boundTypeCalculator)
for (element in elements) {
element.forEachDescendantOfType<KtElement> { innerElement ->
if (innerElement.parentOfType<KtImportDirective>() != null) return@forEachDescendantOfType
if (innerElement.getStrictParentOfType<KtImportDirective>() != null) return@forEachDescendantOfType
for (collector in collectors) {
with(collector) {
constraintsBuilder.collectConstraints(
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.asGetterName
import org.jetbrains.kotlin.nj2k.asSetterName
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.postProcessing.*
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.*
@@ -133,7 +132,7 @@ class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing
return property.add(ktGetter).cast<KtPropertyAccessor>().let {
if (getter is RealGetter) {
getter.function.forAllUsages { usage ->
usage.parentOfType<KtCallExpression>()!!.replace(factory.createExpression(getter.name))
usage.getStrictParentOfType<KtCallExpression>()!!.replace(factory.createExpression(getter.name))
}
}
it
@@ -183,7 +182,7 @@ class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing
ktSetter.filterModifiers()
if (setter is RealSetter) {
setter.function.forAllUsages { usage ->
val callExpression = usage.parentOfType<KtCallExpression>()!!
val callExpression = usage.getStrictParentOfType<KtCallExpression>()!!
val qualifier = callExpression.getQualifiedExpressionForSelector()
val newValue = callExpression.valueArguments.single()
if (qualifier != null) {
@@ -206,8 +205,8 @@ class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing
private fun KtExpression.isReferenceToThis() =
when (this) {
is KtThisExpression -> instanceReference.resolve() == parentOfType<KtClassOrObject>()
is KtReferenceExpression -> resolve() == parentOfType<KtClassOrObject>()
is KtThisExpression -> instanceReference.resolve() == getStrictParentOfType<KtClassOrObject>()
is KtReferenceExpression -> resolve() == getStrictParentOfType<KtClassOrObject>()
else -> false
}
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.j2k.ConverterSettings
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.postProcessing.ApplicabilityBasedInspectionLikeProcessing
import org.jetbrains.kotlin.nj2k.postProcessing.InspectionLikeProcessing
import org.jetbrains.kotlin.nj2k.postProcessing.generalInspectionBasedProcessing
@@ -219,7 +218,7 @@ class UninitializedVariableReferenceFromInitializerToThisReferenceProcessing :
override fun createAction(element: PsiElement, settings: ConverterSettings?): (() -> Unit)? {
if (element !is KtSimpleNameExpression) return null
val anonymousObject = element.getParentOfType<KtClassOrObject>(true)?.takeIf { it.name == null } ?: return null
val anonymousObject = element.getStrictParentOfType<KtClassOrObject>()?.takeIf { it.name == null } ?: return null
val resolved = element.mainReference.resolve() ?: return null
if (resolved.isAncestor(element, strict = true)) {
@@ -241,9 +240,9 @@ class UnresolvedVariableReferenceFromInitializerToThisReferenceProcessing :
override fun createAction(element: PsiElement, settings: ConverterSettings?): (() -> Unit)? {
if (element !is KtSimpleNameExpression || element.mainReference.resolve() != null) return null
val anonymousObject = element.getParentOfType<KtClassOrObject>(true) ?: return null
val anonymousObject = element.getStrictParentOfType<KtClassOrObject>() ?: return null
val variable = anonymousObject.getParentOfType<KtVariableDeclaration>(true) ?: return null
val variable = anonymousObject.getStrictParentOfType<KtVariableDeclaration>() ?: return null
if (variable.nameAsName == element.getReferencedNameAsName() &&
variable.initializer?.getChildOfType<KtClassOrObject>() == anonymousObject
@@ -260,7 +259,7 @@ class VarToValProcessing : ApplicabilityBasedInspectionLikeProcessing<KtProperty
ReferencesSearch.search(this, useScope).any { usage ->
(usage as? KtSimpleNameReference)?.element?.let { nameReference ->
val receiver = nameReference.parent?.safeAs<KtDotQualifiedExpression>()?.receiverExpression
if (nameReference.parentOfType<KtAnonymousInitializer>() != null
if (nameReference.getStrictParentOfType<KtAnonymousInitializer>() != null
&& (receiver == null || receiver is KtThisExpression)
) return@let false
nameReference.readWriteAccess(useResolveForReadWrite = true).isWrite
@@ -0,0 +1,20 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.nj2k
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
interface BatchBaseConversion {
fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean
}
interface SequentialBaseConversion : BatchBaseConversion {
fun runConversion(treeRoot: JKTreeElement, context: NewJ2kConverterContext): Boolean
override fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean {
return treeRoots.asSequence().map { runConversion(it, context) }.max() ?: false
}
}
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.nj2k
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.nj2k.conversions.parentOfType
import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol
import org.jetbrains.kotlin.nj2k.symbols.getDisplayName
import org.jetbrains.kotlin.nj2k.tree.*
@@ -1,32 +0,0 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
interface BatchBaseConversion {
fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean
}
interface SequentialBaseConversion : BatchBaseConversion {
fun runConversion(treeRoot: JKTreeElement, context: NewJ2kConverterContext): Boolean
override fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean {
return treeRoots.asSequence().map { runConversion(it, context) }.max() ?: false
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.*
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConstructorImpl
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import com.intellij.psi.PsiEnumConstant
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.symbols.*
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.JKClassAccessExpressionImpl
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.findUsages
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.JKBooleanLiteral
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import com.intellij.psi.PsiMember
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.psi
import org.jetbrains.kotlin.nj2k.visibility
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.SequentialBaseConversion
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
abstract class MatchBasedConversion : SequentialBaseConversion {
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.JKOtherModifierElementImpl
import org.jetbrains.kotlin.nj2k.tree.impl.psi
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.*
class RemoveWrongExtraModifiersForSingleFunctionsConversion : RecursiveApplicableConversionBase() {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.asStatement
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.JKLabelTextImpl
import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import com.intellij.lang.jvm.JvmModifier
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiModifierListOwner
import com.intellij.psi.util.parentOfType
import org.jetbrains.kotlin.j2k.getContainingClass
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.asQualifierWithThisAsSelector
@@ -23,6 +24,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtObjectDeclaration
import org.jetbrains.kotlin.psi.psiUtil.containingClass
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@@ -67,7 +69,7 @@ class StaticMemberAccessConversion(private val context: NewJ2kConverterContext)
val target = target
return when (target) {
is KtElement ->
target.parentOfType<KtClassOrObject>()?.let { klass ->
target.getStrictParentOfType<KtClassOrObject>()?.let { klass ->
if (klass is KtObjectDeclaration && klass.isCompanion()) klass.containingClass()
else klass
}?.let { context.symbolProvider.provideDirectSymbol(it) }
@@ -10,12 +10,12 @@ import com.intellij.psi.PsiMember
import com.intellij.psi.PsiNamedElement
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
import org.jetbrains.kotlin.nj2k.JKSymbolProvider
import org.jetbrains.kotlin.nj2k.conversions.parentOfType
import org.jetbrains.kotlin.nj2k.parentOfType
import org.jetbrains.kotlin.nj2k.tree.JKDeclaration
import org.jetbrains.kotlin.nj2k.tree.JKFile
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
interface JKSymbol {
val target: Any
@@ -51,7 +51,7 @@ interface JKMultiverseSymbol<T> : JKSymbol where T : PsiNamedElement, T : PsiEle
override val target: T
override val declaredIn: JKSymbol?
get() = target.parentOfType<PsiMember>()?.let { symbolProvider.provideDirectSymbol(it) }
get() = target.getStrictParentOfType<PsiMember>()?.let { symbolProvider.provideDirectSymbol(it) }
override val fqName: String
get() = target.getKotlinFqName()?.asString() ?: name
override val name: String
@@ -65,7 +65,7 @@ interface JKMultiverseKtSymbol<T : KtNamedDeclaration> : JKSymbol {
override val name: String
get() = target.name!!
override val declaredIn: JKSymbol?
get() = target.parentOfType<KtDeclaration>()?.let { symbolProvider.provideDirectSymbol(it) }
get() = target.getStrictParentOfType<KtDeclaration>()?.let { symbolProvider.provideDirectSymbol(it) }
override val fqName: String
get() = target.fqName?.asString() ?: name
}