Make project compilable after types enhancement

This commit is contained in:
Denis Zharkov
2015-07-08 12:13:24 +03:00
parent 4479c215d4
commit 0a19fb7df2
139 changed files with 227 additions and 212 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.jvm.AsmTypes import org.jetbrains.kotlin.resolve.jvm.AsmTypes
import org.jetbrains.kotlin.types.JetType
import java.util.* import java.util.*
public class AccessorForConstructorDescriptor( public class AccessorForConstructorDescriptor(
@@ -38,6 +39,8 @@ public class AccessorForConstructorDescriptor(
override fun isPrimary(): Boolean = false override fun isPrimary(): Boolean = false
override fun getReturnType(): JetType = super<AbstractAccessorForFunctionDescriptor>.getReturnType()!!
init { init {
initialize( initialize(
DescriptorUtils.getReceiverParameterType(getExtensionReceiverParameter()), DescriptorUtils.getReceiverParameterType(getExtensionReceiverParameter()),
@@ -49,7 +49,7 @@ open class BranchedValue(
open fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) { open fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
if (arg1 is CondJump) arg1.condJump(jumpLabel, v, jumpIfFalse) else arg1.put(operandType, v) if (arg1 is CondJump) arg1.condJump(jumpLabel, v, jumpIfFalse) else arg1.put(operandType, v)
arg2?.put(operandType, v) arg2?.put(operandType, v)
v.visitJumpInsn(patchOpcode(if (jumpIfFalse) opcode else negatedOperations[opcode], v), jumpLabel); v.visitJumpInsn(patchOpcode(if (jumpIfFalse) opcode else negatedOperations[opcode]!!, v), jumpLabel);
} }
open fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) { open fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
@@ -284,7 +284,7 @@ class RawFileMapping(val name: String, val path: String) {
if (rangeMappings.isNotEmpty() && isLastMapped && couldFoldInRange(lastMappedWithNewIndex, source)) { if (rangeMappings.isNotEmpty() && isLastMapped && couldFoldInRange(lastMappedWithNewIndex, source)) {
rangeMapping = rangeMappings.last() rangeMapping = rangeMappings.last()
rangeMapping.range += source - lastMappedWithNewIndex rangeMapping.range += source - lastMappedWithNewIndex
dest = lineMappings[lastMappedWithNewIndex] + source - lastMappedWithNewIndex dest = lineMappings[lastMappedWithNewIndex]!! + source - lastMappedWithNewIndex
} }
else { else {
dest = currentIndex + 1 dest = currentIndex + 1
@@ -139,7 +139,7 @@ public object LabelNormalizationMethodTransformer : MethodTransformer() {
} }
private fun isRemoved(labelNode: LabelNode): Boolean = removedLabelNodes.contains(labelNode) private fun isRemoved(labelNode: LabelNode): Boolean = removedLabelNodes.contains(labelNode)
private fun getNew(oldLabelNode: LabelNode): LabelNode = newLabelNodes[oldLabelNode] private fun getNew(oldLabelNode: LabelNode): LabelNode = newLabelNodes[oldLabelNode]!!
} }
private fun InsnList.replaceNodeGetNext(oldNode: AbstractInsnNode, newNode: AbstractInsnNode): AbstractInsnNode? { private fun InsnList.replaceNodeGetNext(oldNode: AbstractInsnNode, newNode: AbstractInsnNode): AbstractInsnNode? {
@@ -134,19 +134,19 @@ public class FixStackAnalyzer(
val returnValue = pop() val returnValue = pop()
clearStack() clearStack()
val savedValues = savedStacks[beforeInlineMarker] val savedValues = savedStacks[beforeInlineMarker]
pushAll(savedValues) pushAll(savedValues!!)
push(returnValue) push(returnValue)
} }
else { else {
val savedValues = savedStacks[beforeInlineMarker] val savedValues = savedStacks[beforeInlineMarker]
pushAll(savedValues) pushAll(savedValues!!)
} }
} }
private fun FixStackFrame.executeRestoreStackInTryCatch(insn: AbstractInsnNode) { private fun FixStackFrame.executeRestoreStackInTryCatch(insn: AbstractInsnNode) {
val saveNode = context.saveStackMarkerForRestoreMarker[insn] val saveNode = context.saveStackMarkerForRestoreMarker[insn]
val savedValues = savedStacks.getOrElse(saveNode) { val savedValues = savedStacks.getOrElse(saveNode) {
throw AssertionError("${indexOf(insn)}: Restore stack is unavailable for ${indexOf(saveNode)}") throw AssertionError("${indexOf(insn)}: Restore stack is unavailable for ${indexOf(saveNode!!)}")
} }
pushAll(savedValues) pushAll(savedValues)
} }
@@ -39,7 +39,7 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod
} }
fun allocateVariablesForSaveStackMarker(saveStackMarker: AbstractInsnNode, savedStackValues: List<BasicValue>): SavedStackDescriptor { fun allocateVariablesForSaveStackMarker(saveStackMarker: AbstractInsnNode, savedStackValues: List<BasicValue>): SavedStackDescriptor {
val numRestoreStackMarkers = context.restoreStackMarkersForSaveMarker[saveStackMarker].size() val numRestoreStackMarkers = context.restoreStackMarkersForSaveMarker[saveStackMarker]!!.size()
return allocateNewHandle(numRestoreStackMarkers, saveStackMarker, savedStackValues) return allocateNewHandle(numRestoreStackMarkers, saveStackMarker, savedStackValues)
} }
@@ -54,7 +54,7 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod
fun getSavedStackDescriptorOrNull(restoreStackMarker: AbstractInsnNode): SavedStackDescriptor { fun getSavedStackDescriptorOrNull(restoreStackMarker: AbstractInsnNode): SavedStackDescriptor {
val saveStackMarker = context.saveStackMarkerForRestoreMarker[restoreStackMarker] val saveStackMarker = context.saveStackMarkerForRestoreMarker[restoreStackMarker]
return allocatedHandles[saveStackMarker].savedStackDescriptor return allocatedHandles[saveStackMarker]!!.savedStackDescriptor
} }
private fun getFirstUnusedLocalVariableIndex(): Int = private fun getFirstUnusedLocalVariableIndex(): Int =
@@ -64,7 +64,7 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod
fun markRestoreStackMarkerEmitted(restoreStackMarker: AbstractInsnNode) { fun markRestoreStackMarkerEmitted(restoreStackMarker: AbstractInsnNode) {
val saveStackMarker = context.saveStackMarkerForRestoreMarker[restoreStackMarker] val saveStackMarker = context.saveStackMarkerForRestoreMarker[restoreStackMarker]
markEmitted(saveStackMarker) markEmitted(saveStackMarker!!)
} }
fun allocateVariablesForBeforeInlineMarker(beforeInlineMarker: AbstractInsnNode, savedStackValues: List<BasicValue>): SavedStackDescriptor { fun allocateVariablesForBeforeInlineMarker(beforeInlineMarker: AbstractInsnNode, savedStackValues: List<BasicValue>): SavedStackDescriptor {
@@ -73,16 +73,16 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod
fun getBeforeInlineDescriptor(afterInlineMarker: AbstractInsnNode): SavedStackDescriptor { fun getBeforeInlineDescriptor(afterInlineMarker: AbstractInsnNode): SavedStackDescriptor {
val beforeInlineMarker = context.openingInlineMethodMarker[afterInlineMarker] val beforeInlineMarker = context.openingInlineMethodMarker[afterInlineMarker]
return allocatedHandles[beforeInlineMarker].savedStackDescriptor return allocatedHandles[beforeInlineMarker]!!.savedStackDescriptor
} }
fun markAfterInlineMarkerEmitted(afterInlineMarker: AbstractInsnNode) { fun markAfterInlineMarkerEmitted(afterInlineMarker: AbstractInsnNode) {
val beforeInlineMarker = context.openingInlineMethodMarker[afterInlineMarker] val beforeInlineMarker = context.openingInlineMethodMarker[afterInlineMarker]
markEmitted(beforeInlineMarker) markEmitted(beforeInlineMarker!!)
} }
private fun markEmitted(saveStackMarker: AbstractInsnNode) { private fun markEmitted(saveStackMarker: AbstractInsnNode) {
val allocatedHandle = allocatedHandles[saveStackMarker] val allocatedHandle = allocatedHandles[saveStackMarker]!!
allocatedHandle.markRestoreNodeEmitted() allocatedHandle.markRestoreNodeEmitted()
if (allocatedHandle.isFullyEmitted()) { if (allocatedHandle.isFullyEmitted()) {
allocatedHandles.remove(saveStackMarker) allocatedHandles.remove(saveStackMarker)
@@ -94,7 +94,7 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
return INTERNAL_ERROR return INTERNAL_ERROR
} }
catch (e: CliOptionProcessingException) { catch (e: CliOptionProcessingException) {
messageSeverityCollector.report(CompilerMessageSeverity.ERROR, e.getMessage(), CompilerMessageLocation.NO_LOCATION) messageSeverityCollector.report(CompilerMessageSeverity.ERROR, e.getMessage()!!, CompilerMessageLocation.NO_LOCATION)
return INTERNAL_ERROR return INTERNAL_ERROR
} }
catch (t: Throwable) { catch (t: Throwable) {
@@ -61,7 +61,7 @@ public class JavaAnnotationCallChecker : CallChecker {
if (it.getArgumentExpression() != null) { if (it.getArgumentExpression() != null) {
context.trace.report( context.trace.report(
diagnostic.on( diagnostic.on(
it.getArgumentExpression() it.getArgumentExpression()!!
) )
) )
} }
@@ -172,7 +172,7 @@ public class PublicFieldAnnotationChecker: DeclarationChecker {
if (descriptor !is PropertyDescriptor) { if (descriptor !is PropertyDescriptor) {
report() report()
} }
else if (!bindingContext.get<PropertyDescriptor, Boolean>(BindingContext.BACKING_FIELD_REQUIRED, descriptor)) { else if (!bindingContext.get<PropertyDescriptor, Boolean>(BindingContext.BACKING_FIELD_REQUIRED, descriptor)!!) {
report() report()
} }
} }
@@ -301,7 +301,7 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
val baseExpression = expression.getLeft() val baseExpression = expression.getLeft()
val baseExpressionType = baseExpression?.let{ c.trace.getType(it) } ?: return val baseExpressionType = baseExpression?.let{ c.trace.getType(it) } ?: return
doIfNotNull( doIfNotNull(
DataFlowValueFactory.createDataFlowValue(baseExpression, baseExpressionType, c), DataFlowValueFactory.createDataFlowValue(baseExpression!!, baseExpressionType, c),
c c
) { ) {
c.trace.report(Errors.USELESS_ELVIS.on(expression, baseExpressionType)) c.trace.report(Errors.USELESS_ELVIS.on(expression, baseExpressionType))
@@ -364,7 +364,7 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
} }
else { else {
doIfNotNull(dataFlowValue, c) { doIfNotNull(dataFlowValue, c) {
c.trace.report(Errors.UNNECESSARY_SAFE_CALL.on(c.call.getCallOperationNode().getPsi(), receiverArgument.getType())) c.trace.report(Errors.UNNECESSARY_SAFE_CALL.on(c.call.getCallOperationNode()!!.getPsi(), receiverArgument.getType()))
} }
} }
} }
@@ -289,7 +289,7 @@ public object PositioningStrategies {
public val VARIANCE_IN_PROJECTION: PositioningStrategy<JetTypeProjection> = object : PositioningStrategy<JetTypeProjection>() { public val VARIANCE_IN_PROJECTION: PositioningStrategy<JetTypeProjection> = object : PositioningStrategy<JetTypeProjection>() {
override fun mark(element: JetTypeProjection): List<TextRange> { override fun mark(element: JetTypeProjection): List<TextRange> {
return markNode(element.getProjectionNode()) return markNode(element.getProjectionNode()!!)
} }
} }
@@ -43,6 +43,6 @@ public class KDocLink(node: ASTNode) : JetElementImpl(node) {
return if (tag != null && tag.getSubjectLink() == this) tag else null return if (tag != null && tag.getSubjectLink() == this) tag else null
} }
override fun getReferences(): Array<out PsiReference>? = override fun getReferences(): Array<out PsiReference> =
ReferenceProvidersRegistry.getReferencesFromProviders(this) ReferenceProvidersRegistry.getReferencesFromProviders(this)
} }
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.lexer.JetTokens
public abstract class JetDoubleColonExpression(node: ASTNode) : JetExpressionImpl(node) { public abstract class JetDoubleColonExpression(node: ASTNode) : JetExpressionImpl(node) {
public fun getTypeReference(): JetTypeReference? = findChildByType(JetNodeTypes.TYPE_REFERENCE) public fun getTypeReference(): JetTypeReference? = findChildByType(JetNodeTypes.TYPE_REFERENCE)
public fun getDoubleColonTokenReference(): PsiElement = findChildByType(JetTokens.COLONCOLON) public fun getDoubleColonTokenReference(): PsiElement = findChildByType(JetTokens.COLONCOLON)!!
override fun <R, D> accept(visitor: JetVisitor<R, D>, data: D): R { override fun <R, D> accept(visitor: JetVisitor<R, D>, data: D): R {
return visitor.visitDoubleColonExpression(this, data) return visitor.visitDoubleColonExpression(this, data)
@@ -75,5 +75,5 @@ public class JetObjectDeclaration : JetClassOrObject {
public fun isObjectLiteral(): Boolean = getStub()?.isObjectLiteral() ?: (getParent() is JetObjectLiteralExpression) public fun isObjectLiteral(): Boolean = getStub()?.isObjectLiteral() ?: (getParent() is JetObjectLiteralExpression)
public fun getObjectKeyword(): PsiElement = findChildByType(JetTokens.OBJECT_KEYWORD) public fun getObjectKeyword(): PsiElement = findChildByType(JetTokens.OBJECT_KEYWORD)!!
} }
@@ -251,7 +251,7 @@ public class JetPsiFactory(private val project: Project) {
} }
public fun createFunctionLiteralParameterList(text: String): JetParameterList { public fun createFunctionLiteralParameterList(text: String): JetParameterList {
return (createExpression("{ $text -> 0}") as JetFunctionLiteralExpression).getFunctionLiteral().getValueParameterList() return (createExpression("{ $text -> 0}") as JetFunctionLiteralExpression).getFunctionLiteral().getValueParameterList()!!
} }
public fun createEnumEntry(text: String): JetEnumEntry { public fun createEnumEntry(text: String): JetEnumEntry {
@@ -284,7 +284,7 @@ public class JetPsiFactory(private val project: Project) {
} }
public fun createPackageDirective(fqName: FqName): JetPackageDirective { public fun createPackageDirective(fqName: FqName): JetPackageDirective {
return createFile("package ${fqName.asString()}").getPackageDirective() return createFile("package ${fqName.asString()}").getPackageDirective()!!
} }
public fun createPackageDirectiveIfNeeded(fqName: FqName): JetPackageDirective? { public fun createPackageDirectiveIfNeeded(fqName: FqName): JetPackageDirective? {
@@ -39,7 +39,7 @@ public class KotlinStringLiteralTextEscaper(host: JetStringTemplateExpression):
} }
when (child) { when (child) {
is JetLiteralStringTemplateEntry -> { is JetLiteralStringTemplateEntry -> {
val textRange = rangeInsideHost.intersection(childRange).shiftRight(-childRange.getStartOffset()) val textRange = rangeInsideHost.intersection(childRange)!!.shiftRight(-childRange.getStartOffset())
outChars.append(child.getText(), textRange.getStartOffset(), textRange.getEndOffset()) outChars.append(child.getText(), textRange.getStartOffset(), textRange.getEndOffset())
textRange.getLength().times { textRange.getLength().times {
sourceOffsetsList.add(sourceOffset++) sourceOffsetsList.add(sourceOffset++)
@@ -144,9 +144,9 @@ public fun JetElement.getCalleeHighlightingRange(): TextRange {
) ?: return getTextRange() ) ?: return getTextRange()
val startOffset = annotationEntry.getAtSymbol()?.getTextRange()?.getStartOffset() val startOffset = annotationEntry.getAtSymbol()?.getTextRange()?.getStartOffset()
?: annotationEntry.getCalleeExpression().startOffset ?: annotationEntry.getCalleeExpression()!!.startOffset
return TextRange(startOffset, annotationEntry.getCalleeExpression().endOffset) return TextRange(startOffset, annotationEntry.getCalleeExpression()!!.endOffset)
} }
// ---------- Block expression ------------------------------------------------------------------------------------------------------------- // ---------- Block expression -------------------------------------------------------------------------------------------------------------
@@ -210,7 +210,7 @@ public class LazyTopDownAnalyzer {
} }
override fun visitAnonymousInitializer(initializer: JetClassInitializer) { override fun visitAnonymousInitializer(initializer: JetClassInitializer) {
val classOrObject = PsiTreeUtil.getParentOfType<JetClassOrObject>(initializer, javaClass<JetClassOrObject>()) val classOrObject = PsiTreeUtil.getParentOfType<JetClassOrObject>(initializer, javaClass<JetClassOrObject>())!!
c.getAnonymousInitializers().put(initializer, lazyDeclarationResolver!!.resolveToDescriptor(classOrObject) as ClassDescriptorWithResolutionScopes) c.getAnonymousInitializers().put(initializer, lazyDeclarationResolver!!.resolveToDescriptor(classOrObject) as ClassDescriptorWithResolutionScopes)
} }
@@ -226,7 +226,7 @@ public class TypeResolver(
val receiverTypeRef = type.getReceiverTypeReference() val receiverTypeRef = type.getReceiverTypeReference()
val receiverType = if (receiverTypeRef == null) null else resolveType(c.noBareTypes(), receiverTypeRef) val receiverType = if (receiverTypeRef == null) null else resolveType(c.noBareTypes(), receiverTypeRef)
val parameterTypes = type.getParameters().map { resolveType(c.noBareTypes(), it.getTypeReference()) } val parameterTypes = type.getParameters().map { resolveType(c.noBareTypes(), it.getTypeReference()!!) }
val returnTypeRef = type.getReturnTypeReference() val returnTypeRef = type.getReturnTypeReference()
val returnType = if (returnTypeRef != null) val returnType = if (returnTypeRef != null)
@@ -176,7 +176,7 @@ class VarianceChecker(private val trace: BindingTrace) {
for (argumentBinding in getArgumentBindings()) { for (argumentBinding in getArgumentBindings()) {
if (argumentBinding == null || argumentBinding.typeParameterDescriptor == null) continue if (argumentBinding == null || argumentBinding.typeParameterDescriptor == null) continue
val projectionKind = getEffectiveProjectionKind(argumentBinding.typeParameterDescriptor, argumentBinding.typeProjection)!! val projectionKind = getEffectiveProjectionKind(argumentBinding.typeParameterDescriptor!!, argumentBinding.typeProjection)!!
val newPosition = when (projectionKind) { val newPosition = when (projectionKind) {
OUT -> position OUT -> position
IN -> position.opposite() IN -> position.opposite()
@@ -77,7 +77,7 @@ public class CallCompleter(
resolvedCall.variableCall.getCall().getCalleeExpression() resolvedCall.variableCall.getCall().getCalleeExpression()
else else
resolvedCall.getCall().getCalleeExpression() resolvedCall.getCall().getCalleeExpression()
context.symbolUsageValidator.validateCall(resolvedCall.getResultingDescriptor(), context.trace, element) context.symbolUsageValidator.validateCall(resolvedCall.getResultingDescriptor(), context.trace, element!!)
} }
if (results.isSingleResult() && results.getResultingCall().getStatus().isSuccess()) { if (results.isSingleResult() && results.getResultingCall().getStatus().isSuccess()) {
@@ -74,7 +74,7 @@ class CapturingInClosureChecker : CallChecker {
if (InlineUtil.isInlinedArgument(scopeDeclaration as JetFunction, context, false)) { if (InlineUtil.isInlinedArgument(scopeDeclaration as JetFunction, context, false)) {
val scopeContainerParent = scopeContainer.getContainingDeclaration() val scopeContainerParent = scopeContainer.getContainingDeclaration()
assert(scopeContainerParent != null) { "parent is null for " + scopeContainer } assert(scopeContainerParent != null) { "parent is null for " + scopeContainer }
return !isCapturedVariable(variableParent, scopeContainerParent) || isCapturedInInline(context, scopeContainerParent, variableParent) return !isCapturedVariable(variableParent, scopeContainerParent!!) || isCapturedInInline(context, scopeContainerParent, variableParent)
} }
return false return false
} }
@@ -226,7 +226,7 @@ public class ConstantExpressionEvaluator private constructor(val trace: BindingT
if (argumentForParameter == null) return null if (argumentForParameter == null) return null
if (isDivisionByZero(resultingDescriptorName.asString(), argumentForParameter.value)) { if (isDivisionByZero(resultingDescriptorName.asString(), argumentForParameter.value)) {
val parentExpression: JetExpression = PsiTreeUtil.getParentOfType(receiverExpression, javaClass()) val parentExpression: JetExpression = PsiTreeUtil.getParentOfType(receiverExpression, javaClass())!!
trace.report(Errors.DIVISION_BY_ZERO.on(parentExpression)) trace.report(Errors.DIVISION_BY_ZERO.on(parentExpression))
return ErrorValue.create("Division by zero") return ErrorValue.create("Division by zero")
} }
@@ -406,7 +406,7 @@ public class ConstantExpressionEvaluator private constructor(val trace: BindingT
} }
override fun visitClassLiteralExpression(expression: JetClassLiteralExpression, expectedType: JetType?): CompileTimeConstant<*>? { override fun visitClassLiteralExpression(expression: JetClassLiteralExpression, expectedType: JetType?): CompileTimeConstant<*>? {
val jetType = trace.getType(expression) val jetType = trace.getType(expression)!!
if (jetType.isError()) return null if (jetType.isError()) return null
return KClassValue(jetType) return KClassValue(jetType)
} }
@@ -97,6 +97,7 @@ public class LazyScriptClassMemberScope protected constructor(
val returnType = scriptDescriptor.getScriptCodeDescriptor().getReturnType() val returnType = scriptDescriptor.getScriptCodeDescriptor().getReturnType()
assert(returnType != null) { "Return type not initialized for " + scriptDescriptor } assert(returnType != null) { "Return type not initialized for " + scriptDescriptor }
returnType!!
propertyDescriptor.setType( propertyDescriptor.setType(
returnType, returnType,
@@ -47,7 +47,7 @@ public class DeprecatedSymbolValidator : SymbolUsageValidator {
override fun validateTypeUsage(targetDescriptor: ClassifierDescriptor, trace: BindingTrace, element: PsiElement) { override fun validateTypeUsage(targetDescriptor: ClassifierDescriptor, trace: BindingTrace, element: PsiElement) {
// Do not check types in annotation entries to prevent cycles in resolve, rely on call message // Do not check types in annotation entries to prevent cycles in resolve, rely on call message
val annotationEntry = JetStubbedPsiUtil.getPsiOrStubParent(element, javaClass<JetAnnotationEntry>(), true) val annotationEntry = JetStubbedPsiUtil.getPsiOrStubParent(element, javaClass<JetAnnotationEntry>(), true)
if (annotationEntry != null && annotationEntry.getCalleeExpression().getConstructorReferenceExpression() == element) if (annotationEntry != null && annotationEntry.getCalleeExpression()!!.getConstructorReferenceExpression() == element)
return return
// Do not check types in calls to super constructor in extends list, rely on call message // Do not check types in calls to super constructor in extends list, rely on call message
@@ -74,7 +74,7 @@ public class LockBasedLazyResolveStorageManager(private val storageManager: Stor
storageManager.compute { trace.record<K>(slice, key) } storageManager.compute { trace.record<K>(slice, key) }
} }
override fun <K, V> get(slice: ReadOnlySlice<K, V>, key: K): V = storageManager.compute { trace.get<K, V>(slice, key) } override fun <K, V> get(slice: ReadOnlySlice<K, V>, key: K): V? = storageManager.compute { trace.get<K, V>(slice, key) }
override fun <K, V> getKeys(slice: WritableSlice<K, V>): Collection<K> = storageManager.compute { trace.getKeys<K, V>(slice) } override fun <K, V> getKeys(slice: WritableSlice<K, V>): Collection<K> = storageManager.compute { trace.getKeys<K, V>(slice) }
@@ -214,7 +214,7 @@ public class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Express
// This is needed for ControlStructureTypingVisitor#visitReturnExpression() to properly type-check returned expressions // This is needed for ControlStructureTypingVisitor#visitReturnExpression() to properly type-check returned expressions
context.trace.record(EXPECTED_RETURN_TYPE, functionLiteral, expectedType) context.trace.record(EXPECTED_RETURN_TYPE, functionLiteral, expectedType)
val typeOfBodyExpression = // Type-check the body val typeOfBodyExpression = // Type-check the body
components.expressionTypingServices.getBlockReturnedType(functionLiteral.getBodyExpression(), COERCION_TO_UNIT, newContext).type components.expressionTypingServices.getBlockReturnedType(functionLiteral.getBodyExpression()!!, COERCION_TO_UNIT, newContext).type
return declaredReturnType ?: computeReturnTypeBasedOnReturnExpressions(functionLiteral, context, typeOfBodyExpression) return declaredReturnType ?: computeReturnTypeBasedOnReturnExpressions(functionLiteral, context, typeOfBodyExpression)
} }
@@ -33,6 +33,6 @@ public class KotlinLightMethodForTraitFakeOverride(
override fun getOrigin(): JetDeclaration = origin override fun getOrigin(): JetDeclaration = origin
override fun copy(): PsiElement { override fun copy(): PsiElement {
return KotlinLightMethodForTraitFakeOverride(getManager(), delegate, origin.copy() as JetDeclaration, getContainingClass()) return KotlinLightMethodForTraitFakeOverride(getManager(), delegate, origin.copy() as JetDeclaration, getContainingClass()!!)
} }
} }
@@ -64,22 +64,22 @@ public object AnnotationSerializer {
override fun visitBooleanValue(value: BooleanValue, data: Unit) { override fun visitBooleanValue(value: BooleanValue, data: Unit) {
setType(Type.BOOLEAN) setType(Type.BOOLEAN)
setIntValue(if (value.getValue()) 1 else 0) setIntValue(if (value.getValue()!!) 1 else 0)
} }
override fun visitByteValue(value: ByteValue, data: Unit) { override fun visitByteValue(value: ByteValue, data: Unit) {
setType(Type.BYTE) setType(Type.BYTE)
setIntValue(value.getValue().toLong()) setIntValue(value.getValue()!!.toLong())
} }
override fun visitCharValue(value: CharValue, data: Unit) { override fun visitCharValue(value: CharValue, data: Unit) {
setType(Type.CHAR) setType(Type.CHAR)
setIntValue(value.getValue().toLong()) setIntValue(value.getValue()!!.toLong())
} }
override fun visitDoubleValue(value: DoubleValue, data: Unit) { override fun visitDoubleValue(value: DoubleValue, data: Unit) {
setType(Type.DOUBLE) setType(Type.DOUBLE)
setDoubleValue(value.getValue()) setDoubleValue(value.getValue()!!)
} }
override fun visitEnumValue(value: EnumValue, data: Unit) { override fun visitEnumValue(value: EnumValue, data: Unit) {
@@ -95,12 +95,12 @@ public object AnnotationSerializer {
override fun visitFloatValue(value: FloatValue, data: Unit) { override fun visitFloatValue(value: FloatValue, data: Unit) {
setType(Type.FLOAT) setType(Type.FLOAT)
setFloatValue(value.getValue()) setFloatValue(value.getValue()!!)
} }
override fun visitIntValue(value: IntValue, data: Unit) { override fun visitIntValue(value: IntValue, data: Unit) {
setType(Type.INT) setType(Type.INT)
setIntValue(value.getValue().toLong()) setIntValue(value.getValue()!!.toLong())
} }
override fun visitKClassValue(value: KClassValue?, data: Unit?) { override fun visitKClassValue(value: KClassValue?, data: Unit?) {
@@ -110,7 +110,7 @@ public object AnnotationSerializer {
override fun visitLongValue(value: LongValue, data: Unit) { override fun visitLongValue(value: LongValue, data: Unit) {
setType(Type.LONG) setType(Type.LONG)
setIntValue(value.getValue()) setIntValue(value.getValue()!!)
} }
override fun visitNullValue(value: NullValue, data: Unit) { override fun visitNullValue(value: NullValue, data: Unit) {
@@ -135,12 +135,12 @@ public object AnnotationSerializer {
override fun visitShortValue(value: ShortValue, data: Unit) { override fun visitShortValue(value: ShortValue, data: Unit) {
setType(Type.SHORT) setType(Type.SHORT)
setIntValue(value.getValue().toLong()) setIntValue(value.getValue()!!.toLong())
} }
override fun visitStringValue(value: StringValue, data: Unit) { override fun visitStringValue(value: StringValue, data: Unit) {
setType(Type.STRING) setType(Type.STRING)
setStringValue(nameTable.getStringIndex(value.getValue())) setStringValue(nameTable.getStringIndex(value.getValue()!!))
} }
}, Unit) }, Unit)
@@ -152,7 +152,7 @@ class LazyOperationsLog(
} }
o.javaClass.getSimpleName() == "LazyJavaClassTypeConstructor" -> { o.javaClass.getSimpleName() == "LazyJavaClassTypeConstructor" -> {
val javaClass = o.field<Any>("this\$0").field<JavaClassImpl>("jClass") val javaClass = o.field<Any>("this\$0").field<JavaClassImpl>("jClass")
javaClass.getPsi().getName().appendQuoted() javaClass.getPsi().getName()!!.appendQuoted()
} }
o.javaClass.getSimpleName() == "DeserializedType" -> { o.javaClass.getSimpleName() == "DeserializedType" -> {
val typeDeserializer = o.field<TypeDeserializer>("typeDeserializer") val typeDeserializer = o.field<TypeDeserializer>("typeDeserializer")
@@ -161,7 +161,7 @@ class LazyOperationsLog(
val text = when (typeProto.getConstructor().getKind()) { val text = when (typeProto.getConstructor().getKind()) {
ProtoBuf.Type.Constructor.Kind.CLASS -> context.nameResolver.getFqName(typeProto.getConstructor().getId()).asString() ProtoBuf.Type.Constructor.Kind.CLASS -> context.nameResolver.getFqName(typeProto.getConstructor().getId()).asString()
ProtoBuf.Type.Constructor.Kind.TYPE_PARAMETER -> { ProtoBuf.Type.Constructor.Kind.TYPE_PARAMETER -> {
val classifier = (o as JetType).getConstructor().getDeclarationDescriptor() val classifier = (o as JetType).getConstructor().getDeclarationDescriptor()!!
"" + classifier.getName() + " in " + DescriptorUtils.getFqName(classifier.getContainingDeclaration()) "" + classifier.getName() + " in " + DescriptorUtils.getFqName(classifier.getContainingDeclaration())
} }
else -> "???" else -> "???"
@@ -143,6 +143,7 @@ public class KotlinCliJavaFileManagerTest : PsiTestCase() {
val pkg = root.createChildDirectory(this, "foo") val pkg = root.createChildDirectory(this, "foo")
val dir = myPsiManager.findDirectory(pkg) val dir = myPsiManager.findDirectory(pkg)
TestCase.assertNotNull(dir) TestCase.assertNotNull(dir)
dir!!
dir.add(PsiFileFactory.getInstance(getProject()).createFileFromText(className + ".java", JavaFileType.INSTANCE, text)) dir.add(PsiFileFactory.getInstance(getProject()).createFileFromText(className + ".java", JavaFileType.INSTANCE, text))
val coreJavaFileManagerExt = KotlinCliJavaFileManagerImpl(myPsiManager) val coreJavaFileManagerExt = KotlinCliJavaFileManagerImpl(myPsiManager)
coreJavaFileManagerExt.initIndex(JvmDependenciesIndex(listOf(JavaRoot(root, JavaRoot.RootType.SOURCE)))) coreJavaFileManagerExt.initIndex(JvmDependenciesIndex(listOf(JavaRoot(root, JavaRoot.RootType.SOURCE))))
@@ -194,9 +194,9 @@ public object InlineTestUtil {
override fun getFileContents(): ByteArray = throw UnsupportedOperationException() override fun getFileContents(): ByteArray = throw UnsupportedOperationException()
override fun hashCode(): Int = throw UnsupportedOperationException() override fun hashCode(): Int = throw UnsupportedOperationException()
override fun equals(other: Any?): Boolean = throw UnsupportedOperationException() override fun equals(other: Any?): Boolean = throw UnsupportedOperationException()
override fun toString(): String? = throw UnsupportedOperationException() override fun toString(): String = throw UnsupportedOperationException()
} }
}.getClassHeader() }!!.getClassHeader()
} }
private class InlineInfo(val inlineMethods: Set<MethodInfo>, val classHeaders: Map<String, KotlinClassHeader>) private class InlineInfo(val inlineMethods: Set<MethodInfo>, val classHeaders: Map<String, KotlinClassHeader>)
@@ -79,7 +79,7 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment
is JetPrimaryConstructor -> { is JetPrimaryConstructor -> {
val jetClassOrObject: JetClassOrObject = declaringElement.getContainingClassOrObject() val jetClassOrObject: JetClassOrObject = declaringElement.getContainingClassOrObject()
val classDescriptor = getDescriptor(jetClassOrObject, resolveSession) as ClassDescriptor val classDescriptor = getDescriptor(jetClassOrObject, resolveSession) as ClassDescriptor
addCorrespondingParameterDescriptor(classDescriptor.getUnsubstitutedPrimaryConstructor(), parameter) addCorrespondingParameterDescriptor(classDescriptor.getUnsubstitutedPrimaryConstructor()!!, parameter)
} }
else -> super.visitParameter(parameter) else -> super.visitParameter(parameter)
} }
@@ -66,7 +66,7 @@ public abstract class AbstractResolvedCallsTest : JetLiteFixture() {
open protected fun buildCachedCall( open protected fun buildCachedCall(
bindingContext: BindingContext, jetFile: JetFile, text: String bindingContext: BindingContext, jetFile: JetFile, text: String
): Pair<PsiElement?, ResolvedCall<out CallableDescriptor>?> { ): Pair<PsiElement?, ResolvedCall<out CallableDescriptor>?> {
val element = jetFile.findElementAt(text.indexOf("<caret>")) val element = jetFile.findElementAt(text.indexOf("<caret>"))!!
val expression = element.getStrictParentOfType<JetExpression>() val expression = element.getStrictParentOfType<JetExpression>()
val cachedCall = expression?.getParentResolvedCall(bindingContext, strict = false) val cachedCall = expression?.getParentResolvedCall(bindingContext, strict = false)
@@ -106,7 +106,7 @@ public class CapturedTypeApproximationTest() : JetLiteFixture() {
val testSubstitutions = createTestSubstitutions(typeParameters) val testSubstitutions = createTestSubstitutions(typeParameters)
for (testSubstitution in testSubstitutions) { for (testSubstitution in testSubstitutions) {
val typeSubstitutor = createTestSubstitutor(testSubstitution) val typeSubstitutor = createTestSubstitutor(testSubstitution)
val typeWithCapturedType = typeSubstitutor.substituteWithoutApproximation(TypeProjectionImpl(INVARIANT, type))!!.getType() val typeWithCapturedType = typeSubstitutor.substituteWithoutApproximation(TypeProjectionImpl(INVARIANT, type!!))!!.getType()
val (lower, upper) = approximateCapturedTypes(typeWithCapturedType) val (lower, upper) = approximateCapturedTypes(typeWithCapturedType)
val substitution = approximateCapturedTypesIfNecessary(TypeProjectionImpl(INVARIANT, typeWithCapturedType)) val substitution = approximateCapturedTypesIfNecessary(TypeProjectionImpl(INVARIANT, typeWithCapturedType))
@@ -63,7 +63,7 @@ fun DeclarationDescriptor.getCapturedTypeParameters(): Collection<TypeParameterD
public fun JetType.getContainedAndCapturedTypeParameterConstructors(): Collection<TypeConstructor> { public fun JetType.getContainedAndCapturedTypeParameterConstructors(): Collection<TypeConstructor> {
// todo type arguments (instead of type parameters) of the type of outer class must be considered; KT-6325 // todo type arguments (instead of type parameters) of the type of outer class must be considered; KT-6325
val typeParameters = getContainedTypeParameters() + getConstructor().getDeclarationDescriptor().getCapturedTypeParameters() val typeParameters = getContainedTypeParameters() + getConstructor().getDeclarationDescriptor()!!.getCapturedTypeParameters()
return typeParameters.map { it.getTypeConstructor() }.toReadOnlyList() return typeParameters.map { it.getTypeConstructor() }.toReadOnlyList()
} }
@@ -170,7 +170,7 @@ public class MemberDeserializer(private val c: DeserializationContext) {
} }
private fun valueParameters(callable: Callable, kind: AnnotatedCallableKind): List<ValueParameterDescriptor> { private fun valueParameters(callable: Callable, kind: AnnotatedCallableKind): List<ValueParameterDescriptor> {
val containerOfCallable = c.containingDeclaration.getContainingDeclaration().asProtoContainer() val containerOfCallable = c.containingDeclaration.getContainingDeclaration()!!.asProtoContainer()
return callable.getValueParameterList().mapIndexed { i, proto -> return callable.getValueParameterList().mapIndexed { i, proto ->
ValueParameterDescriptorImpl( ValueParameterDescriptorImpl(
@@ -102,7 +102,7 @@ public fun CallableDescriptor.substituteExtensionIfCallable(
return if (substitutors.any()) listOf(this) else listOf() return if (substitutors.any()) listOf(this) else listOf()
} }
else { else {
return substitutors.map { substitute(it) }.toList() return substitutors.map { substitute(it)!! }.toList()
} }
} }
@@ -492,19 +492,19 @@ public abstract class ElementResolver protected constructor(
) : BodiesResolveContext { ) : BodiesResolveContext {
override fun getFiles(): Collection<JetFile> = setOf() override fun getFiles(): Collection<JetFile> = setOf()
override fun getDeclaredClasses(): Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> = mapOf() override fun getDeclaredClasses(): MutableMap<JetClassOrObject, ClassDescriptorWithResolutionScopes> = hashMapOf()
override fun getAnonymousInitializers(): Map<JetClassInitializer, ClassDescriptorWithResolutionScopes> = mapOf() override fun getAnonymousInitializers(): MutableMap<JetClassInitializer, ClassDescriptorWithResolutionScopes> = hashMapOf()
override fun getSecondaryConstructors(): Map<JetSecondaryConstructor, ConstructorDescriptor> = mapOf() override fun getSecondaryConstructors(): MutableMap<JetSecondaryConstructor, ConstructorDescriptor> = hashMapOf()
override fun getProperties(): Map<JetProperty, PropertyDescriptor> = mapOf() override fun getProperties(): MutableMap<JetProperty, PropertyDescriptor> = hashMapOf()
override fun getFunctions(): Map<JetNamedFunction, SimpleFunctionDescriptor> = mapOf() override fun getFunctions(): MutableMap<JetNamedFunction, SimpleFunctionDescriptor> = hashMapOf()
override fun getDeclaringScope(declaration: JetDeclaration): JetScope? = declaringScopes(declaration) override fun getDeclaringScope(declaration: JetDeclaration): JetScope? = declaringScopes(declaration)
override fun getScripts(): Map<JetScript, ScriptDescriptor> = mapOf() override fun getScripts(): MutableMap<JetScript, ScriptDescriptor> = hashMapOf()
override fun getOuterDataFlowInfo(): DataFlowInfo = DataFlowInfo.EMPTY override fun getOuterDataFlowInfo(): DataFlowInfo = DataFlowInfo.EMPTY
@@ -108,7 +108,7 @@ private class ClassClsStubBuilder(
val superTypeRefs = supertypeIds.filterNot { val superTypeRefs = supertypeIds.filterNot {
//TODO: filtering function types should go away //TODO: filtering function types should go away
KotlinBuiltIns.isNumberedFunctionClassFqName(it.asSingleFqName().toUnsafe()) KotlinBuiltIns.isNumberedFunctionClassFqName(it.asSingleFqName().toUnsafe())
}.map { it.getShortClassName().ref() }.toTypedArray() }.map { it.getShortClassName().ref()!! }.toTypedArray()
return when (classKind) { return when (classKind) {
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> { ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> {
KotlinObjectStubImpl( KotlinObjectStubImpl(
@@ -49,7 +49,7 @@ public open class KotlinClsStubBuilder : ClsStubBuilder() {
} }
fun doBuildFileStub(file: VirtualFile): PsiFileStub<JetFile>? { fun doBuildFileStub(file: VirtualFile): PsiFileStub<JetFile>? {
val kotlinBinaryClass = KotlinBinaryClassCache.getKotlinBinaryClass(file) val kotlinBinaryClass = KotlinBinaryClassCache.getKotlinBinaryClass(file)!!
val header = kotlinBinaryClass.getClassHeader() val header = kotlinBinaryClass.getClassHeader()
val classId = kotlinBinaryClass.getClassId() val classId = kotlinBinaryClass.getClassId()
val packageFqName = classId.getPackageFqName() val packageFqName = classId.getPackageFqName()
@@ -216,7 +216,7 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) {
val typeConstraintListStub = KotlinPlaceHolderStubImpl<JetTypeConstraintList>(parent, JetStubElementTypes.TYPE_CONSTRAINT_LIST) val typeConstraintListStub = KotlinPlaceHolderStubImpl<JetTypeConstraintList>(parent, JetStubElementTypes.TYPE_CONSTRAINT_LIST)
for ((name, type) in protosForTypeConstraintList) { for ((name, type) in protosForTypeConstraintList) {
val typeConstraintStub = KotlinPlaceHolderStubImpl<JetTypeConstraint>(typeConstraintListStub, JetStubElementTypes.TYPE_CONSTRAINT) val typeConstraintStub = KotlinPlaceHolderStubImpl<JetTypeConstraint>(typeConstraintListStub, JetStubElementTypes.TYPE_CONSTRAINT)
KotlinNameReferenceExpressionStubImpl(typeConstraintStub, name.ref()) KotlinNameReferenceExpressionStubImpl(typeConstraintStub, name.ref()!!)
createTypeReferenceStub(typeConstraintStub, type) createTypeReferenceStub(typeConstraintStub, type)
} }
} }
@@ -203,6 +203,6 @@ val ProtoBuf.Callable.annotatedCallableKind: AnnotatedCallableKind
} }
} }
fun Name.ref() = StringRef.fromString(this.asString()) fun Name.ref() = StringRef.fromString(this.asString())!!
fun FqName.ref() = StringRef.fromString(this.asString()) fun FqName.ref() = StringRef.fromString(this.asString())!!
@@ -147,7 +147,7 @@ public fun buildDecompiledText(
if (descriptor is CallableDescriptor) { if (descriptor is CallableDescriptor) {
//NOTE: assuming that only return types can be flexible //NOTE: assuming that only return types can be flexible
if (descriptor.getReturnType().isFlexible()) { if (descriptor.getReturnType()!!.isFlexible()) {
builder.append(" ").append(FLEXIBLE_TYPE_COMMENT) builder.append(" ").append(FLEXIBLE_TYPE_COMMENT)
} }
} }
@@ -191,7 +191,7 @@ public fun buildDecompiledText(
companionNeeded = false companionNeeded = false
newlineExceptFirst() newlineExceptFirst()
builder.append(subindent) builder.append(subindent)
appendDescriptor(companionObject, subindent) appendDescriptor(companionObject!!, subindent)
} }
if (member is CallableMemberDescriptor if (member is CallableMemberDescriptor
&& member.getKind() != CallableMemberDescriptor.Kind.DECLARATION && member.getKind() != CallableMemberDescriptor.Kind.DECLARATION
@@ -90,7 +90,7 @@ private object DeclarationKindDetector : JetVisitor<AnnotationHostKind?, Unit?>(
override fun visitProperty(d: JetProperty, _: Unit?) = detect(d, d.getValOrVarKeyword().getText()!!) override fun visitProperty(d: JetProperty, _: Unit?) = detect(d, d.getValOrVarKeyword().getText()!!)
override fun visitMultiDeclaration(d: JetMultiDeclaration, _: Unit?) = detect(d, d.getValOrVarKeyword()?.getText() ?: "val", override fun visitMultiDeclaration(d: JetMultiDeclaration, _: Unit?) = detect(d, d.getValOrVarKeyword()?.getText() ?: "val",
name = d.getEntries().map { it.getName() }.join(", ", "(", ")")) name = d.getEntries().map { it.getName()!! }.join(", ", "(", ")"))
override fun visitTypeParameter(d: JetTypeParameter, _: Unit?) = detect(d, "type parameter", newLineNeeded = false) override fun visitTypeParameter(d: JetTypeParameter, _: Unit?) = detect(d, "type parameter", newLineNeeded = false)
@@ -58,7 +58,7 @@ public class KDocReference(element: KDocName): JetMultiReference<KDocName>(eleme
override fun handleElementRename(newElementName: String?): PsiElement? { override fun handleElementRename(newElementName: String?): PsiElement? {
val textRange = getElement().getNameTextRange() val textRange = getElement().getNameTextRange()
val newText = textRange.replace(getElement().getText(), newElementName) val newText = textRange.replace(getElement().getText(), newElementName!!)
val newLink = KDocElementFactory(getElement().getProject()).createNameFromText(newText) val newLink = KDocElementFactory(getElement().getProject()).createNameFromText(newText)
return getElement().replace(newLink) return getElement().replace(newLink)
} }
@@ -181,5 +181,5 @@ private fun getOuterScope(descriptor: DeclarationDescriptorWithSource, resolutio
return resolutionFacade.getFileTopLevelScope(containingFile) return resolutionFacade.getFileTopLevelScope(containingFile)
} }
} }
return getResolutionScope(resolutionFacade, parent) return getResolutionScope(resolutionFacade, parent!!)
} }
@@ -72,7 +72,7 @@ class AllClassesCompletion(private val parameters: CompletionParameters,
} }
private fun PsiClass.isSyntheticKotlinClass(): Boolean { private fun PsiClass.isSyntheticKotlinClass(): Boolean {
if (!getName().contains('$')) return false // optimization to not analyze annotations of all classes if (!getName()!!.contains('$')) return false // optimization to not analyze annotations of all classes
return getModifierList()?.findAnnotation(javaClass<kotlin.jvm.internal.KotlinSyntheticClass>().getName()) != null return getModifierList()?.findAnnotation(javaClass<kotlin.jvm.internal.KotlinSyntheticClass>().getName()) != null
} }
} }
@@ -289,7 +289,7 @@ fun LookupElementFactory.createBackingFieldLookupElement(
if (accessors.all { it.getBodyExpression() == null }) return null // makes no sense to access backing field - it's the same as accessing property directly if (accessors.all { it.getBodyExpression() == null }) return null // makes no sense to access backing field - it's the same as accessing property directly
val bindingContext = resolutionFacade.analyze(declaration) val bindingContext = resolutionFacade.analyze(declaration)
if (!bindingContext[BindingContext.BACKING_FIELD_REQUIRED, property]) return null if (!bindingContext[BindingContext.BACKING_FIELD_REQUIRED, property]!!) return null
val lookupElement = createLookupElement(property, true) val lookupElement = createLookupElement(property, true)
return object : LookupElementDecorator<LookupElement>(lookupElement) { return object : LookupElementDecorator<LookupElement>(lookupElement) {
@@ -64,7 +64,7 @@ class KDocNameCompletionSession(parameters: CompletionParameters,
val position = parameters.getPosition().getParentOfType<KDocName>(false) ?: return val position = parameters.getPosition().getParentOfType<KDocName>(false) ?: return
val declaration = position.getContainingDoc().getOwner() ?: return val declaration = position.getContainingDoc().getOwner() ?: return
val kdocLink = position.getStrictParentOfType<KDocLink>()!! val kdocLink = position.getStrictParentOfType<KDocLink>()!!
val declarationDescriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, declaration] val declarationDescriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, declaration]!!
if (kdocLink.getTagIfSubject()?.knownTag == KDocKnownTag.PARAM) { if (kdocLink.getTagIfSubject()?.knownTag == KDocKnownTag.PARAM) {
addParamCompletions(position, declarationDescriptor) addParamCompletions(position, declarationDescriptor)
} else { } else {
@@ -104,7 +104,7 @@ public class LookupElementFactory(
val lookupObject = object : DeclarationLookupObjectImpl(null, psiClass, resolutionFacade) { val lookupObject = object : DeclarationLookupObjectImpl(null, psiClass, resolutionFacade) {
override fun getIcon(flags: Int) = psiClass.getIcon(flags) override fun getIcon(flags: Int) = psiClass.getIcon(flags)
} }
var element = LookupElementBuilder.create(lookupObject, psiClass.getName()) var element = LookupElementBuilder.create(lookupObject, psiClass.getName()!!)
.withInsertHandler(KotlinClassInsertHandler) .withInsertHandler(KotlinClassInsertHandler)
val typeParams = psiClass.getTypeParameters() val typeParams = psiClass.getTypeParameters()
@@ -123,7 +123,7 @@ public class LookupElementFactory(
itemText = containerName.substringAfterLast('.') + "." + itemText itemText = containerName.substringAfterLast('.') + "." + itemText
containerName = containerName.substringBeforeLast('.', FqName.ROOT.toString()) containerName = containerName.substringBeforeLast('.', FqName.ROOT.toString())
} }
element = element.withPresentableText(itemText) element = element.withPresentableText(itemText!!)
} }
} }
@@ -134,7 +134,7 @@ class ParameterNameAndTypeCompletion(
} }
private fun addSuggestionsForJavaClass(psiClass: PsiClass, userPrefix: String, prefixMatcher: PrefixMatcher) { private fun addSuggestionsForJavaClass(psiClass: PsiClass, userPrefix: String, prefixMatcher: PrefixMatcher) {
addSuggestions(psiClass.getName(), userPrefix, prefixMatcher, JavaClassType(psiClass)) addSuggestions(psiClass.getName()!!, userPrefix, prefixMatcher, JavaClassType(psiClass))
} }
private fun addSuggestions(className: String, userPrefix: String, prefixMatcher: PrefixMatcher, type: Type) { private fun addSuggestions(className: String, userPrefix: String, prefixMatcher: PrefixMatcher, type: Type) {
@@ -39,7 +39,7 @@ object CastReceiverInsertHandler : KotlinCallableInsertHandler() {
val project = context.getProject() val project = context.getProject()
val thisObj = if (descriptor.getExtensionReceiverParameter() != null) descriptor.getExtensionReceiverParameter() else descriptor.getDispatchReceiverParameter() val thisObj = if (descriptor.getExtensionReceiverParameter() != null) descriptor.getExtensionReceiverParameter() else descriptor.getDispatchReceiverParameter()
val fqName = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(thisObj.getType().getConstructor().getDeclarationDescriptor()) val fqName = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(thisObj!!.getType().getConstructor().getDeclarationDescriptor()!!)
val parentCast = JetPsiFactory(project).createExpression("(expr as $fqName)") as JetParenthesizedExpression val parentCast = JetPsiFactory(project).createExpression("(expr as $fqName)") as JetParenthesizedExpression
val cast = parentCast.getExpression() as JetBinaryExpressionWithTypeRHS val cast = parentCast.getExpression() as JetBinaryExpressionWithTypeRHS
@@ -51,7 +51,7 @@ object CastReceiverInsertHandler : KotlinCallableInsertHandler() {
val expr = receiver.replace(parentCast) as JetParenthesizedExpression val expr = receiver.replace(parentCast) as JetParenthesizedExpression
ShortenReferences.DEFAULT.process((expr.getExpression() as JetBinaryExpressionWithTypeRHS).getRight()) ShortenReferences.DEFAULT.process((expr.getExpression() as JetBinaryExpressionWithTypeRHS).getRight()!!)
} }
} }
} }
@@ -50,7 +50,7 @@ object KotlinClassInsertHandler : BaseDeclarationInsertHandler() {
// first try to resolve short name for faster handling // first try to resolve short name for faster handling
val token = file.findElementAt(startOffset) val token = file.findElementAt(startOffset)
val nameRef = token.getParent() as? JetNameReferenceExpression val nameRef = token!!.getParent() as? JetNameReferenceExpression
if (nameRef != null) { if (nameRef != null) {
val bindingContext = nameRef.getResolutionFacade().analyze(nameRef, BodyResolveMode.PARTIAL) val bindingContext = nameRef.getResolutionFacade().analyze(nameRef, BodyResolveMode.PARTIAL)
val target = bindingContext[BindingContext.SHORT_REFERENCE_TO_COMPANION_OBJECT, nameRef] val target = bindingContext[BindingContext.SHORT_REFERENCE_TO_COMPANION_OBJECT, nameRef]
@@ -391,7 +391,7 @@ class SmartCompletion(
null null
} }
val scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, expressionWithType) val scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, expressionWithType)!!
val iterableDetector = IterableTypesDetector(project, moduleDescriptor, scope) val iterableDetector = IterableTypesDetector(project, moduleDescriptor, scope)
return buildResultByTypeFilter(expressionWithType, receiver, Tail.RPARENTH) { iterableDetector.isIterable(it, loopVarType) } return buildResultByTypeFilter(expressionWithType, receiver, Tail.RPARENTH) { iterableDetector.isIterable(it, loopVarType) }
@@ -403,7 +403,7 @@ class SmartCompletion(
if (operationToken != JetTokens.IN_KEYWORD && operationToken != JetTokens.NOT_IN || expressionWithType != binaryExpression.getRight()) return null if (operationToken != JetTokens.IN_KEYWORD && operationToken != JetTokens.NOT_IN || expressionWithType != binaryExpression.getRight()) return null
val leftOperandType = binaryExpression.getLeft()?.let { bindingContext.getType(it) } ?: return null val leftOperandType = binaryExpression.getLeft()?.let { bindingContext.getType(it) } ?: return null
val scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, expressionWithType) val scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, expressionWithType)!!
val detector = TypesWithContainsDetector(scope, leftOperandType, project, moduleDescriptor) val detector = TypesWithContainsDetector(scope, leftOperandType, project, moduleDescriptor)
return buildResultByTypeFilter(expressionWithType, receiver, null) { detector.hasContains(it) } return buildResultByTypeFilter(expressionWithType, receiver, null) { detector.hasContains(it) }
@@ -56,7 +56,7 @@ class TypesWithContainsDetector(
} }
private fun isGoodContainsFunction(function: FunctionDescriptor, freeTypeParams: Collection<TypeParameterDescriptor>): Boolean { private fun isGoodContainsFunction(function: FunctionDescriptor, freeTypeParams: Collection<TypeParameterDescriptor>): Boolean {
if (!TypeUtils.equalTypes(function.getReturnType(), booleanType)) return false if (!TypeUtils.equalTypes(function.getReturnType()!!, booleanType)) return false
val parameter = function.getValueParameters().singleOrNull() ?: return false val parameter = function.getValueParameters().singleOrNull() ?: return false
val parameterType = HeuristicSignatures.correctedParameterType(function, parameter, moduleDescriptor, project) ?: parameter.getType() val parameterType = HeuristicSignatures.correctedParameterType(function, parameter, moduleDescriptor, project) ?: parameter.getType()
val fuzzyParameterType = FuzzyType(parameterType, function.getTypeParameters() + freeTypeParams) val fuzzyParameterType = FuzzyType(parameterType, function.getTypeParameters() + freeTypeParams)
@@ -270,7 +270,7 @@ fun LookupElementFactory.createLookupElement(
element = element.keepOldArgumentListOnTab() element = element.keepOldArgumentListOnTab()
} }
if (descriptor is ValueParameterDescriptor && bindingContext[BindingContext.AUTO_CREATED_IT, descriptor]) { if (descriptor is ValueParameterDescriptor && bindingContext[BindingContext.AUTO_CREATED_IT, descriptor]!!) {
element = element.assignSmartCompletionPriority(SmartCompletionItemPriority.IT) element = element.assignSmartCompletionPriority(SmartCompletionItemPriority.IT)
} }
@@ -38,7 +38,7 @@ fun DeclarationDescriptorWithVisibility.isVisible(
val receiver = element.getReceiverExpression() val receiver = element.getReceiverExpression()
val type = receiver?.let { bindingContext.getType(it) } val type = receiver?.let { bindingContext.getType(it) }
val explicitReceiver = type?.let { ExpressionReceiver(receiver, it) } val explicitReceiver = type?.let { ExpressionReceiver(receiver!!, it) }
if (explicitReceiver != null) { if (explicitReceiver != null) {
val normalizeReceiver = ExpressionTypingUtils.normalizeReceiverValueForVisibility(explicitReceiver, bindingContext) val normalizeReceiver = ExpressionTypingUtils.normalizeReceiverValueForVisibility(explicitReceiver, bindingContext)
@@ -37,8 +37,8 @@ public class ExtraSteppingFilter : engine.ExtraSteppingFilter {
} }
val debugProcess = context.getDebugProcess() val debugProcess = context.getDebugProcess()
val positionManager = JetPositionManager(debugProcess) val positionManager = JetPositionManager(debugProcess!!)
val location = context.getFrameProxy().location() val location = context.getFrameProxy()!!.location()
return runReadAction { return runReadAction {
shouldFilter(positionManager, location) shouldFilter(positionManager, location)
} }
@@ -34,7 +34,7 @@ public abstract class ConfigureKotlinInProjectAction : AnAction() {
if (project == null) return if (project == null) return
if (ConfigureKotlinInProjectUtils.isProjectConfigured(project)) { if (ConfigureKotlinInProjectUtils.isProjectConfigured(project)) {
Messages.showInfoMessage("All modules with kotlin files are configured", e.getPresentation().getText()) Messages.showInfoMessage("All modules with kotlin files are configured", e.getPresentation().getText()!!)
return return
} }
@@ -42,9 +42,9 @@ public abstract class ConfigureKotlinInProjectAction : AnAction() {
when { when {
configurators.size() == 1 -> configurators.first().configure(project) configurators.size() == 1 -> configurators.first().configure(project)
configurators.isEmpty() -> Messages.showErrorDialog("There aren't configurators available", e.getPresentation().getText()) configurators.isEmpty() -> Messages.showErrorDialog("There aren't configurators available", e.getPresentation().getText()!!)
else -> { else -> {
Messages.showErrorDialog("More than one configurator is available", e.getPresentation().getText()) Messages.showErrorDialog("More than one configurator is available", e.getPresentation().getText()!!)
ConfigureKotlinInProjectUtils.showConfigureKotlinNotificationIfNeeded(project) ConfigureKotlinInProjectUtils.showConfigureKotlinNotificationIfNeeded(project)
} }
} }
@@ -303,7 +303,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Kotlin
importHelper.importDescriptor(file, descriptor) importHelper.importDescriptor(file, descriptor)
} }
for ((pointer, fqName) in bindingRequests) { for ((pointer, fqName) in bindingRequests) {
val reference = pointer.getElement().getReference() as JetSimpleNameReference val reference = pointer.getElement()!!.getReference() as JetSimpleNameReference
reference.bindToFqName(fqName, JetSimpleNameReference.ShorteningMode.DELAYED_SHORTENING) reference.bindToFqName(fqName, JetSimpleNameReference.ShorteningMode.DELAYED_SHORTENING)
} }
performDelayedShortening(file.getProject()) performDelayedShortening(file.getProject())
@@ -87,7 +87,7 @@ public class KotlinRuntimeTypeCastSurrounder: KotlinExpressionSurrounder() {
try { try {
val factory = JetPsiFactory(myElement.getProject()) val factory = JetPsiFactory(myElement.getProject())
val fqName = DescriptorUtils.getFqName(type.getConstructor().getDeclarationDescriptor()) val fqName = DescriptorUtils.getFqName(type.getConstructor().getDeclarationDescriptor()!!)
val parentCast = factory.createExpression("(expr as " + fqName.asString() + ")") as JetParenthesizedExpression val parentCast = factory.createExpression("(expr as " + fqName.asString() + ")") as JetParenthesizedExpression
val cast = parentCast.getExpression() as JetBinaryExpressionWithTypeRHS val cast = parentCast.getExpression() as JetBinaryExpressionWithTypeRHS
cast.getLeft().replace(myElement) cast.getLeft().replace(myElement)
@@ -126,7 +126,7 @@ public class KotlinCoverageExtension(): JavaCoverageEngineExtension() {
} }
LOG.debug("Classfiles: [${existingClassFiles.map { it.getName() }.join()}]") LOG.debug("Classfiles: [${existingClassFiles.map { it.getName() }.join()}]")
return existingClassFiles.map { return existingClassFiles.map {
val relativePath = VfsUtilCore.getRelativePath(it, outputRoot) val relativePath = VfsUtilCore.getRelativePath(it, outputRoot!!)!!
StringUtil.trimEnd(relativePath, ".class").replace("/", ".") StringUtil.trimEnd(relativePath, ".class").replace("/", ".")
} }
} }
@@ -175,13 +175,13 @@ public class KotlinCoverageExtension(): JavaCoverageEngineExtension() {
val inTests = fileIndex.isInTestSourceContent(file.getVirtualFile()) val inTests = fileIndex.isInTestSourceContent(file.getVirtualFile())
val compilerOutputExtension = CompilerModuleExtension.getInstance(module) val compilerOutputExtension = CompilerModuleExtension.getInstance(module)
return if (inTests) return if (inTests)
compilerOutputExtension.getCompilerOutputPathForTests() compilerOutputExtension!!.getCompilerOutputPathForTests()
else else
compilerOutputExtension.getCompilerOutputPath() compilerOutputExtension!!.getCompilerOutputPath()
} }
private fun collectClassFilePrefixes(file: JetFile): Collection<String> { private fun collectClassFilePrefixes(file: JetFile): Collection<String> {
val result = file.getChildren().filter { it is JetClassOrObject }.map { (it as JetClassOrObject).getName() } val result = file.getChildren().filter { it is JetClassOrObject }.map { (it as JetClassOrObject).getName()!! }
val packagePartFqName = PackagePartClassUtils.getPackagePartFqName(file) val packagePartFqName = PackagePartClassUtils.getPackagePartFqName(file)
return result.union(arrayListOf(packagePartFqName.shortName().asString())) return result.union(arrayListOf(packagePartFqName.shortName().asString()))
} }
@@ -107,7 +107,7 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
if (lineNumber >= 0) { if (lineNumber >= 0) {
val lambdaOrFunIfInside = getLambdaOrFunIfInside(location, psiFile as JetFile, lineNumber) val lambdaOrFunIfInside = getLambdaOrFunIfInside(location, psiFile as JetFile, lineNumber)
if (lambdaOrFunIfInside != null) { if (lambdaOrFunIfInside != null) {
return SourcePosition.createFromElement(lambdaOrFunIfInside.getBodyExpression()) return SourcePosition.createFromElement(lambdaOrFunIfInside.getBodyExpression()!!)
} }
return SourcePosition.createFromLine(psiFile, lineNumber) return SourcePosition.createFromLine(psiFile, lineNumber)
} }
@@ -104,7 +104,7 @@ class KotlinEditorTextProvider : EditorTextProvider {
fun PsiElement.isCall() = this is JetCallExpression || this is JetOperationExpression || this is JetArrayAccessExpression fun PsiElement.isCall() = this is JetCallExpression || this is JetOperationExpression || this is JetArrayAccessExpression
if (newExpression.isCall() || if (newExpression.isCall() ||
newExpression is JetQualifiedExpression && newExpression.getSelectorExpression().isCall()) { newExpression is JetQualifiedExpression && newExpression.getSelectorExpression()!!.isCall()) {
return null return null
} }
} }
@@ -69,7 +69,7 @@ private fun findAdditionalExpressions(position: SourcePosition): Set<TextWithImp
if (offset < 0) return emptySet() if (offset < 0) return emptySet()
val elem = file.findElementAt(offset) val elem = file.findElementAt(offset)
val containingElement = getContainingElement(elem) ?: elem val containingElement = getContainingElement(elem!!) ?: elem
if (containingElement == null) return emptySet() if (containingElement == null) return emptySet()
@@ -129,7 +129,7 @@ private fun shouldSkipLine(file: PsiFile, doc: Document, line: Int): Boolean {
} }
val elemAtOffset = file.findElementAt(start) val elemAtOffset = file.findElementAt(start)
val topmostElementAtOffset = CodeInsightUtils.getTopmostElementAtOffset(elemAtOffset, start) val topmostElementAtOffset = CodeInsightUtils.getTopmostElementAtOffset(elemAtOffset!!, start)
return topmostElementAtOffset !is JetDeclaration return topmostElementAtOffset !is JetDeclaration
} }
@@ -100,7 +100,7 @@ class KotlinFieldBreakpoint(
override fun reload(psiFile: PsiFile?) { override fun reload(psiFile: PsiFile?) {
val property = getProperty(getSourcePosition()) val property = getProperty(getSourcePosition())
if (property != null) { if (property != null) {
setFieldName(property.getName()) setFieldName(property.getName()!!)
if (property is JetProperty && property.isTopLevel()) { if (property is JetProperty && property.isTopLevel()) {
getProperties().myClassName = PackageClassUtils.getPackageClassFqName(property.getContainingJetFile().getPackageFqName()).asString() getProperties().myClassName = PackageClassUtils.getPackageClassFqName(property.getContainingJetFile().getPackageFqName()).asString()
@@ -196,7 +196,7 @@ class KotlinFieldBreakpoint(
descriptor = bindingContext.get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, descriptor) descriptor = bindingContext.get(BindingContext.VALUE_PARAMETER_AS_PROPERTY, descriptor)
} }
if (bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor as PropertyDescriptor)) { if (bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor as PropertyDescriptor)!!) {
BreakpointType.FIELD BreakpointType.FIELD
} }
else { else {
@@ -106,7 +106,7 @@ public class KotlinSmartEnterHandler: SmartEnterProcessorWithFixers() {
val settings = CodeStyleSettingsManager.getSettings(file.getProject()) val settings = CodeStyleSettingsManager.getSettings(file.getProject())
val old = settings.KEEP_SIMPLE_BLOCKS_IN_ONE_LINE val old = settings.KEEP_SIMPLE_BLOCKS_IN_ONE_LINE
settings.KEEP_SIMPLE_BLOCKS_IN_ONE_LINE = false settings.KEEP_SIMPLE_BLOCKS_IN_ONE_LINE = false
val elt = file.findElementAt(caretOffset - 1).getStrictParentOfType<JetBlockExpression>() val elt = file.findElementAt(caretOffset - 1)!!.getStrictParentOfType<JetBlockExpression>()
if (elt != null) { if (elt != null) {
reformat(elt) reformat(elt)
} }
@@ -58,7 +58,7 @@ class DelegatingFindMemberUsagesHandler(
return kotlinHandler.getPrimaryElements() return kotlinHandler.getPrimaryElements()
} }
override fun getSecondaryElements(): Array<out PsiElement>? { override fun getSecondaryElements(): Array<out PsiElement> {
return kotlinHandler.getSecondaryElements() return kotlinHandler.getSecondaryElements()
} }
@@ -119,7 +119,7 @@ public class KotlinFindClassUsagesHandler(
var stringsToSearch: Collection<String> var stringsToSearch: Collection<String>
object: JavaFindUsagesHandler(psiClass, JavaFindUsagesHandlerFactory.getInstance(element.getProject())) { object: JavaFindUsagesHandler(psiClass, JavaFindUsagesHandlerFactory.getInstance(element.getProject())) {
init { init {
stringsToSearch = getStringsToSearch(psiClass) stringsToSearch = getStringsToSearch(psiClass)!!
} }
} }
return stringsToSearch return stringsToSearch
@@ -30,7 +30,7 @@ public class KotlinTemplatesFactory : ProjectTemplatesFactory() {
override fun getGroups() = arrayOf(KOTLIN_GROUP_NAME) override fun getGroups() = arrayOf(KOTLIN_GROUP_NAME)
override fun getGroupIcon(group: String) = JetIcons.SMALL_LOGO override fun getGroupIcon(group: String) = JetIcons.SMALL_LOGO
override fun createTemplates(group: String, context: WizardContext?) = override fun createTemplates(group: String?, context: WizardContext?) =
arrayOf( arrayOf(
BuilderBasedTemplate(KotlinModuleBuilder(TargetPlatform.JVM, "Kotlin - JVM", "Kotlin module for JVM target")), BuilderBasedTemplate(KotlinModuleBuilder(TargetPlatform.JVM, "Kotlin - JVM", "Kotlin module for JVM target")),
BuilderBasedTemplate(KotlinModuleBuilder(TargetPlatform.JS, "Kotlin - JavaScript", "Kotlin module for JavaScript target")) BuilderBasedTemplate(KotlinModuleBuilder(TargetPlatform.JS, "Kotlin - JavaScript", "Kotlin module for JavaScript target"))
@@ -188,7 +188,7 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
private fun isConventionalName(namedDeclaration: JetNamedDeclaration): Boolean { private fun isConventionalName(namedDeclaration: JetNamedDeclaration): Boolean {
val name = namedDeclaration.getNameAsName() val name = namedDeclaration.getNameAsName()
return name.getOperationSymbolsToSearch().isNotEmpty() || name == OperatorConventions.INVOKE return name!!.getOperationSymbolsToSearch().isNotEmpty() || name == OperatorConventions.INVOKE
} }
private fun hasNonTrivialUsages(declaration: JetNamedDeclaration): Boolean { private fun hasNonTrivialUsages(declaration: JetNamedDeclaration): Boolean {
@@ -200,7 +200,7 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
for (name in listOf(declaration.getName()) + declaration.getAccessorNames() + declaration.getClassNameForCompanionObject().singletonOrEmptyList()) { for (name in listOf(declaration.getName()) + declaration.getAccessorNames() + declaration.getClassNameForCompanionObject().singletonOrEmptyList()) {
assert(name != null) { "Name is null for " + declaration.getElementTextWithContext() } assert(name != null) { "Name is null for " + declaration.getElementTextWithContext() }
when (psiSearchHelper.isCheapEnoughToSearch(name, useScope, null, null)) { when (psiSearchHelper.isCheapEnoughToSearch(name!!, useScope, null, null)) {
ZERO_OCCURRENCES -> {} // go on, check other names ZERO_OCCURRENCES -> {} // go on, check other names
FEW_OCCURRENCES -> zeroOccurrences = false FEW_OCCURRENCES -> zeroOccurrences = false
TOO_MANY_OCCURRENCES -> return true // searching usages is too expensive; behave like it is used TOO_MANY_OCCURRENCES -> return true // searching usages is too expensive; behave like it is used
@@ -94,7 +94,7 @@ public class DeprecatedCallableAddReplaceWithIntention : JetSelfTargetingRangeIn
}.toString() }.toString()
var argument = psiFactory.createArgument(psiFactory.createExpression(argumentText)) var argument = psiFactory.createArgument(psiFactory.createExpression(argumentText))
argument = annotationEntry.getValueArgumentList().addArgument(argument) argument = annotationEntry.getValueArgumentList()!!.addArgument(argument)
argument = ShortenReferences.DEFAULT.process(argument) as JetValueArgument argument = ShortenReferences.DEFAULT.process(argument) as JetValueArgument
PsiDocumentManager.getInstance(argument.getProject()).doPostponedOperationsAndUnblockDocument(editor.getDocument()) PsiDocumentManager.getInstance(argument.getProject()).doPostponedOperationsAndUnblockDocument(editor.getDocument())
@@ -50,7 +50,7 @@ public class IterateExpressionIntention : JetSelfTargetingIntention<JetExpressio
val bindingContext = expression.analyze(BodyResolveMode.PARTIAL) val bindingContext = expression.analyze(BodyResolveMode.PARTIAL)
val type = bindingContext.getType(expression) ?: return null val type = bindingContext.getType(expression) ?: return null
val moduleDescriptor = expression.getResolutionFacade().findModuleDescriptor(expression) val moduleDescriptor = expression.getResolutionFacade().findModuleDescriptor(expression)
val scope = bindingContext[BindingContext.RESOLUTION_SCOPE, expression] val scope = bindingContext[BindingContext.RESOLUTION_SCOPE, expression]!!
val elementType = IterableTypesDetector(expression.getProject(), moduleDescriptor, scope).elementType(type)?.type ?: return null val elementType = IterableTypesDetector(expression.getProject(), moduleDescriptor, scope).elementType(type)?.type ?: return null
return Data(type, elementType) return Data(type, elementType)
} }
@@ -68,7 +68,7 @@ fun isAutoCreatedItUsage(expression: JetSimpleNameExpression): Boolean {
val context = expression.analyze() val context = expression.analyze()
val reference = expression.getReference() as JetReference? val reference = expression.getReference() as JetReference?
val target = reference?.resolveToDescriptors(context)?.singleOrNull() as? ValueParameterDescriptor? ?: return false val target = reference?.resolveToDescriptors(context)?.singleOrNull() as? ValueParameterDescriptor? ?: return false
return context[BindingContext.AUTO_CREATED_IT, target] return context[BindingContext.AUTO_CREATED_IT, target]!!
} }
fun JetCallableDeclaration.canRemoveTypeSpecificationByVisibility(): Boolean { fun JetCallableDeclaration.canRemoveTypeSpecificationByVisibility(): Boolean {
@@ -39,7 +39,7 @@ fun JetWhenCondition.toExpression(subject: JetExpression?): JetExpression {
factory.createExpressionByPattern("$0 == $1", subject, getExpression() ?: "") factory.createExpressionByPattern("$0 == $1", subject, getExpression() ?: "")
} }
else { else {
getExpression() getExpression()!!
} }
} }
@@ -30,11 +30,11 @@ public class AddLoopLabelFix(loop: JetLoopExpression, val jumpExpression: JetEle
override fun getText() = "Add label to loop" override fun getText() = "Add label to loop"
override fun getFamilyName() = getText() override fun getFamilyName() = getText()
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?): Boolean { override fun isAvailable(project: Project, editor: Editor, file: PsiFile): Boolean {
return super.isAvailable(project, editor, file) return super.isAvailable(project, editor, file)
} }
override fun invoke(project: Project, editor: Editor, file: JetFile) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
val usedLabels = collectUsedLabels(element) val usedLabels = collectUsedLabels(element)
val labelName = getUniqueLabelName(usedLabels) val labelName = getUniqueLabelName(usedLabels)
@@ -43,7 +43,7 @@ public class AddLoopLabelFix(loop: JetLoopExpression, val jumpExpression: JetEle
// TODO(yole) use createExpressionByPattern() once it's available // TODO(yole) use createExpressionByPattern() once it's available
val labeledLoopExpression = JetPsiFactory(project).createLabeledExpression(labelName) val labeledLoopExpression = JetPsiFactory(project).createLabeledExpression(labelName)
labeledLoopExpression.getBaseExpression().replace(element) labeledLoopExpression.getBaseExpression()!!.replace(element)
element.replace(labeledLoopExpression) element.replace(labeledLoopExpression)
// TODO(yole) We should initiate in-place rename for the label here, but in-place rename for labels is not yet implemented // TODO(yole) We should initiate in-place rename for the label here, but in-place rename for labels is not yet implemented
@@ -86,7 +86,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
override fun isAvailable(project: Project, editor: Editor, file: PsiFile) override fun isAvailable(project: Project, editor: Editor, file: PsiFile)
= (super<JetHintAction>.isAvailable(project, editor, file)) && (anySuggestionFound ?: !suggestions.isEmpty()) = (super<JetHintAction>.isAvailable(project, editor, file)) && (anySuggestionFound ?: !suggestions.isEmpty())
override fun invoke(project: Project, editor: Editor?, file: JetFile?) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
CommandProcessor.getInstance().runUndoTransparentAction { CommandProcessor.getInstance().runUndoTransparentAction {
createAction(project, editor!!).execute() createAction(project, editor!!).execute()
} }
@@ -38,7 +38,7 @@ class DeprecatedEnumEntryDelimiterSyntaxFix(element: JetEnumEntry): JetIntention
override fun getText(): String = "Insert lacking comma(s) / semicolon(s)" override fun getText(): String = "Insert lacking comma(s) / semicolon(s)"
override fun invoke(project: Project, editor: Editor?, file: JetFile?) = insertLackingCommaSemicolon(element) override fun invoke(project: Project, editor: Editor?, file: JetFile) = insertLackingCommaSemicolon(element)
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean
= super<JetIntentionAction>.isAvailable(project, editor, file) && DeclarationsChecker.enumEntryUsesDeprecatedOrNoDelimiter(element) = super<JetIntentionAction>.isAvailable(project, editor, file) && DeclarationsChecker.enumEntryUsesDeprecatedOrNoDelimiter(element)
@@ -41,7 +41,7 @@ class DeprecatedEnumEntrySuperConstructorSyntaxFix(element: JetEnumEntry): JetIn
override fun getText(): String = "Change to short enum entry super constructor" override fun getText(): String = "Change to short enum entry super constructor"
override fun invoke(project: Project, editor: Editor?, file: JetFile?) = changeConstructorToShort(element) override fun invoke(project: Project, editor: Editor?, file: JetFile) = changeConstructorToShort(element)
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean
= super<JetIntentionAction>.isAvailable(project, editor, file) && DeclarationsChecker.enumEntryUsesDeprecatedSuperConstructor(element) = super<JetIntentionAction>.isAvailable(project, editor, file) && DeclarationsChecker.enumEntryUsesDeprecatedSuperConstructor(element)
@@ -110,6 +110,7 @@ private class LambdaToFunctionExpression(
assert(functionLiteralType != null && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(functionLiteralType)) { assert(functionLiteralType != null && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(functionLiteralType)) {
"Broken function type for expression: ${functionLiteralExpression.getText()}, at: ${DiagnosticUtils.atLocation(functionLiteralExpression)}" "Broken function type for expression: ${functionLiteralExpression.getText()}, at: ${DiagnosticUtils.atLocation(functionLiteralExpression)}"
} }
functionLiteralType!!
receiverType = KotlinBuiltIns.getReceiverType(functionLiteralType)?.let { IdeDescriptorRenderers.SOURCE_CODE.renderType(it) } receiverType = KotlinBuiltIns.getReceiverType(functionLiteralType)?.let { IdeDescriptorRenderers.SOURCE_CODE.renderType(it) }
returnType = KotlinBuiltIns.getReturnTypeFromFunctionType(functionLiteralType).let { returnType = KotlinBuiltIns.getReturnTypeFromFunctionType(functionLiteralType).let {
if (KotlinBuiltIns.isUnit(it)) if (KotlinBuiltIns.isUnit(it))
@@ -112,7 +112,7 @@ public abstract class DeprecatedSymbolUsageFixBase(
if (pattern.isEmpty()) return null if (pattern.isEmpty()) return null
val importValues = replaceWithValue.argumentValue("imports"/*TODO: kotlin.ReplaceWith::imports.name*/) as? List<*> ?: return null val importValues = replaceWithValue.argumentValue("imports"/*TODO: kotlin.ReplaceWith::imports.name*/) as? List<*> ?: return null
if (importValues.any { it !is StringValue }) return null if (importValues.any { it !is StringValue }) return null
val imports = importValues.map { (it as StringValue).getValue() } val imports = importValues.map { (it as StringValue).getValue()!! }
// should not be available for descriptors with optional parameters if we cannot fetch default values for them (currently for library with no sources) // should not be available for descriptors with optional parameters if we cannot fetch default values for them (currently for library with no sources)
if (descriptor is CallableDescriptor && if (descriptor is CallableDescriptor &&
@@ -681,7 +681,7 @@ public abstract class DeprecatedSymbolUsageFixBase(
var explicitType: JetType? = null var explicitType: JetType? = null
if (valueType != null && !ErrorUtils.containsErrorType(valueType)) { if (valueType != null && !ErrorUtils.containsErrorType(valueType)) {
val valueTypeWithoutExpectedType = value.analyzeInContext( val valueTypeWithoutExpectedType = value.analyzeInContext(
resolutionScope, resolutionScope!!,
dataFlowInfo = bindingContext.getDataFlowInfo(expressionToBeReplaced) dataFlowInfo = bindingContext.getDataFlowInfo(expressionToBeReplaced)
).getType(value) ).getType(value)
if (valueTypeWithoutExpectedType == null || ErrorUtils.containsErrorType(valueTypeWithoutExpectedType)) { if (valueTypeWithoutExpectedType == null || ErrorUtils.containsErrorType(valueTypeWithoutExpectedType)) {
@@ -690,7 +690,7 @@ public abstract class DeprecatedSymbolUsageFixBase(
} }
val name = suggestName { name -> val name = suggestName { name ->
resolutionScope.getLocalVariable(Name.identifier(name)) == null && !isNameUsed(name) resolutionScope!!.getLocalVariable(Name.identifier(name)) == null && !isNameUsed(name)
} }
var declaration = psiFactory.createDeclarationByPattern<JetVariableDeclaration>("val $0 = $1", name, value) var declaration = psiFactory.createDeclarationByPattern<JetVariableDeclaration>("val $0 = $1", name, value)
@@ -31,7 +31,7 @@ public class DeprecatedTraitSyntaxFix(element: PsiElement): JetIntentionAction<P
override fun getFamilyName() = "Replace 'trait' with 'interface'" override fun getFamilyName() = "Replace 'trait' with 'interface'"
override fun getText() = getFamilyName() override fun getText() = getFamilyName()
override fun invoke(project: Project, editor: Editor?, file: JetFile?) override fun invoke(project: Project, editor: Editor?, file: JetFile)
= replaceWithInterfaceKeyword(element) = replaceWithInterfaceKeyword(element)
@@ -47,7 +47,7 @@ public class DeprecatedTraitSyntaxFix(element: PsiElement): JetIntentionAction<P
public fun createWholeProjectFixFactory(): JetSingleIntentionActionFactory = createIntentionFactory { public fun createWholeProjectFixFactory(): JetSingleIntentionActionFactory = createIntentionFactory {
JetWholeProjectForEachElementOfTypeFix.createByPredicate<JetClass>( JetWholeProjectForEachElementOfTypeFix.createByPredicate<JetClass>(
predicate = { it.getNode().findChildByType(JetTokens.TRAIT_KEYWORD) != null }, predicate = { it.getNode().findChildByType(JetTokens.TRAIT_KEYWORD) != null },
taskProcessor = { replaceWithInterfaceKeyword(it.getNode().findChildByType(JetTokens.TRAIT_KEYWORD).getPsi())}, taskProcessor = { replaceWithInterfaceKeyword(it.getNode().findChildByType(JetTokens.TRAIT_KEYWORD)!!.getPsi())},
name = "Replace 'trait' with 'interface' in whole project" name = "Replace 'trait' with 'interface' in whole project"
) )
} }
@@ -50,7 +50,7 @@ public class RemoveExclExclCallFix(val psiElement: PsiElement) : ExclExclCallFix
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return if (!FileModificationService.getInstance().prepareFileForWrite(file)) return
val postfixExpression = getExclExclPostfixExpression() ?: return val postfixExpression = getExclExclPostfixExpression() ?: return
val expression = JetPsiFactory(project).createExpression(postfixExpression.getBaseExpression().getText()) val expression = JetPsiFactory(project).createExpression(postfixExpression.getBaseExpression()!!.getText())
postfixExpression.replace(expression) postfixExpression.replace(expression)
} }
@@ -41,7 +41,7 @@ public class InsertDelegationCallQuickfix(val isThis: Boolean, element: JetSecon
private val keywordToUse = if (isThis) "this" else "super" private val keywordToUse = if (isThis) "this" else "super"
override fun invoke(project: Project, editor: Editor?, file: JetFile?) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
val newDelegationCall = element.replaceImplicitDelegationCallWithExplicit(isThis) val newDelegationCall = element.replaceImplicitDelegationCallWithExplicit(isThis)
val resolvedCall = newDelegationCall.getResolvedCall(newDelegationCall.analyze()) val resolvedCall = newDelegationCall.getResolvedCall(newDelegationCall.analyze())
@@ -55,7 +55,7 @@ public class InsertDelegationCallQuickfix(val isThis: Boolean, element: JetSecon
editor?.moveCaret(leftParOffset + 1) editor?.moveCaret(leftParOffset + 1)
} }
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?): Boolean { override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
return super.isAvailable(project, editor, file) && element.hasImplicitDelegationCall() return super.isAvailable(project, editor, file) && element.hasImplicitDelegationCall()
} }
@@ -35,7 +35,7 @@ public class MigrateAnnotationMethodCallFix(
override fun getText() = "Replace method call with property access" override fun getText() = "Replace method call with property access"
override fun getFamilyName() = getText() override fun getFamilyName() = getText()
override fun invoke(project: Project, editor: Editor?, file: JetFile?) = replaceWithSimpleCall(element) override fun invoke(project: Project, editor: Editor?, file: JetFile) = replaceWithSimpleCall(element)
companion object : JetSingleIntentionActionFactory() { companion object : JetSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic) = diagnostic.createIntentionForFirstParentOfType(::MigrateAnnotationMethodCallFix) override fun createAction(diagnostic: Diagnostic) = diagnostic.createIntentionForFirstParentOfType(::MigrateAnnotationMethodCallFix)
@@ -30,7 +30,7 @@ public class MissingConstructorKeywordFix(element: JetPrimaryConstructor) : JetI
override fun getFamilyName(): String = getText() override fun getFamilyName(): String = getText()
override fun getText(): String = "Add 'constructor' keyword" override fun getText(): String = "Add 'constructor' keyword"
override fun invoke(project: Project, editor: Editor?, file: JetFile?) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
element.addConstructorKeyword() element.addConstructorKeyword()
} }
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
public class ReplaceObsoleteLabelSyntaxFix(element: JetAnnotationEntry?) : JetIntentionAction<JetAnnotationEntry>(element), CleanupFix { public class ReplaceObsoleteLabelSyntaxFix(element: JetAnnotationEntry) : JetIntentionAction<JetAnnotationEntry>(element), CleanupFix {
override fun getFamilyName(): String = "Update obsolete label syntax" override fun getFamilyName(): String = "Update obsolete label syntax"
override fun getText(): String = "Replace with label ${element.getCalleeExpression()?.getText() ?: ""}@" override fun getText(): String = "Replace with label ${element.getCalleeExpression()?.getText() ?: ""}@"
@@ -65,7 +65,7 @@ public class ReplaceObsoleteLabelSyntaxFix(element: JetAnnotationEntry?) : JetIn
val baseExpression = (getParent() as? JetAnnotatedExpression)?.getBaseExpression() ?: return false val baseExpression = (getParent() as? JetAnnotatedExpression)?.getBaseExpression() ?: return false
val nameExpression = getCalleeExpression().getConstructorReferenceExpression() ?: return false val nameExpression = getCalleeExpression()?.getConstructorReferenceExpression() ?: return false
val labelName = nameExpression.getReferencedName() val labelName = nameExpression.getReferencedName()
return baseExpression.anyDescendantOfType<JetExpressionWithLabel> { return baseExpression.anyDescendantOfType<JetExpressionWithLabel> {
@@ -182,7 +182,7 @@ object ReplaceWithAnnotationAnalyzer {
RedeclarationHandler.DO_NOTHING) RedeclarationHandler.DO_NOTHING)
is LocalVariableDescriptor -> { is LocalVariableDescriptor -> {
val declaration = DescriptorToSourceUtils.descriptorToDeclaration(descriptor) as JetDeclaration val declaration = DescriptorToSourceUtils.descriptorToDeclaration(descriptor) as JetDeclaration
declaration.analyze()[BindingContext.RESOLUTION_SCOPE, declaration] declaration.analyze()[BindingContext.RESOLUTION_SCOPE, declaration]!!
} }
//TODO? //TODO?
@@ -297,7 +297,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
.subtract(substitutionMap.keySet()) .subtract(substitutionMap.keySet())
fakeFunction = createFakeFunctionDescriptor(scope, typeArgumentsForFakeFunction.size()) fakeFunction = createFakeFunctionDescriptor(scope, typeArgumentsForFakeFunction.size())
collectSubstitutionsForCallableTypeParameters(fakeFunction, typeArgumentsForFakeFunction, substitutionMap) collectSubstitutionsForCallableTypeParameters(fakeFunction, typeArgumentsForFakeFunction, substitutionMap)
mandatoryTypeParametersAsCandidates = receiverTypeCandidate.singletonOrEmptyList() + typeArgumentsForFakeFunction.map { TypeCandidate(substitutionMap[it], scope) } mandatoryTypeParametersAsCandidates = receiverTypeCandidate.singletonOrEmptyList() + typeArgumentsForFakeFunction.map { TypeCandidate(substitutionMap[it]!!, scope) }
} }
else { else {
fakeFunction = null fakeFunction = null
@@ -949,7 +949,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
} }
is JetProperty -> { is JetProperty -> {
if (!declaration.hasInitializer() && containingElement is JetBlockExpression) { if (!declaration.hasInitializer() && containingElement is JetBlockExpression) {
val defaultValueType = typeCandidates[callableInfo.returnTypeInfo].firstOrNull()?.theType val defaultValueType = typeCandidates[callableInfo.returnTypeInfo]!!.firstOrNull()?.theType
?: KotlinBuiltIns.getInstance().getAnyType() ?: KotlinBuiltIns.getInstance().getAnyType()
val defaultValue = CodeInsightUtils.defaultInitializer(defaultValueType) ?: "null" val defaultValue = CodeInsightUtils.defaultInitializer(defaultValueType) ?: "null"
val initializer = declaration.setInitializer(JetPsiFactory(declaration).createExpression(defaultValue))!! val initializer = declaration.setInitializer(JetPsiFactory(declaration).createExpression(defaultValue))!!
@@ -975,7 +975,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
val caretModel = containingFileEditor.getCaretModel() val caretModel = containingFileEditor.getCaretModel()
caretModel.moveToOffset(jetFileToEdit.getNode().getStartOffset()) caretModel.moveToOffset(jetFileToEdit.getNode().getStartOffset())
val declaration = declarationPointer.getElement() val declaration = declarationPointer.getElement()!!
val builder = TemplateBuilderImpl(jetFileToEdit) val builder = TemplateBuilderImpl(jetFileToEdit)
if (declaration is JetProperty) { if (declaration is JetProperty) {
@@ -120,11 +120,11 @@ public abstract class CreateCallableFromUsageFixBase(
} }
} }
override fun invoke(project: Project, editor: Editor?, file: JetFile?) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
val callableInfo = callableInfos.first() val callableInfo = callableInfos.first()
val callableBuilder = val callableBuilder =
CallableBuilderConfiguration(callableInfos, element as JetElement, file!!, editor!!, isExtension).createBuilder() CallableBuilderConfiguration(callableInfos, element as JetElement, file, editor!!, isExtension).createBuilder()
fun runBuilder(placement: CallablePlacement) { fun runBuilder(placement: CallablePlacement) {
callableBuilder.placement = placement callableBuilder.placement = placement
@@ -80,7 +80,7 @@ public class CreateClassFromUsageFix(
return true return true
} }
override fun invoke(project: Project, editor: Editor, file: JetFile) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
fun createFileByPackage(psiPackage: PsiPackage): JetFile? { fun createFileByPackage(psiPackage: PsiPackage): JetFile? {
val directories = psiPackage.getDirectories().filter { it.canRefactor() } val directories = psiPackage.getDirectories().filter { it.canRefactor() }
assert (directories.isNotEmpty()) { "Package '${psiPackage.getQualifiedName()}' must be refactorable" } assert (directories.isNotEmpty()) { "Package '${psiPackage.getQualifiedName()}' must be refactorable" }
@@ -103,7 +103,7 @@ public class CreateClassFromUsageFix(
val filePath = "${targetDirectory.getVirtualFile().getPath()}/$fileName" val filePath = "${targetDirectory.getVirtualFile().getPath()}/$fileName"
CodeInsightUtils.showErrorHint( CodeInsightUtils.showErrorHint(
targetDirectory.getProject(), targetDirectory.getProject(),
editor, editor!!,
"File $filePath already exists but does not correspond to Kotlin file", "File $filePath already exists but does not correspond to Kotlin file",
"Create file", "Create file",
null null
@@ -50,7 +50,7 @@ object CreateLocalVariableActionFactory: JetSingleIntentionActionFactory() {
return object: CreateFromUsageFixBase(refExpr) { return object: CreateFromUsageFixBase(refExpr) {
override fun getText(): String = JetBundle.message("create.local.variable.from.usage", propertyName) override fun getText(): String = JetBundle.message("create.local.variable.from.usage", propertyName)
override fun invoke(project: Project, editor: Editor, file: JetFile) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
val assignment = refExpr.getAssignmentByLHS() val assignment = refExpr.getAssignmentByLHS()
val varExpected = assignment != null val varExpected = assignment != null
var originalElement = assignment ?: refExpr var originalElement = assignment ?: refExpr
@@ -37,7 +37,7 @@ public class CreateParameterFromUsageFix(
return JetBundle.message("create.parameter.from.usage", parameterInfo.getName()) return JetBundle.message("create.parameter.from.usage", parameterInfo.getName())
} }
override fun invoke(project: Project, editor: Editor?, file: JetFile?) { override fun invoke(project: Project, editor: Editor?, file: JetFile) {
val config = object : JetChangeSignatureConfiguration { val config = object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor {
return originalDescriptor.modify { it.addParameter(parameterInfo) } return originalDescriptor.modify { it.addParameter(parameterInfo) }
@@ -212,7 +212,7 @@ public class JetChangeInfo(
public fun renderReturnType(inheritedCallable: JetCallableDefinitionUsage<PsiElement>): String { public fun renderReturnType(inheritedCallable: JetCallableDefinitionUsage<PsiElement>): String {
val typeSubstitutor = inheritedCallable.getOrCreateTypeSubstitutor() ?: return newReturnTypeText val typeSubstitutor = inheritedCallable.getOrCreateTypeSubstitutor() ?: return newReturnTypeText
val currentBaseFunction = inheritedCallable.getBaseFunction().getCurrentCallableDescriptor() ?: return newReturnTypeText val currentBaseFunction = inheritedCallable.getBaseFunction().getCurrentCallableDescriptor() ?: return newReturnTypeText
return currentBaseFunction.getReturnType().renderTypeWithSubstitution(typeSubstitutor, newReturnTypeText, false) return currentBaseFunction.getReturnType()!!.renderTypeWithSubstitution(typeSubstitutor, newReturnTypeText, false)
} }
public fun primaryMethodUpdated() { public fun primaryMethodUpdated() {
@@ -171,7 +171,7 @@ public class JetChangeSignature(project: Project,
val params = (preview.getParameterList().getParameters() zip ktChangeInfo.getNewParameters()).map { val params = (preview.getParameterList().getParameters() zip ktChangeInfo.getNewParameters()).map {
val (param, paramInfo) = it val (param, paramInfo) = it
// Keep original default value for proper update of Kotlin usages // Keep original default value for proper update of Kotlin usages
KotlinAwareJavaParameterInfoImpl(paramInfo.getOldIndex(), param.getName(), param.getType(), paramInfo.defaultValueForCall) KotlinAwareJavaParameterInfoImpl(paramInfo.getOldIndex(), param.getName()!!, param.getType(), paramInfo.defaultValueForCall)
}.toTypedArray() }.toTypedArray()
return preview to JavaChangeInfoImpl(visibility, return preview to JavaChangeInfoImpl(visibility,
@@ -99,7 +99,7 @@ public class JetChangeSignatureData(
descriptorsForSignatureChange.map { descriptorsForSignatureChange.map {
val declaration = DescriptorToSourceUtilsIde.getAnyDeclaration(baseDeclaration.getProject(), it) val declaration = DescriptorToSourceUtilsIde.getAnyDeclaration(baseDeclaration.getProject(), it)
assert(declaration != null) { "No declaration found for " + baseDescriptor } assert(declaration != null) { "No declaration found for " + baseDescriptor }
JetCallableDefinitionUsage<PsiElement>(declaration, it, null, null) JetCallableDefinitionUsage<PsiElement>(declaration!!, it, null, null)
} }
} }
@@ -85,7 +85,7 @@ public abstract class AbstractKotlinInplaceIntroducer<D: JetNamedDeclaration>(
override fun updateTitle(declaration: D?) = updateTitle(declaration, null) override fun updateTitle(declaration: D?) = updateTitle(declaration, null)
override fun saveSettings(declaration: D?) { override fun saveSettings(declaration: D) {
} }
} }
@@ -309,7 +309,7 @@ val ControlFlow.possibleReturnTypes: List<JetType>
returnType.isAnnotatedNotNull(), returnType.isAnnotatedNullable() -> returnType.isAnnotatedNotNull(), returnType.isAnnotatedNullable() ->
listOf(approximateFlexibleTypes(returnType)) listOf(approximateFlexibleTypes(returnType))
else -> else ->
returnType.getCapability(javaClass<Flexibility>()).let { listOf(it.upperBound, it.lowerBound) } returnType.getCapability(javaClass<Flexibility>()).let { listOf(it!!.upperBound, it.lowerBound) }
} }
} }
@@ -520,7 +520,7 @@ private class MutableParameter(
private val defaultType: JetType by Delegates.lazy { private val defaultType: JetType by Delegates.lazy {
writable = false writable = false
TypeUtils.intersect(JetTypeChecker.DEFAULT, defaultTypes) TypeUtils.intersect(JetTypeChecker.DEFAULT, defaultTypes)!!
} }
private val parameterTypeCandidates: List<JetType> by Delegates.lazy { private val parameterTypeCandidates: List<JetType> by Delegates.lazy {
@@ -530,7 +530,7 @@ private class MutableParameter(
val typeList = if (defaultType.isNullabilityFlexible()) { val typeList = if (defaultType.isNullabilityFlexible()) {
val bounds = defaultType.getCapability(javaClass<Flexibility>()) val bounds = defaultType.getCapability(javaClass<Flexibility>())
if (typePredicate(bounds.upperBound)) arrayListOf(bounds.upperBound, bounds.lowerBound) else arrayListOf(bounds.lowerBound) if (typePredicate(bounds!!.upperBound)) arrayListOf(bounds.upperBound, bounds.lowerBound) else arrayListOf(bounds.lowerBound)
} }
else arrayListOf(defaultType) else arrayListOf(defaultType)
@@ -275,7 +275,7 @@ private fun makeCall(
val inlinableCall = controlFlow.outputValues.size() <= 1 val inlinableCall = controlFlow.outputValues.size() <= 1
val unboxingExpressions = val unboxingExpressions =
if (inlinableCall) { if (inlinableCall) {
controlFlow.outputValueBoxer.getUnboxingExpressions(callText) controlFlow.outputValueBoxer.getUnboxingExpressions(callText!!)
} }
else { else {
val varNameValidator = NewDeclarationNameValidator(block, anchorInBlock, NewDeclarationNameValidator.Target.VARIABLES) val varNameValidator = NewDeclarationNameValidator(block, anchorInBlock, NewDeclarationNameValidator.Target.VARIABLES)
@@ -293,7 +293,7 @@ private fun makeCall(
} }
if (controlFlow.outputValues.isEmpty()) { if (controlFlow.outputValues.isEmpty()) {
anchor.replace(psiFactory.createExpression(callText)) anchor.replace(psiFactory.createExpression(callText!!))
return return
} }
@@ -135,7 +135,7 @@ public class KotlinInplaceParameterIntroducer(
val parameterText = if (parameter == addedParameter){ val parameterText = if (parameter == addedParameter){
val parameterName = currentName ?: parameter.getName() val parameterName = currentName ?: parameter.getName()
val parameterType = currentType ?: parameter.getTypeReference()!!.getText() val parameterType = currentType ?: parameter.getTypeReference()!!.getText()
descriptor = descriptor.copy(newParameterName = parameterName, newParameterTypeText = parameterType) descriptor = descriptor.copy(newParameterName = parameterName!!, newParameterTypeText = parameterType)
val modifier = if (valVar != JetValVar.None) "${valVar.name} " else "" val modifier = if (valVar != JetValVar.None) "${valVar.name} " else ""
val defaultValue = if (withDefaultValue) " = ${newArgumentValue.getText()}" else "" val defaultValue = if (withDefaultValue) " = ${newArgumentValue.getText()}" else ""
@@ -250,7 +250,7 @@ public class KotlinInplaceParameterIntroducer(
return descriptor.copy( return descriptor.copy(
originalRange = originalRange, originalRange = originalRange,
occurrencesToReplace = if (replaceAll) getOccurrences().map { it.toRange() } else originalRange.singletonList(), occurrencesToReplace = if (replaceAll) getOccurrences().map { it.toRange() } else originalRange.singletonList(),
newArgumentValue = getExpr() newArgumentValue = getExpr()!!
) )
} }

Some files were not shown because too many files have changed in this diff Show More