Changes on code review

This commit is contained in:
Valentin Kipyatkov
2015-07-15 16:06:46 +03:00
parent 867b0b5075
commit 53810c67db
7 changed files with 24 additions and 27 deletions
@@ -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>()
}
@@ -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)
}
}