Changes on code review
This commit is contained in:
@@ -46,7 +46,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
public abstract class ElementResolver protected constructor(
|
||||
public val resolveSession: ResolveSession
|
||||
) {
|
||||
public open fun getElementAdditionalResolve(resolveElement: JetElement, contextElement: JetElement, bodyResolveMode: BodyResolveMode): BindingContext {
|
||||
protected open fun getElementAdditionalResolve(resolveElement: JetElement, contextElement: JetElement, bodyResolveMode: BodyResolveMode): BindingContext {
|
||||
return performElementAdditionalResolve(resolveElement, resolveElement, bodyResolveMode).first
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ public abstract class ElementResolver protected constructor(
|
||||
val elementOfAdditionalResolve = findElementOfAdditionalResolve(contextElement)
|
||||
|
||||
if (elementOfAdditionalResolve is JetParameter) {
|
||||
// Parameters for function literal could be met inside other parameters. We can't make resolveToDescriptors for internal elements.
|
||||
contextElement = elementOfAdditionalResolve
|
||||
}
|
||||
else if (elementOfAdditionalResolve != null) {
|
||||
|
||||
@@ -524,7 +524,7 @@ class PartialBodyResolveFilter(
|
||||
}
|
||||
|
||||
private fun JetElement.forTopLevelBlocksInside(action: (JetBlockExpression) -> Unit) {
|
||||
forEachDescendantOfType({ it !is JetBlockExpression }, action)
|
||||
forEachDescendantOfType(canGoInside = { it !is JetBlockExpression }, action = action)
|
||||
}
|
||||
|
||||
private fun JetExpression?.isNullLiteral() = this?.getNode()?.getElementType() == JetNodeTypes.NULL
|
||||
|
||||
@@ -130,7 +130,7 @@ val KDocName.mainReference: KDocReference
|
||||
val JetElement.mainReference: JetReference?
|
||||
get() {
|
||||
return when {
|
||||
this is JetSimpleNameExpression -> mainReference
|
||||
this is JetReferenceExpression -> mainReference
|
||||
this is KDocName -> mainReference
|
||||
else -> getReferences().firstIsInstanceOrNull<JetReference>()
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -1,8 +1,8 @@
|
||||
import java.io.File
|
||||
|
||||
fun File.foo(absolutePath: String) {
|
||||
fun File.foo(absolutePath: String?) {
|
||||
<caret>
|
||||
}
|
||||
|
||||
// EXIST_JAVA_ONLY: getAbsolutePath
|
||||
// ABSENT: { itemText: "absolutePath", tailText: " for File" }
|
||||
// ABSENT: { itemText: "absolutePath", typeText: "String" }
|
||||
|
||||
@@ -107,7 +107,7 @@ public class JetAddImportAction(
|
||||
// TODO: Validate resolution variants. See AddImportAction.execute()
|
||||
|
||||
if (variants.size() == 1 || ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
addImport(element, project, variants.first())
|
||||
addImport(variants.first())
|
||||
}
|
||||
else {
|
||||
chooseCandidateAndImport()
|
||||
@@ -124,7 +124,7 @@ public class JetAddImportAction(
|
||||
if (selectedValue == null) return null
|
||||
|
||||
if (finalChoice) {
|
||||
addImport(element, project, selectedValue)
|
||||
addImport(selectedValue)
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -156,23 +156,20 @@ public class JetAddImportAction(
|
||||
JBPopupFactory.getInstance().createListPopup(getImportSelectionPopup()).showInBestPositionFor(editor)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private fun addImport(selectedVariant: Variant) {
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
|
||||
protected fun addImport(element: PsiElement, project: Project, selectedVariant: Variant) {
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
project.executeWriteCommand(QuickFixBundle.message("add.import")) {
|
||||
if (!element.isValid()) return@executeWriteCommand
|
||||
|
||||
project.executeWriteCommand(QuickFixBundle.message("add.import")) {
|
||||
if (!element.isValid()) return@executeWriteCommand
|
||||
|
||||
val file = element.getContainingFile() as JetFile
|
||||
val descriptor = selectedVariant.descriptorToImport
|
||||
// for class or package we use ShortenReferences because we not necessary insert an import but may want to insert partly qualified name
|
||||
if (element is JetSimpleNameExpression && (descriptor is ClassDescriptor || descriptor is PackageViewDescriptor)) {
|
||||
element.mainReference.bindToFqName(descriptor.importableFqNameSafe, JetSimpleNameReference.ShorteningMode.FORCED_SHORTENING)
|
||||
}
|
||||
else {
|
||||
ImportInsertHelper.getInstance(project).importDescriptor(file, descriptor)
|
||||
}
|
||||
val file = element.getContainingFile() as JetFile
|
||||
val descriptor = selectedVariant.descriptorToImport
|
||||
// for class or package we use ShortenReferences because we not necessary insert an import but may want to insert partly qualified name
|
||||
if (descriptor is ClassDescriptor || descriptor is PackageViewDescriptor) {
|
||||
element.mainReference.bindToFqName(descriptor.importableFqNameSafe, JetSimpleNameReference.ShorteningMode.FORCED_SHORTENING)
|
||||
}
|
||||
else {
|
||||
ImportInsertHelper.getInstance(project).importDescriptor(file, descriptor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.elementsInRange
|
||||
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
@@ -217,16 +218,14 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Kotlin
|
||||
private fun findReference(data: KotlinReferenceData, file: JetFile, blockStart: Int): JetReference? {
|
||||
val startOffset = data.startOffset + blockStart
|
||||
val endOffset = data.endOffset + blockStart
|
||||
val element = file.findElementAt(startOffset)
|
||||
val element = file.findElementAt(startOffset) ?: return null
|
||||
val desiredRange = TextRange(startOffset, endOffset)
|
||||
var current = element
|
||||
while (current != null) {
|
||||
for (current in element.parentsWithSelf) {
|
||||
val range = current.range
|
||||
if (current is JetElement && range == desiredRange) {
|
||||
current.mainReference?.let { return it }
|
||||
}
|
||||
if (range !in desiredRange) return null
|
||||
current = current.getParent()
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ class C(param1: String = "", param2: Int = 0) {
|
||||
|
||||
statement1.getParent().addAfter(factory.createExpression("x()"), statement1)
|
||||
|
||||
val bindingContext5 = statement1.analyze(BodyResolveMode.PARTIAL)
|
||||
val bindingContext5 = statement1.analyze(BodyResolveMode.FULL)
|
||||
assert(bindingContext5 !== bindingContext4)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user