Cleanup in compiler modules

This commit is contained in:
Ilya Gorbunov
2015-12-26 12:49:22 +03:00
parent 911adfd04d
commit 80916d5ed7
132 changed files with 322 additions and 322 deletions
@@ -67,7 +67,7 @@ public object CodegenUtilKt {
} }
else null else null
} }
assert(actualDelegates.size() <= 1) { "Many delegates found for $delegatingMember: $actualDelegates" } assert(actualDelegates.size <= 1) { "Many delegates found for $delegatingMember: $actualDelegates" }
actualDelegates.firstOrNull() actualDelegates.firstOrNull()
} }
@@ -109,7 +109,7 @@ public fun <Function : FunctionHandle> findConcreteSuperDeclaration(function: Fu
result.removeAll(toRemove) result.removeAll(toRemove)
val concreteRelevantDeclarations = result.filter { !it.isAbstract } val concreteRelevantDeclarations = result.filter { !it.isAbstract }
if (concreteRelevantDeclarations.size() != 1) { if (concreteRelevantDeclarations.size != 1) {
error("Concrete fake override $function should have exactly one concrete super-declaration: $concreteRelevantDeclarations") error("Concrete fake override $function should have exactly one concrete super-declaration: $concreteRelevantDeclarations")
} }
@@ -32,8 +32,8 @@ abstract class ArgumentGenerator {
* @see kotlin.reflect.jvm.internal.KCallableImpl.callBy * @see kotlin.reflect.jvm.internal.KCallableImpl.callBy
*/ */
open fun generate(valueArgumentsByIndex: List<ResolvedValueArgument>, actualArgs: List<ResolvedValueArgument>): DefaultCallMask { open fun generate(valueArgumentsByIndex: List<ResolvedValueArgument>, actualArgs: List<ResolvedValueArgument>): DefaultCallMask {
assert(valueArgumentsByIndex.size() == actualArgs.size()) { assert(valueArgumentsByIndex.size == actualArgs.size) {
"Value arguments collection should have same size, but ${valueArgumentsByIndex.size()} != ${actualArgs.size()}" "Value arguments collection should have same size, but ${valueArgumentsByIndex.size} != ${actualArgs.size}"
} }
val arg2Index = valueArgumentsByIndex.mapToIndex() val arg2Index = valueArgumentsByIndex.mapToIndex()
@@ -48,7 +48,7 @@ abstract class ArgumentGenerator {
} }
} }
val masks = DefaultCallMask(valueArgumentsByIndex.size()) val masks = DefaultCallMask(valueArgumentsByIndex.size)
for (argumentWithDeclIndex in actualArgsWithDeclIndex) { for (argumentWithDeclIndex in actualArgsWithDeclIndex) {
val argument = argumentWithDeclIndex.arg val argument = argumentWithDeclIndex.arg
@@ -214,7 +214,7 @@ class CollectionStubMethodGenerator(
private fun Collection<KotlinType>.findMostSpecificTypeForClass(klass: ClassDescriptor): KotlinType { private fun Collection<KotlinType>.findMostSpecificTypeForClass(klass: ClassDescriptor): KotlinType {
val types = this.filter { it.getConstructor().getDeclarationDescriptor() == klass } val types = this.filter { it.getConstructor().getDeclarationDescriptor() == klass }
if (types.isEmpty()) error("No supertype of $klass in $this") if (types.isEmpty()) error("No supertype of $klass in $this")
if (types.size() == 1) return types.first() if (types.size == 1) return types.first()
// Find the first type in the list such that it's a subtype of every other type in that list // Find the first type in the list such that it's a subtype of every other type in that list
return types.first { type -> return types.first { type ->
types.all { other -> KotlinTypeChecker.DEFAULT.isSubtypeOf(type, other) } types.all { other -> KotlinTypeChecker.DEFAULT.isSubtypeOf(type, other) }
@@ -227,7 +227,7 @@ class CollectionStubMethodGenerator(
child.setModality(Modality.FINAL) child.setModality(Modality.FINAL)
child.setVisibility(Visibilities.PUBLIC) child.setVisibility(Visibilities.PUBLIC)
val typeParameters = descriptor.getTypeConstructor().getParameters() val typeParameters = descriptor.getTypeConstructor().getParameters()
val newTypeParameters = ArrayList<TypeParameterDescriptor>(typeParameters.size()) val newTypeParameters = ArrayList<TypeParameterDescriptor>(typeParameters.size)
DescriptorSubstitutor.substituteTypeParameters(typeParameters, TypeSubstitution.EMPTY, child, newTypeParameters) DescriptorSubstitutor.substituteTypeParameters(typeParameters, TypeSubstitution.EMPTY, child, newTypeParameters)
child.setTypeParameterDescriptors(typeParameters) child.setTypeParameterDescriptors(typeParameters)
return Pair(child, newTypeParameters) return Pair(child, newTypeParameters)
@@ -32,9 +32,9 @@ public class InlineCycleReporter(val diagnostics: DiagnosticSink) {
if (call != null) { if (call != null) {
val callElement = call.getCall().getCallElement() val callElement = call.getCall().getCallElement()
if (processingFunctions.contains(callElement)) { if (processingFunctions.contains(callElement)) {
val cycle = processingFunctions.asSequence().dropWhile { it.getKey() != callElement } val cycle = processingFunctions.asSequence().dropWhile { it.key != callElement }
cycle.forEach { cycle.forEach {
diagnostics.report(Errors.INLINE_CALL_CYCLE.on(it.getKey(), it.getValue())) diagnostics.report(Errors.INLINE_CALL_CYCLE.on(it.key, it.value))
} }
return false return false
} }
@@ -123,7 +123,7 @@ public class InterfaceImplBodyCodegen(
val myParameters = signature.getValueParameters() val myParameters = signature.getValueParameters()
val calleeParameters = method.getValueParameters() val calleeParameters = method.getValueParameters()
if (myParameters.size() != calleeParameters.size()) { if (myParameters.size != calleeParameters.size) {
throw AssertionError( throw AssertionError(
"Method from super interface has a different signature.\n" + "Method from super interface has a different signature.\n" +
"This method:\n%s\n%s\n%s\nSuper method:\n%s\n%s\n%s".format( "This method:\n%s\n%s\n%s\nSuper method:\n%s\n%s\n%s".format(
@@ -312,7 +312,7 @@ public class MultifileClassCodegen(
fragments.add(fragment) fragments.add(fragment)
} }
} }
if (fragments.size() > 1) { if (fragments.size > 1) {
throw IllegalStateException("More than one package fragment, files: $files | fragments: $fragments") throw IllegalStateException("More than one package fragment, files: $files | fragments: $fragments")
} }
return fragments.firstOrNull() return fragments.firstOrNull()
@@ -67,7 +67,7 @@ public abstract class SignatureCollectingClassBuilderFactory(
override fun done() { override fun done() {
for ((signature, elementsAndDescriptors) in signatures.entrySet()) { for ((signature, elementsAndDescriptors) in signatures.entrySet()) {
if (elementsAndDescriptors.size() == 1) continue // no clash if (elementsAndDescriptors.size == 1) continue // no clash
handleClashingSignatures(ConflictingJvmDeclarationsData( handleClashingSignatures(ConflictingJvmDeclarationsData(
classInternalName, classInternalName,
classCreatedFor, classCreatedFor,
@@ -47,7 +47,7 @@ private fun List<PackageParts>.addCompiledParts(state: GenerationState): List<Pa
mapping.findPackageParts(qualifier)?.run { parts.remove(name) } mapping.findPackageParts(qualifier)?.run { parts.remove(name) }
} }
return (this + mapping.packageFqName2Parts.values()) return (this + mapping.packageFqName2Parts.values)
.groupBy { it.packageFqName } .groupBy { it.packageFqName }
.map { .map {
val (packageFqName, packageParts) = it val (packageFqName, packageParts) = it
@@ -38,7 +38,7 @@ class DefaultImplsClassContext(
override fun getAccessors(): Collection<AccessorForCallableDescriptor<*>> { override fun getAccessors(): Collection<AccessorForCallableDescriptor<*>> {
val accessors = super.getAccessors() val accessors = super.getAccessors()
val alreadyExistKeys = accessors.map ({ Pair(it.calleeDescriptor, it.superCallTarget) }) val alreadyExistKeys = accessors.map ({ Pair(it.calleeDescriptor, it.superCallTarget) })
val filtered = interfaceContext.accessors.toMap ({ Pair(it.calleeDescriptor, it.superCallTarget) }, {it}) - alreadyExistKeys val filtered = interfaceContext.accessors.toMapBy({ Pair(it.calleeDescriptor, it.superCallTarget) }, { it }) - alreadyExistKeys
return accessors + filtered.values return accessors + filtered.values
} }
} }
@@ -54,10 +54,10 @@ internal class Parameters(val real: List<ParameterInfo>, val captured: List<Capt
} }
private fun get(index: Int): ParameterInfo { private fun get(index: Int): ParameterInfo {
if (index < real.size()) { if (index < real.size) {
return real.get(index) return real.get(index)
} }
return captured.get(index - real.size()) return captured.get(index - real.size)
} }
override fun iterator(): Iterator<ParameterInfo> { override fun iterator(): Iterator<ParameterInfo> {
@@ -35,18 +35,18 @@ internal class ParametersBuilder private constructor(){
private var nextCaptured = 0 private var nextCaptured = 0
fun addThis(type: Type, skipped: Boolean): ParameterInfo { fun addThis(type: Type, skipped: Boolean): ParameterInfo {
val info = ParameterInfo(type, skipped, nextValueParameterIndex, -1, valueAndHiddenParams.size()) val info = ParameterInfo(type, skipped, nextValueParameterIndex, -1, valueAndHiddenParams.size)
addParameter(info) addParameter(info)
return info return info
} }
fun addNextParameter(type: Type, skipped: Boolean, remapValue: StackValue?): ParameterInfo { fun addNextParameter(type: Type, skipped: Boolean, remapValue: StackValue?): ParameterInfo {
return addParameter(ParameterInfo(type, skipped, nextValueParameterIndex, remapValue, valueAndHiddenParams.size())) return addParameter(ParameterInfo(type, skipped, nextValueParameterIndex, remapValue, valueAndHiddenParams.size))
} }
fun addNextValueParameter(type: Type, skipped: Boolean, remapValue: StackValue?, parameterIndex: Int): ParameterInfo { fun addNextValueParameter(type: Type, skipped: Boolean, remapValue: StackValue?, parameterIndex: Int): ParameterInfo {
return addParameter(ParameterInfo(type, skipped, nextValueParameterIndex, remapValue, return addParameter(ParameterInfo(type, skipped, nextValueParameterIndex, remapValue,
if (parameterIndex == -1) valueAndHiddenParams.size() else { parameterIndex + valueParamStart })) if (parameterIndex == -1) valueAndHiddenParams.size else { parameterIndex + valueParamStart }))
} }
fun addCapturedParam( fun addCapturedParam(
@@ -102,7 +102,7 @@ internal class ParametersBuilder private constructor(){
} }
fun markValueParametesStart(){ fun markValueParametesStart(){
this.valueParamStart = valueAndHiddenParams.size() this.valueParamStart = valueAndHiddenParams.size
} }
fun listCaptured(): List<CapturedParamInfo> { fun listCaptured(): List<CapturedParamInfo> {
@@ -202,7 +202,7 @@ public open class DefaultSourceMapper(val sourceInfo: SourceInfo, override val p
private fun createKey(name: String, path: String) = "$name#$path" private fun createKey(name: String, path: String) = "$name#$path"
override val resultMappings: List<FileMapping> override val resultMappings: List<FileMapping>
get() = fileMappings.values().map { it.toFileMapping() } get() = fileMappings.values.map { it.toFileMapping() }
override fun visitSource(name: String, path: String) { override fun visitSource(name: String, path: String) {
lastVisited = fileMappings.getOrPut(createKey(name, path), { RawFileMapping(name, path) }) lastVisited = fileMappings.getOrPut(createKey(name, path), { RawFileMapping(name, path) })
@@ -44,7 +44,7 @@ object SMAPParser {
public fun parse(mappingInfo: String): SMAP { public fun parse(mappingInfo: String): SMAP {
val fileMappings = linkedMapOf<Int, FileMapping>() val fileMappings = linkedMapOf<Int, FileMapping>()
val fileSectionStart = mappingInfo.indexOf(SMAP.FILE_SECTION) + SMAP.FILE_SECTION.length() val fileSectionStart = mappingInfo.indexOf(SMAP.FILE_SECTION) + SMAP.FILE_SECTION.length
val lineSectionAnchor = mappingInfo.indexOf(SMAP.LINE_SECTION) val lineSectionAnchor = mappingInfo.indexOf(SMAP.LINE_SECTION)
val files = mappingInfo.substring(fileSectionStart, lineSectionAnchor) val files = mappingInfo.substring(fileSectionStart, lineSectionAnchor)
@@ -63,7 +63,7 @@ object SMAPParser {
} }
val lines = mappingInfo.substring(lineSectionAnchor + SMAP.LINE_SECTION.length(), mappingInfo.indexOf(SMAP.END)).trim().split('\n') val lines = mappingInfo.substring(lineSectionAnchor + SMAP.LINE_SECTION.length, mappingInfo.indexOf(SMAP.END)).trim().split('\n')
for (lineMapping in lines) { for (lineMapping in lines) {
/*only simple mapping now*/ /*only simple mapping now*/
val targetSplit = lineMapping.indexOf(':') val targetSplit = lineMapping.indexOf(':')
@@ -79,6 +79,6 @@ object SMAPParser {
fileMappings[fileIndex]!!.addRangeMapping(RangeMapping(originalIndex, targetIndex, range)) fileMappings[fileIndex]!!.addRangeMapping(RangeMapping(originalIndex, targetIndex, range))
} }
return SMAP(fileMappings.values().toList()) return SMAP(fileMappings.values.toList())
} }
} }
@@ -97,5 +97,5 @@ fun <T : IntervalWithHandler> doClustering(blocks: List<T>): List<TryBlockCluste
cluster.blocks.add(block) cluster.blocks.add(block)
} }
return clusters.values().toList() return clusters.values.toList()
} }
@@ -31,7 +31,7 @@ public class BinaryOp(private val opcode: Int) : IntrinsicMethod() {
override fun toCallable(method: CallableMethod): Callable { override fun toCallable(method: CallableMethod): Callable {
val returnType = method.returnType val returnType = method.returnType
assert(method.getValueParameters().size() == 1) assert(method.getValueParameters().size == 1)
val operandType = numberFunctionOperandType(returnType) val operandType = numberFunctionOperandType(returnType)
val paramType = if (shift()) Type.INT_TYPE else operandType val paramType = if (shift()) Type.INT_TYPE else operandType
@@ -32,7 +32,7 @@ class IsArrayOf : IntrinsicMethod() {
val method = typeMapper.mapToCallableMethod(fd, false) val method = typeMapper.mapToCallableMethod(fd, false)
val builtIns = fd.module.builtIns val builtIns = fd.module.builtIns
val elementType = typeArguments.values().first() val elementType = typeArguments.values.first()
val arrayKtType = builtIns.getArrayType(Variance.INVARIANT, elementType) val arrayKtType = builtIns.getArrayType(Variance.INVARIANT, elementType)
val arrayType = typeMapper.mapType(arrayKtType) val arrayType = typeMapper.mapType(arrayKtType)
@@ -28,7 +28,7 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
public class JavaClassFunction : IntrinsicMethod() { public class JavaClassFunction : IntrinsicMethod() {
override fun toCallable(fd: FunctionDescriptor, isSuper: Boolean, resolvedCall: ResolvedCall<*>, codegen: ExpressionCodegen): Callable { override fun toCallable(fd: FunctionDescriptor, isSuper: Boolean, resolvedCall: ResolvedCall<*>, codegen: ExpressionCodegen): Callable {
val javaClass = resolvedCall.getResultingDescriptor().getReturnType()!!.getArguments().first().getType() val javaClass = resolvedCall.getResultingDescriptor().getReturnType()!!.getArguments().first().getType()
return object : IntrinsicCallable(getType(javaClass<Class<Any>>()), listOf(), null, null) { return object : IntrinsicCallable(getType(Class::class.java), listOf(), null, null) {
override fun invokeIntrinsic(v: InstructionAdapter) { override fun invokeIntrinsic(v: InstructionAdapter) {
codegen.putReifiedOperationMarkerIfTypeIsReifiedParameter(javaClass, ReifiedTypeInliner.OperationKind.JAVA_CLASS) codegen.putReifiedOperationMarkerIfTypeIsReifiedParameter(javaClass, ReifiedTypeInliner.OperationKind.JAVA_CLASS)
putJavaLangClassInstance(v, codegen.getState().typeMapper.mapType(javaClass)) putJavaLangClassInstance(v, codegen.getState().typeMapper.mapType(javaClass))
@@ -54,12 +54,12 @@ public class JavaClassProperty : IntrinsicPropertyGetter() {
v.invokevirtual("java/lang/Object", "getClass", "()Ljava/lang/Class;", false) v.invokevirtual("java/lang/Object", "getClass", "()Ljava/lang/Class;", false)
} }
return getType(javaClass<Class<Any>>()) return getType(Class::class.java)
} }
override fun toCallable(fd: FunctionDescriptor, isSuper: Boolean, resolvedCall: ResolvedCall<*>, codegen: ExpressionCodegen): Callable { override fun toCallable(fd: FunctionDescriptor, isSuper: Boolean, resolvedCall: ResolvedCall<*>, codegen: ExpressionCodegen): Callable {
val classType = codegen.getState().typeMapper.mapType(resolvedCall.getCall().getDispatchReceiver()!!.getType()) val classType = codegen.getState().typeMapper.mapType(resolvedCall.getCall().getDispatchReceiver()!!.getType())
return object : IntrinsicCallable(getType(javaClass<Class<Any>>()), listOf(), classType, null) { return object : IntrinsicCallable(getType(Class::class.java), listOf(), classType, null) {
override fun invokeIntrinsic(v: InstructionAdapter) { override fun invokeIntrinsic(v: InstructionAdapter) {
if (isPrimitive(classType)) { if (isPrimitive(classType)) {
v.getstatic(boxType(classType).getInternalName(), "TYPE", "Ljava/lang/Class;") v.getstatic(boxType(classType).getInternalName(), "TYPE", "Ljava/lang/Class;")
@@ -110,10 +110,10 @@ public open class MethodAnalyzer<V : Value>(
} }
catch (e: AnalyzerException) { catch (e: AnalyzerException) {
throw AnalyzerException(e.node, "Error at instruction " + insn + ": " + e.getMessage(), e) throw AnalyzerException(e.node, "Error at instruction " + insn + ": " + e.message, e)
} }
catch (e: Exception) { catch (e: Exception) {
throw AnalyzerException(insnNode, "Error at instruction " + insn + ": " + e.getMessage(), e) throw AnalyzerException(insnNode, "Error at instruction " + insn + ": " + e.message, e)
} }
} }
@@ -71,7 +71,7 @@ private fun insertSaveRestoreStackMarkers(
val doneTryStartLabels = hashSetOf<LabelNode>() val doneTryStartLabels = hashSetOf<LabelNode>()
val doneHandlerLabels = hashSetOf<LabelNode>() val doneHandlerLabels = hashSetOf<LabelNode>()
for (decompiledTryDescriptor in decompiledTryDescriptorForStart.values()) { for (decompiledTryDescriptor in decompiledTryDescriptorForStart.values) {
with(decompiledTryDescriptor) { with(decompiledTryDescriptor) {
if (!doneTryStartLabels.contains(tryStartLabel)) { if (!doneTryStartLabels.contains(tryStartLabel)) {
doneTryStartLabels.add(tryStartLabel) doneTryStartLabels.add(tryStartLabel)
@@ -96,7 +96,7 @@ internal class FixStackAnalyzer(
} }
else { else {
extraStack.add(value) extraStack.add(value)
maxExtraStackSize = Math.max(maxExtraStackSize, extraStack.size()) maxExtraStackSize = Math.max(maxExtraStackSize, extraStack.size)
} }
} }
@@ -107,7 +107,7 @@ internal class FixStackContext(val methodNode: MethodNode) {
if (saveNodes.isEmpty()) { if (saveNodes.isEmpty()) {
throw AssertionError("${indexOf(insnNode)}: in handler ${indexOf(restoreLabel)} restore is not matched with save") throw AssertionError("${indexOf(insnNode)}: in handler ${indexOf(restoreLabel)} restore is not matched with save")
} }
else if (saveNodes.size() > 1) { else if (saveNodes.size > 1) {
throw AssertionError("${indexOf(insnNode)}: in handler ${indexOf(restoreLabel)} restore is matched with several saves") throw AssertionError("${indexOf(insnNode)}: in handler ${indexOf(restoreLabel)} restore is matched with several saves")
} }
val saveNode = saveNodes.first() val saveNode = saveNodes.first()
@@ -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)
} }
@@ -58,7 +58,7 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod
} }
private fun getFirstUnusedLocalVariableIndex(): Int = private fun getFirstUnusedLocalVariableIndex(): Int =
allocatedHandles.values().fold(initialMaxLocals) { allocatedHandles.values.fold(initialMaxLocals) {
index, handle -> Math.max(index, handle.savedStackDescriptor.firstUnusedLocalVarIndex) index, handle -> Math.max(index, handle.savedStackDescriptor.firstUnusedLocalVarIndex)
} }
@@ -38,7 +38,7 @@ class JvmStringTable(private val typeMapper: JetTypeMapper) : StringTable {
override fun getStringIndex(string: String): Int = override fun getStringIndex(string: String): Int =
map.getOrPut(string) { map.getOrPut(string) {
strings.size().apply { strings.size.apply {
strings.add(string) strings.add(string)
val lastRecord = records.lastOrNull() val lastRecord = records.lastOrNull()
@@ -78,7 +78,7 @@ class JvmStringTable(private val typeMapper: JetTypeMapper) : StringTable {
} }
} }
val index = strings.size() val index = strings.size
if (classId.isLocal) { if (classId.isLocal) {
localNames.add(index) localNames.add(index)
} }
@@ -76,7 +76,7 @@ val CallableDescriptor?.isMethodWithDeclarationSiteWildcards: Boolean
get() { get() {
if (this !is CallableMemberDescriptor) return false if (this !is CallableMemberDescriptor) return false
return firstOverridden { return firstOverridden {
METHODS_WITH_DECLARATION_SITE_WILDCARDS.containsRaw(it.propertyIfAccessor.fqNameOrNull()) METHODS_WITH_DECLARATION_SITE_WILDCARDS.contains(it.propertyIfAccessor.fqNameOrNull())
} != null } != null
} }
@@ -41,7 +41,7 @@ public object Main {
classpath.add(".") classpath.add(".")
var i = 0 var i = 0
while (i < args.size()) { while (i < args.size) {
val arg = args[i] val arg = args[i]
if (collectingArguments) { if (collectingArguments) {
arguments.add(arg) arguments.add(arg)
@@ -50,7 +50,7 @@ public object Main {
} }
fun next(): String { fun next(): String {
if (++i == args.size()) { if (++i == args.size) {
throw RunnerException("argument expected to $arg") throw RunnerException("argument expected to $arg")
} }
return args[i] return args[i]
@@ -105,7 +105,7 @@ public object Main {
run(args) run(args)
} }
catch (e: RunnerException) { catch (e: RunnerException) {
System.err.println("error: " + e.getMessage()) System.err.println("error: " + e.message)
System.exit(1) System.exit(1)
} }
} }
@@ -85,7 +85,7 @@ class JarRunner(private val path: String) : AbstractRunner() {
} }
} }
catch (e: IOException) { catch (e: IOException) {
throw RunnerException("could not read manifest from " + path + ": " + e.getMessage()) throw RunnerException("could not read manifest from " + path + ": " + e.message)
} }
?: throw RunnerException("no Main-Class entry found in manifest in $path") ?: throw RunnerException("no Main-Class entry found in manifest in $path")
@@ -61,11 +61,11 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageSeverityCollector) configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageSeverityCollector)
if (IncrementalCompilation.isEnabled()) { if (IncrementalCompilation.isEnabled()) {
val incrementalCompilationComponents = services.get(javaClass<IncrementalCompilationComponents>()) val incrementalCompilationComponents = services.get(IncrementalCompilationComponents::class.java)
configuration.put(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS, incrementalCompilationComponents) configuration.put(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS, incrementalCompilationComponents)
} }
val locator = services.get(javaClass<CompilerJarLocator>()) val locator = services.get(CompilerJarLocator::class.java)
configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator) configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator)
try { try {
@@ -83,12 +83,12 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
PluginCliParser.loadPlugins(arguments, configuration) PluginCliParser.loadPlugins(arguments, configuration)
} }
catch (e: PluginCliOptionProcessingException) { catch (e: PluginCliOptionProcessingException) {
val message = e.getMessage() + "\n\n" + cliPluginUsageString(e.pluginId, e.options) val message = e.message + "\n\n" + cliPluginUsageString(e.pluginId, e.options)
messageSeverityCollector.report(CompilerMessageSeverity.ERROR, message, CompilerMessageLocation.NO_LOCATION) messageSeverityCollector.report(CompilerMessageSeverity.ERROR, message, CompilerMessageLocation.NO_LOCATION)
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.message!!, CompilerMessageLocation.NO_LOCATION)
return INTERNAL_ERROR return INTERNAL_ERROR
} }
catch (t: Throwable) { catch (t: Throwable) {
@@ -169,7 +169,7 @@ public open class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
KotlinToJVMBytecodeCompiler.compileModules(environment, configuration, moduleScript.getModules(), directory, jar, friendPaths, arguments.includeRuntime) KotlinToJVMBytecodeCompiler.compileModules(environment, configuration, moduleScript.getModules(), directory, jar, friendPaths, arguments.includeRuntime)
} }
else if (arguments.script) { else if (arguments.script) {
val scriptArgs = arguments.freeArgs.subList(1, arguments.freeArgs.size()) val scriptArgs = arguments.freeArgs.subList(1, arguments.freeArgs.size)
environment = createCoreEnvironment(rootDisposable, configuration) environment = createCoreEnvironment(rootDisposable, configuration)
if (messageSeverityCollector.anyReported(CompilerMessageSeverity.ERROR)) return COMPILATION_ERROR if (messageSeverityCollector.anyReported(CompilerMessageSeverity.ERROR)) return COMPILATION_ERROR
@@ -38,7 +38,7 @@ public object PluginCliParser {
javaClass.getClassLoader() javaClass.getClassLoader()
) )
val componentRegistrars = ServiceLoader.load(javaClass<ComponentRegistrar>(), classLoader).toArrayList() val componentRegistrars = ServiceLoader.load(ComponentRegistrar::class.java, classLoader).toArrayList()
componentRegistrars.addAll(BundledCompilerPlugins.componentRegistrars) componentRegistrars.addAll(BundledCompilerPlugins.componentRegistrars)
configuration.addAll(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, componentRegistrars) configuration.addAll(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, componentRegistrars)
@@ -55,7 +55,7 @@ public object PluginCliParser {
it.pluginId it.pluginId
} ?: mapOf() } ?: mapOf()
val commandLineProcessors = ServiceLoader.load(javaClass<CommandLineProcessor>(), classLoader).toArrayList() val commandLineProcessors = ServiceLoader.load(CommandLineProcessor::class.java, classLoader).toArrayList()
commandLineProcessors.addAll(BundledCompilerPlugins.commandLineProcessors) commandLineProcessors.addAll(BundledCompilerPlugins.commandLineProcessors)
for (processor in commandLineProcessors) { for (processor in commandLineProcessors) {
@@ -78,7 +78,7 @@ public object PluginCliParser {
processor.pluginOptions, processor.pluginOptions,
"Required plugin option not present: ${processor.pluginId}:${option.name}") "Required plugin option not present: ${processor.pluginId}:${option.name}")
} }
if (!option.allowMultipleOccurrences && values.size() > 1) { if (!option.allowMultipleOccurrences && values.size > 1) {
throw PluginCliOptionProcessingException( throw PluginCliOptionProcessingException(
processor.pluginId, processor.pluginId,
processor.pluginOptions, processor.pluginOptions,
@@ -119,14 +119,14 @@ public class KotlinCoreEnvironment private constructor(
init { init {
val project = projectEnvironment.getProject() val project = projectEnvironment.getProject()
project.registerService(javaClass<DeclarationProviderFactoryService>(), CliDeclarationProviderFactoryService(sourceFiles)) project.registerService(DeclarationProviderFactoryService::class.java, CliDeclarationProviderFactoryService(sourceFiles))
project.registerService(ModuleVisibilityManager::class.java, CliModuleVisibilityManagerImpl()) project.registerService(ModuleVisibilityManager::class.java, CliModuleVisibilityManagerImpl())
registerProjectServicesForCLI(projectEnvironment) registerProjectServicesForCLI(projectEnvironment)
registerProjectServices(projectEnvironment) registerProjectServices(projectEnvironment)
fillClasspath(configuration) fillClasspath(configuration)
val fileManager = ServiceManager.getService(project, javaClass<CoreJavaFileManager>()) val fileManager = ServiceManager.getService(project, CoreJavaFileManager::class.java)
val index = JvmDependenciesIndex(javaRoots) val index = JvmDependenciesIndex(javaRoots)
(fileManager as KotlinCliJavaFileManagerImpl).initIndex(index) (fileManager as KotlinCliJavaFileManagerImpl).initIndex(index)
@@ -142,7 +142,7 @@ public class KotlinCoreEnvironment private constructor(
KotlinScriptDefinitionProvider.getInstance(project).setScriptDefinitions(configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY)) KotlinScriptDefinitionProvider.getInstance(project).setScriptDefinitions(configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY))
project.registerService(javaClass<JvmVirtualFileFinderFactory>(), JvmCliVirtualFileFinderFactory(index)) project.registerService(JvmVirtualFileFinderFactory::class.java, JvmCliVirtualFileFinderFactory(index))
ExternalDeclarationsProvider.registerExtensionPoint(project) ExternalDeclarationsProvider.registerExtensionPoint(project)
ExpressionCodegenExtension.registerExtensionPoint(project) ExpressionCodegenExtension.registerExtensionPoint(project)
@@ -342,16 +342,16 @@ public class KotlinCoreEnvironment private constructor(
} }
private fun registerAppExtensionPoints() { private fun registerAppExtensionPoints() {
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), BinaryFileStubBuilders.EP_NAME, javaClass<FileTypeExtensionPoint<Any>>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), BinaryFileStubBuilders.EP_NAME, FileTypeExtensionPoint::class.java)
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), FileContextProvider.EP_NAME, javaClass<FileContextProvider>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), FileContextProvider.EP_NAME, FileContextProvider::class.java)
// //
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), MetaDataContributor.EP_NAME, javaClass<MetaDataContributor>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), MetaDataContributor.EP_NAME, MetaDataContributor::class.java)
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), PsiAugmentProvider.EP_NAME, javaClass<PsiAugmentProvider>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), PsiAugmentProvider.EP_NAME, PsiAugmentProvider::class.java)
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), JavaMainMethodProvider.EP_NAME, javaClass<JavaMainMethodProvider>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), JavaMainMethodProvider.EP_NAME, JavaMainMethodProvider::class.java)
// //
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ContainerProvider.EP_NAME, javaClass<ContainerProvider>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ContainerProvider.EP_NAME, ContainerProvider::class.java)
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ClsCustomNavigationPolicy.EP_NAME, javaClass<ClsCustomNavigationPolicy>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ClsCustomNavigationPolicy.EP_NAME, ClsCustomNavigationPolicy::class.java)
CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ClassFileDecompilers.EP_NAME, javaClass<ClassFileDecompilers.Decompiler>()) CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), ClassFileDecompilers.EP_NAME, ClassFileDecompilers.Decompiler::class.java)
} }
private fun registerApplicationExtensionPointsAndExtensionsFrom(configuration: CompilerConfiguration, configFilePath: String) { private fun registerApplicationExtensionPointsAndExtensionsFrom(configuration: CompilerConfiguration, configFilePath: String) {
@@ -384,40 +384,40 @@ public class KotlinCoreEnvironment private constructor(
registerFileType(KotlinFileType.INSTANCE, "kt") registerFileType(KotlinFileType.INSTANCE, "kt")
registerFileType(KotlinFileType.INSTANCE, KotlinParserDefinition.STD_SCRIPT_SUFFIX) registerFileType(KotlinFileType.INSTANCE, KotlinParserDefinition.STD_SCRIPT_SUFFIX)
registerParserDefinition(KotlinParserDefinition()) registerParserDefinition(KotlinParserDefinition())
getApplication().registerService(javaClass<KotlinBinaryClassCache>(), KotlinBinaryClassCache()) getApplication().registerService(KotlinBinaryClassCache::class.java, KotlinBinaryClassCache())
getApplication().registerService(javaClass<JavaClassSupers>(), javaClass<JavaClassSupersImpl>()) getApplication().registerService(JavaClassSupers::class.java, JavaClassSupersImpl::class.java)
} }
} }
private fun registerProjectExtensionPoints(area: ExtensionsArea) { private fun registerProjectExtensionPoints(area: ExtensionsArea) {
CoreApplicationEnvironment.registerExtensionPoint(area, PsiTreeChangePreprocessor.EP_NAME, javaClass<PsiTreeChangePreprocessor>()) CoreApplicationEnvironment.registerExtensionPoint(area, PsiTreeChangePreprocessor.EP_NAME, PsiTreeChangePreprocessor::class.java)
CoreApplicationEnvironment.registerExtensionPoint(area, PsiElementFinder.EP_NAME, javaClass<PsiElementFinder>()) CoreApplicationEnvironment.registerExtensionPoint(area, PsiElementFinder.EP_NAME, PsiElementFinder::class.java)
} }
// made public for Upsource // made public for Upsource
@JvmStatic @JvmStatic
public fun registerProjectServices(projectEnvironment: JavaCoreProjectEnvironment) { public fun registerProjectServices(projectEnvironment: JavaCoreProjectEnvironment) {
with (projectEnvironment.getProject()) { with (projectEnvironment.getProject()) {
registerService(javaClass<KotlinScriptDefinitionProvider>(), KotlinScriptDefinitionProvider()) registerService(KotlinScriptDefinitionProvider::class.java, KotlinScriptDefinitionProvider())
registerService(javaClass<KotlinJavaPsiFacade>(), KotlinJavaPsiFacade(this)) registerService(KotlinJavaPsiFacade::class.java, KotlinJavaPsiFacade(this))
registerService(javaClass<KtLightClassForFacade.FacadeStubCache>(), KtLightClassForFacade.FacadeStubCache(this)) registerService(KtLightClassForFacade.FacadeStubCache::class.java, KtLightClassForFacade.FacadeStubCache(this))
} }
} }
private fun registerProjectServicesForCLI(projectEnvironment: JavaCoreProjectEnvironment) { private fun registerProjectServicesForCLI(projectEnvironment: JavaCoreProjectEnvironment) {
with (projectEnvironment.getProject()) { with (projectEnvironment.getProject()) {
registerService(javaClass<CoreJavaFileManager>(), ServiceManager.getService(this, javaClass<JavaFileManager>()) as CoreJavaFileManager) registerService(CoreJavaFileManager::class.java, ServiceManager.getService(this, JavaFileManager::class.java) as CoreJavaFileManager)
val cliLightClassGenerationSupport = CliLightClassGenerationSupport(this) val cliLightClassGenerationSupport = CliLightClassGenerationSupport(this)
registerService(javaClass<LightClassGenerationSupport>(), cliLightClassGenerationSupport) registerService(LightClassGenerationSupport::class.java, cliLightClassGenerationSupport)
registerService(javaClass<CliLightClassGenerationSupport>(), cliLightClassGenerationSupport) registerService(CliLightClassGenerationSupport::class.java, cliLightClassGenerationSupport)
registerService(javaClass<CodeAnalyzerInitializer>(), cliLightClassGenerationSupport) registerService(CodeAnalyzerInitializer::class.java, cliLightClassGenerationSupport)
val area = Extensions.getArea(this) val area = Extensions.getArea(this)
area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(JavaElementFinder(this, cliLightClassGenerationSupport)) area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(JavaElementFinder(this, cliLightClassGenerationSupport))
area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension( area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(
PsiElementFinderImpl(this, ServiceManager.getService(this, javaClass<JavaFileManager>()))) PsiElementFinderImpl(this, ServiceManager.getService(this, JavaFileManager::class.java)))
} }
} }
} }
@@ -31,7 +31,7 @@ public class ReplSystemInWrapper(
private var inputByteArray = byteArrayOf() private var inputByteArray = byteArrayOf()
private val isAtBufferEnd: Boolean private val isAtBufferEnd: Boolean
get() = curBytePos == inputByteArray.size() get() = curBytePos == inputByteArray.size
@Volatile var isReplScriptExecuting = false @Volatile var isReplScriptExecuting = false
@@ -25,7 +25,7 @@ data class Modification(val range: TextRange, val apply: (String) -> String)
class CollectModificationsVisitor(evaluators: List<Evaluator>) : KtTreeVisitorVoid() { class CollectModificationsVisitor(evaluators: List<Evaluator>) : KtTreeVisitorVoid() {
val elementModifications: Map<Evaluator, MutableList<Modification>> = val elementModifications: Map<Evaluator, MutableList<Modification>> =
evaluators.toMap(selector = { it }, transform = { arrayListOf<Modification>() }) evaluators.toMapBy(selector = { it }, transform = { arrayListOf<Modification>() })
override fun visitDeclaration(declaration: KtDeclaration) { override fun visitDeclaration(declaration: KtDeclaration) {
super.visitDeclaration(declaration) super.visitDeclaration(declaration)
@@ -40,10 +40,10 @@ class CollectModificationsVisitor(evaluators: List<Evaluator>) : KtTreeVisitorVo
if (!conditionalResult) if (!conditionalResult)
modifications.add(Modification(declaration.textRange) { rangeText -> modifications.add(Modification(declaration.textRange) { rangeText ->
StringBuilder { buildString {
append("/* Not available on $evaluator */") append("/* Not available on $evaluator */")
repeat(StringUtil.getLineBreakCount(rangeText)) { append("\n") } repeat(StringUtil.getLineBreakCount(rangeText)) { append("\n") }
}.toString() }
}) })
else { else {
val targetName = annotations.filterIsInstance<Conditional.TargetName>().singleOrNull() val targetName = annotations.filterIsInstance<Conditional.TargetName>().singleOrNull()
@@ -60,13 +60,13 @@ class CollectModificationsVisitor(evaluators: List<Evaluator>) : KtTreeVisitorVo
} }
fun List<Modification>.applyTo(sourceText: String): String { fun List<Modification>.applyTo(sourceText: String): String {
return StringBuilder { return buildString {
var prevIndex = 0 var prevIndex = 0
for ((range, transform) in this@applyTo) { for ((range, transform) in this@applyTo) {
append(sourceText, prevIndex, range.startOffset) append(sourceText, prevIndex, range.startOffset)
append(transform(range.substring(sourceText))) append(transform(range.substring(sourceText)))
prevIndex = range.endOffset prevIndex = range.endOffset
} }
append(sourceText, prevIndex, sourceText.length()) append(sourceText, prevIndex, sourceText.length)
}.toString() }
} }
@@ -36,10 +36,10 @@ public fun createJvmProfile(targetRoot: File, version: Int): Profile = Profile("
public fun createJsProfile(targetRoot: File): Profile = Profile("JS", JsPlatformEvaluator(), File(targetRoot, "js")) public fun createJsProfile(targetRoot: File): Profile = Profile("JS", JsPlatformEvaluator(), File(targetRoot, "js"))
public val profileEvaluators: Map<String, () -> Evaluator> = public val profileEvaluators: Map<String, () -> Evaluator> =
listOf(6, 7, 8).toMap({ version -> "JVM$version" }, { version -> { JvmPlatformEvaluator(version) } }) + ("JS" to { JsPlatformEvaluator() }) listOf(6, 7, 8).toMapBy({ version -> "JVM$version" }, { version -> { JvmPlatformEvaluator(version) } }) + ("JS" to { JsPlatformEvaluator() })
public fun createProfile(name: String, targetRoot: File): Profile { public fun createProfile(name: String, targetRoot: File): Profile {
val (profileName, evaluator) = profileEvaluators.entrySet().firstOrNull { it.key.equals(name, ignoreCase = true) } ?: throw IllegalArgumentException("Profile with name '$name' is not supported") val (profileName, evaluator) = profileEvaluators.entries.firstOrNull { it.key.equals(name, ignoreCase = true) } ?: throw IllegalArgumentException("Profile with name '$name' is not supported")
return Profile(profileName, evaluator(), targetRoot) return Profile(profileName, evaluator(), targetRoot)
} }
@@ -64,7 +64,7 @@ public class Preprocessor(val logger: Logger = SystemOutLogger) {
class Modify(val sourceText: String, val modifications: List<Modification>) : FileProcessingResult() { class Modify(val sourceText: String, val modifications: List<Modification>) : FileProcessingResult() {
fun getModifiedText(): String = modifications.applyTo(sourceText) fun getModifiedText(): String = modifications.applyTo(sourceText)
override fun toString(): String = "Modify(${modifications.size()})" override fun toString(): String = "Modify(${modifications.size})"
} }
override fun toString() = this.javaClass.simpleName override fun toString() = this.javaClass.simpleName
@@ -89,7 +89,7 @@ public class Preprocessor(val logger: Logger = SystemOutLogger) {
val visitor = CollectModificationsVisitor(listOf(evaluator)) val visitor = CollectModificationsVisitor(listOf(evaluator))
psiFile.accept(visitor) psiFile.accept(visitor)
val list = visitor.elementModifications.values().single() val list = visitor.elementModifications.values.single()
return if (list.isNotEmpty()) return if (list.isNotEmpty())
FileProcessingResult.Modify(sourceText, list) FileProcessingResult.Modify(sourceText, list)
else else
@@ -150,7 +150,7 @@ fun String.convertLineSeparators(): String = StringUtil.convertLineSeparators(th
fun File.isTextEqualTo(content: String): Boolean = readText().lines() == content.lines() fun File.isTextEqualTo(content: String): Boolean = readText().lines() == content.lines()
fun File.makeRelativeTo(from: File, to: File) = File(to, relativeTo(from)) fun File.makeRelativeTo(from: File, to: File) = File(to, toRelativeString(from))
fun File.mkdirsOrFail() { fun File.mkdirsOrFail() {
if (!mkdirs() && !exists()) { if (!mkdirs() && !exists()) {
@@ -21,7 +21,7 @@ import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
fun main(args: Array<String>) { fun main(args: Array<String>) {
if (args.size() != 3) { if (args.size != 3) {
println("Usage: <path to sources> <output path> <profile>") println("Usage: <path to sources> <output path> <profile>")
System.exit(1) System.exit(1)
} }
@@ -38,7 +38,7 @@ public object SystemOutLogger : Logger {
public fun Logger.withPrefix(prefix: String): Logger = PrefixedLogger(prefix, this) public fun Logger.withPrefix(prefix: String): Logger = PrefixedLogger(prefix, this)
public class PrefixedLogger(val prefix: String, val logger: Logger) : Logger { public class PrefixedLogger(val prefix: String, val logger: Logger) : Logger {
private fun prefix(msg: CharSequence): CharSequence = StringBuilder { private fun prefix(msg: CharSequence): CharSequence = StringBuilder().apply {
append(prefix) append(prefix)
append(": ") append(": ")
append(msg) append(msg)
@@ -63,7 +63,7 @@ private fun getSetterInfos(c: Class<*>): List<SetterInfo> {
val setterInfos = ArrayList<SetterInfo>() val setterInfos = ArrayList<SetterInfo>()
for (method in c.getMethods()) { for (method in c.getMethods()) {
for (annotation in method.getDeclaredAnnotations()) { for (annotation in method.getDeclaredAnnotations()) {
if (annotation.annotationType().getName().endsWith(".Inject")) { if (annotation.annotationClass.java.getName().endsWith(".Inject")) {
setterInfos.add(SetterInfo(method, method.getGenericParameterTypes().toList())) setterInfos.add(SetterInfo(method, method.getGenericParameterTypes().toList()))
} }
} }
@@ -114,6 +114,6 @@ private fun getRegistrations(klass: Class<*>): List<Type> {
val interfaces = LinkedHashSet<Type>() val interfaces = LinkedHashSet<Type>()
superClasses.forEach { collectInterfacesRecursive(it, interfaces) } superClasses.forEach { collectInterfacesRecursive(it, interfaces) }
registrations.addAll(interfaces) registrations.addAll(interfaces)
registrations.remove(javaClass<Any>()) registrations.remove(Any::class.java)
return registrations return registrations
} }
@@ -70,14 +70,14 @@ public class StorageComponentContainer(id: String) : ComponentContainer, Compone
private fun resolveIterable(request: Type, context: ValueResolveContext): ValueDescriptor? { private fun resolveIterable(request: Type, context: ValueResolveContext): ValueDescriptor? {
if (request !is ParameterizedType) return null if (request !is ParameterizedType) return null
val rawType = request.getRawType() val rawType = request.getRawType()
if (rawType != javaClass<Iterable<*>>()) return null if (rawType != Iterable::class.java) return null
val typeArguments = request.getActualTypeArguments() val typeArguments = request.getActualTypeArguments()
if (typeArguments.size() != 1) return null if (typeArguments.size != 1) return null
val iterableTypeArgument = typeArguments[0] val iterableTypeArgument = typeArguments[0]
val iterableType = when (iterableTypeArgument) { val iterableType = when (iterableTypeArgument) {
is WildcardType -> { is WildcardType -> {
val upperBounds = iterableTypeArgument.getUpperBounds() val upperBounds = iterableTypeArgument.getUpperBounds()
if (upperBounds.size() != 1) return null if (upperBounds.size != 1) return null
upperBounds[0] upperBounds[0]
} }
is Class<*> -> iterableTypeArgument is Class<*> -> iterableTypeArgument
@@ -112,9 +112,9 @@ public fun StorageComponentContainer.registerInstance(instance: Any): StorageCom
} }
public inline fun <reified T : Any> StorageComponentContainer.resolve(context: ValueResolveContext = unknownContext): ValueDescriptor? { public inline fun <reified T : Any> StorageComponentContainer.resolve(context: ValueResolveContext = unknownContext): ValueDescriptor? {
return resolve(javaClass<T>(), context) return resolve(T::class.java, context)
} }
public inline fun <reified T : Any> StorageComponentContainer.resolveMultiple(context: ValueResolveContext = unknownContext): Iterable<ValueDescriptor> { public inline fun <reified T : Any> StorageComponentContainer.resolveMultiple(context: ValueResolveContext = unknownContext): Iterable<ValueDescriptor> {
return resolveMultiple(javaClass<T>(), context) return resolveMultiple(T::class.java, context)
} }
@@ -58,7 +58,7 @@ fun Method.bindToMethod(context: ValueResolveContext): MethodBinding {
} }
private fun Member.bindArguments(parameters: List<Type>, context: ValueResolveContext): List<ValueDescriptor> { private fun Member.bindArguments(parameters: List<Type>, context: ValueResolveContext): List<ValueDescriptor> {
val bound = ArrayList<ValueDescriptor>(parameters.size()) val bound = ArrayList<ValueDescriptor>(parameters.size)
var unsatisfied: MutableList<Type>? = null var unsatisfied: MutableList<Type>? = null
for (parameter in parameters) { for (parameter in parameters) {
@@ -49,7 +49,7 @@ public class ComponentStorage(val myId: String) : ValueResolver {
if (entry.isNotEmpty()) { if (entry.isNotEmpty()) {
registerDependency(request, context) registerDependency(request, context)
if (entry.size() > 1) if (entry.size > 1)
throw InvalidCardinalityException("Request $request cannot be satisfied because there is more than one type registered", entry) throw InvalidCardinalityException("Request $request cannot be satisfied because there is more than one type registered", entry)
return entry.singleOrNull() return entry.singleOrNull()
} }
@@ -68,7 +68,7 @@ public class ComponentStorage(val myId: String) : ValueResolver {
public fun dump(printer: PrintStream): Unit = with (printer) { public fun dump(printer: PrintStream): Unit = with (printer) {
val heading = "Container: $myId" val heading = "Container: $myId"
println(heading) println(heading)
println("=".repeat(heading.length())) println("=".repeat(heading.length))
println() println()
getDescriptorsInDisposeOrder().forEach { descriptor -> getDescriptorsInDisposeOrder().forEach { descriptor ->
println(descriptor) println(descriptor)
@@ -67,7 +67,7 @@ public object SamConversionResolverImpl : SamConversionResolver {
} }
private fun findFunctionWithMostSpecificReturnType(supertypes: Set<KotlinType>): SimpleFunctionDescriptor { private fun findFunctionWithMostSpecificReturnType(supertypes: Set<KotlinType>): SimpleFunctionDescriptor {
val candidates = ArrayList<SimpleFunctionDescriptor>(supertypes.size()) val candidates = ArrayList<SimpleFunctionDescriptor>(supertypes.size)
for (supertype in supertypes) { for (supertype in supertypes) {
val abstractMembers = SingleAbstractMethodUtils.getAbstractMembers(supertype) val abstractMembers = SingleAbstractMethodUtils.getAbstractMembers(supertype)
if (!abstractMembers.isEmpty()) { if (!abstractMembers.isEmpty()) {
@@ -73,7 +73,7 @@ public class JavaAnnotationCallChecker : CallChecker {
argument: Map.Entry<ValueParameterDescriptor, ResolvedValueArgument>, argument: Map.Entry<ValueParameterDescriptor, ResolvedValueArgument>,
diagnostic: DiagnosticFactory0<KtExpression> diagnostic: DiagnosticFactory0<KtExpression>
) { ) {
argument.getValue().getArguments().forEach { argument.value.getArguments().forEach {
if (it.getArgumentExpression() != null) { if (it.getArgumentExpression() != null) {
context.trace.report( context.trace.report(
diagnostic.on( diagnostic.on(
@@ -24,6 +24,6 @@ public interface JvmVirtualFileFinder : VirtualFileFinder, KotlinClassFinder {
public object SERVICE { public object SERVICE {
@JvmStatic @JvmStatic
public fun getInstance(project: Project): JvmVirtualFileFinder = public fun getInstance(project: Project): JvmVirtualFileFinder =
ServiceManager.getService(project, javaClass<JvmVirtualFileFinderFactory>()).create(GlobalSearchScope.allScope(project)) ServiceManager.getService(project, JvmVirtualFileFinderFactory::class.java).create(GlobalSearchScope.allScope(project))
} }
} }
@@ -26,6 +26,6 @@ public interface JvmVirtualFileFinderFactory : VirtualFileFinderFactory {
public object SERVICE { public object SERVICE {
@JvmStatic @JvmStatic
public fun getInstance(project: Project): JvmVirtualFileFinderFactory = public fun getInstance(project: Project): JvmVirtualFileFinderFactory =
ServiceManager.getService(project, javaClass<JvmVirtualFileFinderFactory>()) ServiceManager.getService(project, JvmVirtualFileFinderFactory::class.java)
} }
} }
@@ -50,7 +50,7 @@ public class VirtualFileKotlinClass private constructor(
override fun toString() = "${javaClass.getSimpleName()}: $file" override fun toString() = "${javaClass.getSimpleName()}: $file"
companion object Factory { companion object Factory {
private val LOG = Logger.getInstance(javaClass<VirtualFileKotlinClass>()) private val LOG = Logger.getInstance(VirtualFileKotlinClass::class.java)
private val perfCounter = PerformanceCounter.create("Binary class from Kotlin file") private val perfCounter = PerformanceCounter.create("Binary class from Kotlin file")
@Deprecated("Use KotlinBinaryClassCache") @Deprecated("Use KotlinBinaryClassCache")
@@ -38,12 +38,12 @@ public class TraitDefaultMethodCallChecker : CallChecker {
if (containerDescriptor is JavaClassDescriptor && DescriptorUtils.isInterface(containerDescriptor)) { if (containerDescriptor is JavaClassDescriptor && DescriptorUtils.isInterface(containerDescriptor)) {
//is java interface default method called from trait //is java interface default method called from trait
val classifier = DescriptorUtils.getParentOfType(context.scope.ownerDescriptor, javaClass<ClassifierDescriptor>()) val classifier = DescriptorUtils.getParentOfType(context.scope.ownerDescriptor, ClassifierDescriptor::class.java)
if (classifier != null && DescriptorUtils.isInterface(classifier)) { if (classifier != null && DescriptorUtils.isInterface(classifier)) {
context.trace.report( context.trace.report(
ErrorsJvm.INTERFACE_CANT_CALL_DEFAULT_METHOD_VIA_SUPER.on( ErrorsJvm.INTERFACE_CANT_CALL_DEFAULT_METHOD_VIA_SUPER.on(
PsiTreeUtil.getParentOfType(resolvedCall.getCall().getCallElement(), javaClass<KtExpression>()) PsiTreeUtil.getParentOfType(resolvedCall.getCall().getCallElement(), KtExpression::class.java)
) )
) )
} }
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
public interface AnalysisCompletedHandlerExtension { public interface AnalysisCompletedHandlerExtension {
companion object : ProjectExtensionDescriptor<AnalysisCompletedHandlerExtension>( companion object : ProjectExtensionDescriptor<AnalysisCompletedHandlerExtension>(
"org.jetbrains.kotlin.analyzeCompleteHandlerExtension", "org.jetbrains.kotlin.analyzeCompleteHandlerExtension",
javaClass<AnalysisCompletedHandlerExtension>() AnalysisCompletedHandlerExtension::class.java
) )
public fun analysisCompleted( public fun analysisCompleted(
@@ -26,7 +26,7 @@ fun erasedSignaturesEqualIgnoringReturnTypes(subFunction: JvmMethodSignature, su
val subParams = subFunction.getValueParameters() val subParams = subFunction.getValueParameters()
val superParams = superFunction.getValueParameters() val superParams = superFunction.getValueParameters()
if (subParams.size() != superParams.size()) return false if (subParams.size != superParams.size) return false
return subParams.zip(superParams).all { return subParams.zip(superParams).all {
p -> val (subParam, superParam) = p p -> val (subParam, superParam) = p
@@ -59,14 +59,14 @@ public object JavaGenericVarianceViolationTypeChecker : AdditionalTypeChecker {
val correspondingSubType = TypeCheckingProcedure.findCorrespondingSupertype(expressionTypeWithSmartCast, lowerBound) ?: return val correspondingSubType = TypeCheckingProcedure.findCorrespondingSupertype(expressionTypeWithSmartCast, lowerBound) ?: return
assert(lowerBound.arguments.size() == upperBound.arguments.size()) { assert(lowerBound.arguments.size == upperBound.arguments.size) {
"Different arguments count in flexible bounds: " + "Different arguments count in flexible bounds: " +
"($lowerBound(${lowerBound.arguments.size()})..$upperBound(${upperBound.arguments.size()})" "($lowerBound(${lowerBound.arguments.size})..$upperBound(${upperBound.arguments.size})"
} }
assert(lowerBound.arguments.size() == correspondingSubType.arguments.size()) { assert(lowerBound.arguments.size == correspondingSubType.arguments.size) {
"Different arguments count in corresponding subtype and supertype: " + "Different arguments count in corresponding subtype and supertype: " +
"($lowerBound(${lowerBound.arguments.size()})..$correspondingSubType(${correspondingSubType.arguments.size()})" "($lowerBound(${lowerBound.arguments.size})..$correspondingSubType(${correspondingSubType.arguments.size})"
} }
@@ -169,13 +169,13 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l
override fun getSyntheticExtensionProperties(receiverTypes: Collection<KotlinType>, name: Name, location: LookupLocation): Collection<PropertyDescriptor> { override fun getSyntheticExtensionProperties(receiverTypes: Collection<KotlinType>, name: Name, location: LookupLocation): Collection<PropertyDescriptor> {
var result: SmartList<PropertyDescriptor>? = null var result: SmartList<PropertyDescriptor>? = null
val processedTypes: MutableSet<TypeConstructor>? = if (receiverTypes.size() > 1) HashSet<TypeConstructor>() else null val processedTypes: MutableSet<TypeConstructor>? = if (receiverTypes.size > 1) HashSet<TypeConstructor>() else null
for (type in receiverTypes) { for (type in receiverTypes) {
result = collectSyntheticPropertiesByName(result, type.constructor, name, processedTypes, location) result = collectSyntheticPropertiesByName(result, type.constructor, name, processedTypes, location)
} }
return when { return when {
result == null -> emptyList() result == null -> emptyList()
result.size() > 1 -> result.toSet() result.size > 1 -> result.toSet()
else -> result else -> result
} }
} }
@@ -304,7 +304,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l
descriptor.setMethod = setMethod descriptor.setMethod = setMethod
val classTypeParams = ownerClass.typeConstructor.parameters val classTypeParams = ownerClass.typeConstructor.parameters
val typeParameters = ArrayList<TypeParameterDescriptor>(classTypeParams.size()) val typeParameters = ArrayList<TypeParameterDescriptor>(classTypeParams.size)
val typeSubstitutor = DescriptorSubstitutor.substituteTypeParameters(classTypeParams, TypeSubstitution.EMPTY, descriptor, typeParameters) val typeSubstitutor = DescriptorSubstitutor.substituteTypeParameters(classTypeParams, TypeSubstitution.EMPTY, descriptor, typeParameters)
val propertyType = typeSubstitutor.safeSubstitute(type, Variance.INVARIANT) val propertyType = typeSubstitutor.safeSubstitute(type, Variance.INVARIANT)
@@ -67,7 +67,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope
} }
return when { return when {
result == null -> emptyList() result == null -> emptyList()
result.size() > 1 -> result.toSet() result.size > 1 -> result.toSet()
else -> result else -> result
} }
} }
@@ -118,7 +118,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope
} }
//TODO: duplicated parameter names //TODO: duplicated parameter names
val typeParameters = ArrayList<TypeParameterDescriptor>(sourceTypeParams.size()) val typeParameters = ArrayList<TypeParameterDescriptor>(sourceTypeParams.size)
val typeSubstitutor = DescriptorSubstitutor.substituteTypeParameters(sourceTypeParams, TypeSubstitution.EMPTY, descriptor, typeParameters) val typeSubstitutor = DescriptorSubstitutor.substituteTypeParameters(sourceTypeParams, TypeSubstitution.EMPTY, descriptor, typeParameters)
descriptor.toSourceFunctionTypeParameters = typeParameters.zip(sourceTypeParams).toMap() descriptor.toSourceFunctionTypeParameters = typeParameters.zip(sourceTypeParams).toMap()
@@ -58,7 +58,7 @@ class UnreachableCodeImpl(
acceptChildren(object : PsiElementVisitor() { acceptChildren(object : PsiElementVisitor() {
override fun visitElement(element: PsiElement) { override fun visitElement(element: PsiElement) {
val isReachable = element is KtElement && reachableElements.contains(element) && !element.hasChildrenInSet(unreachableElements) val isReachable = element is KtElement && reachableElements.contains(element) && !element.hasChildrenInSet(unreachableElements)
if (isReachable || element.getChildren().size() == 0) { if (isReachable || element.getChildren().size == 0) {
children.add(element) children.add(element)
} }
else { else {
@@ -77,7 +77,7 @@ class UnreachableCodeImpl(
val childrenToRemove = HashSet<PsiElement>() val childrenToRemove = HashSet<PsiElement>()
fun collectSiblingsIfMeaningless(elementIndex: Int, direction: Int) { fun collectSiblingsIfMeaningless(elementIndex: Int, direction: Int) {
val index = elementIndex + direction val index = elementIndex + direction
if (index !in 0..(size() - 1)) return if (index !in 0..(size - 1)) return
val element = this[index] val element = this[index]
if (element.isMeaningless()) { if (element.isMeaningless()) {
@@ -58,14 +58,14 @@ public object AllTypes : TypePredicate {
// todo: simplify computed type predicate when possible // todo: simplify computed type predicate when possible
public fun and(predicates: Collection<TypePredicate>): TypePredicate = public fun and(predicates: Collection<TypePredicate>): TypePredicate =
when (predicates.size()) { when (predicates.size) {
0 -> AllTypes 0 -> AllTypes
1 -> predicates.first() 1 -> predicates.first()
else -> ForAllTypes(predicates.toList()) else -> ForAllTypes(predicates.toList())
} }
public fun or(predicates: Collection<TypePredicate>): TypePredicate? = public fun or(predicates: Collection<TypePredicate>): TypePredicate? =
when (predicates.size()) { when (predicates.size) {
0 -> null 0 -> null
1 -> predicates.first() 1 -> predicates.first()
else -> ForSomeType(predicates.toList()) else -> ForSomeType(predicates.toList())
@@ -64,7 +64,7 @@ public class ReadValueInstruction private constructor(
} }
override val inputValues: List<PseudoValue> override val inputValues: List<PseudoValue>
get() = receiverValues.keySet().toList() get() = receiverValues.keys.toList()
override val outputValue: PseudoValue override val outputValue: PseudoValue
get() = _outputValue!! get() = _outputValue!!
@@ -78,7 +78,7 @@ public class ReadValueInstruction private constructor(
} }
override fun toString(): String { override fun toString(): String {
val inVal = if (receiverValues.isEmpty()) "" else "|${receiverValues.keySet().joinToString()}" val inVal = if (receiverValues.isEmpty()) "" else "|${receiverValues.keys.joinToString()}"
val targetName = when (target) { val targetName = when (target) {
is AccessTarget.Declaration -> target.descriptor is AccessTarget.Declaration -> target.descriptor
is AccessTarget.Call -> target.resolvedCall.getResultingDescriptor() is AccessTarget.Call -> target.resolvedCall.getResultingDescriptor()
@@ -104,7 +104,7 @@ public class WriteValueInstruction(
) : AccessValueInstruction(assignment, lexicalScope, target, receiverValues) { ) : AccessValueInstruction(assignment, lexicalScope, target, receiverValues) {
override val inputValues: List<PseudoValue> override val inputValues: List<PseudoValue>
// as is necessary: see KT-10384 // as is necessary: see KT-10384
get() = (receiverValues.keySet() as Collection<PseudoValue>) + rValue get() = (receiverValues.keys as Collection<PseudoValue>) + rValue
override fun accept(visitor: InstructionVisitor) { override fun accept(visitor: InstructionVisitor) {
visitor.visitWriteValue(this) visitor.visitWriteValue(this)
@@ -59,7 +59,7 @@ public class CallInstruction private constructor(
val resolvedCall: ResolvedCall<*>, val resolvedCall: ResolvedCall<*>,
override val receiverValues: Map<PseudoValue, ReceiverValue>, override val receiverValues: Map<PseudoValue, ReceiverValue>,
public val arguments: Map<PseudoValue, ValueParameterDescriptor> public val arguments: Map<PseudoValue, ValueParameterDescriptor>
) : OperationInstruction(element, lexicalScope, (receiverValues.keySet() as Collection<PseudoValue>) + arguments.keySet()), InstructionWithReceivers { ) : OperationInstruction(element, lexicalScope, (receiverValues.keys as Collection<PseudoValue>) + arguments.keys), InstructionWithReceivers {
// as is necessary above: see KT-10384 // as is necessary above: see KT-10384
public constructor ( public constructor (
@@ -54,7 +54,7 @@ public class NondeterministicJumpInstruction(
override val nextInstructions: Collection<Instruction> override val nextInstructions: Collection<Instruction>
get() { get() {
val targetInstructions = Lists.newArrayList(resolvedTargets.values()) val targetInstructions = Lists.newArrayList(resolvedTargets.values)
targetInstructions.add(next) targetInstructions.add(next)
return targetInstructions return targetInstructions
} }
@@ -123,7 +123,7 @@ public fun getExpectedTypePredicate(
val candidateArgumentMap = candidateCall.getValueArguments() val candidateArgumentMap = candidateCall.getValueArguments()
val callArguments = call.getValueArguments() val callArguments = call.getValueArguments()
val i = inputValueIndex - argValueOffset val i = inputValueIndex - argValueOffset
if (i < 0 || i >= callArguments.size()) continue if (i < 0 || i >= callArguments.size) continue
val mapping = candidateCall.getArgumentMapping(callArguments.get(i)) val mapping = candidateCall.getArgumentMapping(callArguments.get(i))
if (mapping !is ArgumentMatch) continue if (mapping !is ArgumentMatch) continue
@@ -288,7 +288,7 @@ fun Pseudocode.getElementValuesRecursively(element: KtElement): List<PseudoValue
public fun KtElement.getContainingPseudocode(context: BindingContext): Pseudocode? { public fun KtElement.getContainingPseudocode(context: BindingContext): Pseudocode? {
val pseudocodeDeclaration = val pseudocodeDeclaration =
PsiTreeUtil.getParentOfType(this, javaClass<KtDeclarationWithBody>(), javaClass<KtClassOrObject>(), javaClass<KtScript>()) PsiTreeUtil.getParentOfType(this, KtDeclarationWithBody::class.java, KtClassOrObject::class.java, KtScript::class.java)
?: getNonStrictParentOfType<KtProperty>() ?: getNonStrictParentOfType<KtProperty>()
?: return null ?: return null
@@ -52,7 +52,7 @@ import java.io.StringWriter
public object Renderers { public object Renderers {
private val LOG = Logger.getInstance(javaClass<Renderers>()) private val LOG = Logger.getInstance(Renderers::class.java)
@JvmField @JvmField
public val TO_STRING: Renderer<Any> = Renderer { public val TO_STRING: Renderer<Any> = Renderer {
@@ -129,7 +129,7 @@ public object Renderers {
@JvmStatic @JvmStatic
public fun <T> commaSeparated(itemRenderer: Renderer<T>): Renderer<Collection<T>> = Renderer { public fun <T> commaSeparated(itemRenderer: Renderer<T>): Renderer<Collection<T>> = Renderer {
collection -> collection ->
StringBuilder { buildString {
val iterator = collection.iterator() val iterator = collection.iterator()
while (iterator.hasNext()) { while (iterator.hasNext()) {
val next = iterator.next() val next = iterator.next()
@@ -138,7 +138,7 @@ public object Renderers {
append(", ") append(", ")
} }
} }
}.toString() }
} }
@JvmField @JvmField
@@ -201,7 +201,7 @@ public object Renderers {
val parameterTypes = Lists.newArrayList<KotlinType>() val parameterTypes = Lists.newArrayList<KotlinType>()
for (valueParameterDescriptor in substitutedDescriptor.getValueParameters()) { for (valueParameterDescriptor in substitutedDescriptor.getValueParameters()) {
parameterTypes.add(valueParameterDescriptor.getType()) parameterTypes.add(valueParameterDescriptor.getType())
if (valueParameterDescriptor.index >= inferenceErrorData.valueArgumentsTypes.size()) continue if (valueParameterDescriptor.index >= inferenceErrorData.valueArgumentsTypes.size) continue
val actualType = inferenceErrorData.valueArgumentsTypes.get(valueParameterDescriptor.index) val actualType = inferenceErrorData.valueArgumentsTypes.get(valueParameterDescriptor.index)
if (!KotlinTypeChecker.DEFAULT.isSubtypeOf(actualType, valueParameterDescriptor.getType())) { if (!KotlinTypeChecker.DEFAULT.isSubtypeOf(actualType, valueParameterDescriptor.getType())) {
errorPositions.add(VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.index)) errorPositions.add(VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.index))
@@ -360,19 +360,19 @@ public object Renderers {
@JvmField @JvmField
public val CLASSES_OR_SEPARATED: Renderer<Collection<ClassDescriptor>> = Renderer { public val CLASSES_OR_SEPARATED: Renderer<Collection<ClassDescriptor>> = Renderer {
descriptors -> descriptors ->
StringBuilder { buildString {
var index = 0 var index = 0
for (descriptor in descriptors) { for (descriptor in descriptors) {
append(DescriptorUtils.getFqName(descriptor).asString()) append(DescriptorUtils.getFqName(descriptor).asString())
index++ index++
if (index <= descriptors.size() - 2) { if (index <= descriptors.size - 2) {
append(", ") append(", ")
} }
else if (index == descriptors.size() - 1) { else if (index == descriptors.size - 1) {
append(" or ") append(" or ")
} }
} }
}.toString() }
} }
private fun renderTypes(types: Collection<KotlinType>) = StringUtil.join(types, { RENDER_TYPE.render(it) }, ", ") private fun renderTypes(types: Collection<KotlinType>) = StringUtil.join(types, { RENDER_TYPE.render(it) }, ", ")
@@ -417,7 +417,7 @@ public object Renderers {
@JvmField @JvmField
public val RENDER_TYPE_BOUNDS_SHORT: Renderer<TypeBounds> = Renderer { renderTypeBounds(it, short = true) } public val RENDER_TYPE_BOUNDS_SHORT: Renderer<TypeBounds> = Renderer { renderTypeBounds(it, short = true) }
private fun renderDebugMessage(message: String, inferenceErrorData: InferenceErrorData) = StringBuilder { private fun renderDebugMessage(message: String, inferenceErrorData: InferenceErrorData) = buildString {
append(message) append(message)
append("\nConstraint system: \n") append("\nConstraint system: \n")
append(RENDER_CONSTRAINT_SYSTEM.render(inferenceErrorData.constraintSystem)) append(RENDER_CONSTRAINT_SYSTEM.render(inferenceErrorData.constraintSystem))
@@ -435,5 +435,5 @@ public object Renderers {
append(RENDER_TYPE.render(inferenceErrorData.receiverArgumentType)).append(".") append(RENDER_TYPE.render(inferenceErrorData.receiverArgumentType)).append(".")
} }
append("(").append(renderTypes(inferenceErrorData.valueArgumentsTypes)).append(")") append("(").append(renderTypes(inferenceErrorData.valueArgumentsTypes)).append(")")
}.toString() }
} }
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.psi.KtFile
public interface ExternalDeclarationsProvider { public interface ExternalDeclarationsProvider {
companion object : ProjectExtensionDescriptor<ExternalDeclarationsProvider>( companion object : ProjectExtensionDescriptor<ExternalDeclarationsProvider>(
"org.jetbrains.kotlin.externalDeclarationsProvider", "org.jetbrains.kotlin.externalDeclarationsProvider",
javaClass<ExternalDeclarationsProvider>() ExternalDeclarationsProvider::class.java
) )
public fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<KtFile> public fun getExternalDeclarations(moduleInfo: ModuleInfo?): Collection<KtFile>
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.resolve.TargetPlatform
public interface StorageComponentContainerContributor { public interface StorageComponentContainerContributor {
companion object : ProjectExtensionDescriptor<StorageComponentContainerContributor>( companion object : ProjectExtensionDescriptor<StorageComponentContainerContributor>(
"org.jetbrains.kotlin.storageComponentContainerContributor", javaClass<StorageComponentContainerContributor>() "org.jetbrains.kotlin.storageComponentContainerContributor", StorageComponentContainerContributor::class.java
) )
public fun addDeclarations(container: StorageComponentContainer, platform: TargetPlatform) public fun addDeclarations(container: StorageComponentContainer, platform: TargetPlatform)
@@ -45,10 +45,10 @@ public class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocToken
getChildrenOfType<KDocSection>().firstOrNull { it.getName() == name } getChildrenOfType<KDocSection>().firstOrNull { it.getName() == name }
override fun findSectionByTag(tag: KDocKnownTag): KDocSection? = override fun findSectionByTag(tag: KDocKnownTag): KDocSection? =
findSectionByName(tag.name().toLowerCase()) findSectionByName(tag.name.toLowerCase())
override fun findSectionByTag(tag: KDocKnownTag, subjectName: String): KDocSection? = override fun findSectionByTag(tag: KDocKnownTag, subjectName: String): KDocSection? =
getChildrenOfType<KDocSection>().firstOrNull { getChildrenOfType<KDocSection>().firstOrNull {
it.getName() == tag.name().toLowerCase() && it.getSubjectName() == subjectName it.getName() == tag.name.toLowerCase() && it.getSubjectName() == subjectName
} }
} }
@@ -30,9 +30,9 @@ public class KDocLink(node: ASTNode) : KtElementImpl(node) {
public fun getLinkTextRange(): TextRange { public fun getLinkTextRange(): TextRange {
val text = getText() val text = getText()
if (text.startsWith('[') && text.endsWith(']')) { if (text.startsWith('[') && text.endsWith(']')) {
return TextRange(1, text.length() - 1) return TextRange(1, text.length - 1)
} }
return TextRange(0, text.length()) return TextRange(0, text.length)
} }
/** /**
@@ -32,7 +32,7 @@ object PrecedingCommentsBinder : WhitespacesAndCommentsBinder {
} }
// 2. bind plain comments // 2. bind plain comments
var result = tokens.size() var result = tokens.size
tokens@ for (idx in tokens.indices.reversed()) { tokens@ for (idx in tokens.indices.reversed()) {
val tokenType = tokens[idx] val tokenType = tokens[idx]
when (tokenType) { when (tokenType) {
@@ -61,7 +61,7 @@ object PrecedingDocCommentsBinder : WhitespacesAndCommentsBinder {
if (tokens[idx] == KtTokens.DOC_COMMENT) return idx if (tokens[idx] == KtTokens.DOC_COMMENT) return idx
} }
return tokens.size() return tokens.size
} }
} }
@@ -194,7 +194,7 @@ private object DebugTextBuildingVisitor : KtVisitor<String, Unit>() {
} }
override fun visitPropertyAccessor(accessor: KtPropertyAccessor, data: Unit?): String? { override fun visitPropertyAccessor(accessor: KtPropertyAccessor, data: Unit?): String? {
val containingProperty = KtStubbedPsiUtil.getContainingDeclaration(accessor, javaClass<KtProperty>()) val containingProperty = KtStubbedPsiUtil.getContainingDeclaration(accessor, KtProperty::class.java)
val what = (if (accessor.isGetter()) "getter" else "setter") val what = (if (accessor.isGetter()) "getter" else "setter")
return what + " for " + (if (containingProperty != null) containingProperty.getDebugText() else "...") return what + " for " + (if (containingProperty != null) containingProperty.getDebugText() else "...")
} }
@@ -62,7 +62,7 @@ object EditCommaSeparatedListHelper {
anchorAfter = if (index > 0) allItems.get(index - 1) else null anchorAfter = if (index > 0) allItems.get(index - 1) else null
} }
else { else {
anchorAfter = allItems.get(allItems.size() - 1) anchorAfter = allItems.get(allItems.size - 1)
} }
} }
return addItemAfter(list, allItems, item, anchorAfter) return addItemAfter(list, allItems, item, anchorAfter)
@@ -52,7 +52,7 @@ public class KotlinStringLiteralTextEscaper(host: KtStringTemplateExpression): L
} }
val unescaped = child.getUnescapedValue() val unescaped = child.getUnescapedValue()
outChars.append(unescaped) outChars.append(unescaped)
repeat(unescaped.length()) { repeat(unescaped.length) {
sourceOffsetsList.add(sourceOffset) sourceOffsetsList.add(sourceOffset)
} }
sourceOffset += child.getTextLength() sourceOffset += child.getTextLength()
@@ -67,7 +67,7 @@ public class KotlinStringLiteralTextEscaper(host: KtStringTemplateExpression): L
override fun getOffsetInHost(offsetInDecoded: Int, rangeInsideHost: TextRange): Int { override fun getOffsetInHost(offsetInDecoded: Int, rangeInsideHost: TextRange): Int {
val offsets = sourceOffsets val offsets = sourceOffsets
if (offsets == null || offsetInDecoded >= offsets.size()) return -1 if (offsets == null || offsetInDecoded >= offsets.size) return -1
return Math.min(offsets[offsetInDecoded], rangeInsideHost.getLength()) + rangeInsideHost.getStartOffset() return Math.min(offsets[offsetInDecoded], rangeInsideHost.getLength()) + rangeInsideHost.getStartOffset()
} }
@@ -28,6 +28,6 @@ public class KtBlockCodeFragment(
context: PsiElement? context: PsiElement?
) : KtCodeFragment(project, name, text, imports, KtNodeTypes.BLOCK_CODE_FRAGMENT, context) { ) : KtCodeFragment(project, name, text, imports, KtNodeTypes.BLOCK_CODE_FRAGMENT, context) {
override fun getContentElement() = findChildByClass(javaClass<KtBlockExpression>()) override fun getContentElement() = findChildByClass(KtBlockExpression::class.java)
?: throw IllegalStateException("Block expression should be parsed for BlockCodeFragment") ?: throw IllegalStateException("Block expression should be parsed for BlockCodeFragment")
} }
@@ -72,7 +72,7 @@ public open class KtClass : KtClassOrObject {
var current: KtClassOrObject? = this var current: KtClassOrObject? = this
while (current != null) { while (current != null) {
parts.add(current.getName()!!) parts.add(current.getName()!!)
current = PsiTreeUtil.getParentOfType<KtClassOrObject>(current, javaClass<KtClassOrObject>()) current = PsiTreeUtil.getParentOfType<KtClassOrObject>(current, KtClassOrObject::class.java)
} }
val file = getContainingFile() val file = getContainingFile()
if (file !is KtFile) return null if (file !is KtFile) return null
@@ -51,7 +51,7 @@ abstract public class KtClassOrObject :
val specifierList = getSuperTypeList() ?: return val specifierList = getSuperTypeList() ?: return
assert(superTypeListEntry.getParent() === specifierList) assert(superTypeListEntry.getParent() === specifierList)
if (specifierList.getEntries().size() > 1) { if (specifierList.getEntries().size > 1) {
EditCommaSeparatedListHelper.removeItem<KtElement>(superTypeListEntry) EditCommaSeparatedListHelper.removeItem<KtElement>(superTypeListEntry)
} }
else { else {
@@ -65,7 +65,7 @@ abstract public class KtClassOrObject :
public fun addDeclaration(declaration: KtDeclaration): KtDeclaration { public fun addDeclaration(declaration: KtDeclaration): KtDeclaration {
val body = getOrCreateBody() val body = getOrCreateBody()
val anchor = PsiTreeUtil.skipSiblingsBackward(body.rBrace ?: body.getLastChild()!!, javaClass<PsiWhiteSpace>()) val anchor = PsiTreeUtil.skipSiblingsBackward(body.rBrace ?: body.getLastChild()!!, PsiWhiteSpace::class.java)
return body.addAfter(declaration, anchor) as KtDeclaration return body.addAfter(declaration, anchor) as KtDeclaration
} }
@@ -106,7 +106,7 @@ abstract public class KtClassOrObject :
CheckUtil.checkWritable(this); CheckUtil.checkWritable(this);
val file = getContainingKtFile(); val file = getContainingKtFile();
if (!isTopLevel() || file.getDeclarations().size() > 1) { if (!isTopLevel() || file.getDeclarations().size > 1) {
super.delete() super.delete()
} }
else { else {
@@ -28,5 +28,5 @@ public class KtExpressionCodeFragment(
context: PsiElement? context: PsiElement?
) : KtCodeFragment(project, name, text, imports, KtNodeTypes.EXPRESSION_CODE_FRAGMENT, context) { ) : KtCodeFragment(project, name, text, imports, KtNodeTypes.EXPRESSION_CODE_FRAGMENT, context) {
override fun getContentElement() = findChildByClass(javaClass<KtExpression>()) override fun getContentElement() = findChildByClass(KtExpression::class.java)
} }
@@ -26,7 +26,7 @@ public abstract class KtExpressionImpl(node: ASTNode) : KtElementImpl(node), KtE
protected fun findExpressionUnder(type: KtNodeType): KtExpression? { protected fun findExpressionUnder(type: KtNodeType): KtExpression? {
val containerNode = findChildByType<KtContainerNode>(type) ?: return null val containerNode = findChildByType<KtContainerNode>(type) ?: return null
return containerNode.findChildByClass<KtExpression>(javaClass()) return containerNode.findChildByClass<KtExpression>(KtExpression::class.java)
} }
override fun replace(newElement: PsiElement): PsiElement { override fun replace(newElement: PsiElement): PsiElement {
@@ -224,7 +224,7 @@ public class KtPsiFactory(private val project: Project) {
public fun <TDeclaration : KtDeclaration> createDeclaration(text: String): TDeclaration { public fun <TDeclaration : KtDeclaration> createDeclaration(text: String): TDeclaration {
val file = createFile(text) val file = createFile(text)
val declarations = file.getDeclarations() val declarations = file.getDeclarations()
assert(declarations.size() == 1) { "${declarations.size()} declarations in $text" } assert(declarations.size == 1) { "${declarations.size} declarations in $text" }
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
val result = declarations.first() as TDeclaration val result = declarations.first() as TDeclaration
return result return result
@@ -305,7 +305,7 @@ public class KtPsiFactory(private val project: Project) {
public fun createWhenEntry(entryText: String): KtWhenEntry { public fun createWhenEntry(entryText: String): KtWhenEntry {
val function = createFunction("fun foo() { when(12) { " + entryText + " } }") val function = createFunction("fun foo() { when(12) { " + entryText + " } }")
val whenEntry = PsiTreeUtil.findChildOfType(function, javaClass<KtWhenEntry>()) val whenEntry = PsiTreeUtil.findChildOfType(function, KtWhenEntry::class.java)
assert(whenEntry != null) { "Couldn't generate when entry" } assert(whenEntry != null) { "Couldn't generate when entry" }
assert(entryText == whenEntry!!.text) { "Generate when entry text differs from the given text" } assert(entryText == whenEntry!!.text) { "Generate when entry text differs from the given text" }
@@ -453,7 +453,7 @@ public class KtPsiFactory(private val project: Project) {
private fun placeKeyword() { private fun placeKeyword() {
assert(state == State.MODIFIERS) assert(state == State.MODIFIERS)
if (sb.length() != 0) { if (sb.length != 0) {
sb.append(" ") sb.append(" ")
} }
val keyword = when (target) { val keyword = when (target) {
@@ -29,11 +29,11 @@ public class KtSecondaryConstructor : KtConstructor<KtSecondaryConstructor> {
override fun getContainingClassOrObject() = getParent().getParent() as KtClassOrObject override fun getContainingClassOrObject() = getParent().getParent() as KtClassOrObject
override fun getBodyExpression() = findChildByClass(javaClass<KtBlockExpression>()) override fun getBodyExpression() = findChildByClass(KtBlockExpression::class.java)
override fun getConstructorKeyword() = notNullChild<PsiElement>(super.getConstructorKeyword()) override fun getConstructorKeyword() = notNullChild<PsiElement>(super.getConstructorKeyword())
public fun getDelegationCall(): KtConstructorDelegationCall = findNotNullChildByClass(javaClass<KtConstructorDelegationCall>()) public fun getDelegationCall(): KtConstructorDelegationCall = findNotNullChildByClass(KtConstructorDelegationCall::class.java)
public fun hasImplicitDelegationCall(): Boolean = getDelegationCall().isImplicit() public fun hasImplicitDelegationCall(): Boolean = getDelegationCall().isImplicit()
@@ -59,7 +59,7 @@ private class PsiElementArgumentType<T : PsiElement>(klass: Class<T>) : PsiEleme
} }
} }
private object PsiChildRangeArgumentType : PsiElementPlaceholderArgumentType<PsiChildRange, KtElement>(javaClass(), javaClass()) { private object PsiChildRangeArgumentType : PsiElementPlaceholderArgumentType<PsiChildRange, KtElement>(PsiChildRange::class.java, KtElement::class.java) {
override fun replacePlaceholderElement(placeholder: KtElement, argument: PsiChildRange) { override fun replacePlaceholderElement(placeholder: KtElement, argument: PsiChildRange) {
val project = placeholder.getProject() val project = placeholder.getProject()
val codeStyleManager = CodeStyleManager.getInstance(project) val codeStyleManager = CodeStyleManager.getInstance(project)
@@ -81,10 +81,10 @@ private object PsiChildRangeArgumentType : PsiElementPlaceholderArgumentType<Psi
} }
private val SUPPORTED_ARGUMENT_TYPES = listOf( private val SUPPORTED_ARGUMENT_TYPES = listOf(
PsiElementArgumentType<KtExpression>(javaClass()), PsiElementArgumentType<KtExpression>(KtExpression::class.java),
PsiElementArgumentType<KtTypeReference>(javaClass()), PsiElementArgumentType<KtTypeReference>(KtTypeReference::class.java),
PlainTextArgumentType<String>(javaClass(), toPlainText = { it }), PlainTextArgumentType<String>(String::class.java, toPlainText = { it }),
PlainTextArgumentType<Name>(javaClass(), toPlainText = { it.render() }), PlainTextArgumentType<Name>(Name::class.java, toPlainText = { it.render() }),
PsiChildRangeArgumentType PsiChildRangeArgumentType
) )
@@ -184,7 +184,7 @@ private data class PatternData(val processedText: String, val placeholders: Map<
private fun processPattern(pattern: String, args: List<Any>): PatternData { private fun processPattern(pattern: String, args: List<Any>): PatternData {
val ranges = LinkedHashMap<Int, MutableList<Placeholder>>() val ranges = LinkedHashMap<Int, MutableList<Placeholder>>()
fun charOrNull(i: Int) = if (0 <= i && i < pattern.length()) pattern[i] else null fun charOrNull(i: Int) = if (0 <= i && i < pattern.length) pattern[i] else null
fun check(condition: Boolean, message: String) { fun check(condition: Boolean, message: String) {
if (!condition) { if (!condition) {
@@ -192,9 +192,9 @@ private fun processPattern(pattern: String, args: List<Any>): PatternData {
} }
} }
val text = StringBuilder { val text = buildString {
var i = 0 var i = 0
while (i < pattern.length()) { while (i < pattern.length) {
var c = pattern[i] var c = pattern[i]
if (c == '$') { if (c == '$') {
@@ -205,12 +205,12 @@ private fun processPattern(pattern: String, args: List<Any>): PatternData {
else { else {
check(nextChar?.isDigit() ?: false, "unclosed '$'") check(nextChar?.isDigit() ?: false, "unclosed '$'")
val lastIndex = (i..pattern.length() - 1).firstOrNull { !pattern[it].isDigit() } ?: pattern.length() val lastIndex = (i..pattern.length - 1).firstOrNull { !pattern[it].isDigit() } ?: pattern.length
val n = pattern.substring(i, lastIndex).toInt() val n = pattern.substring(i, lastIndex).toInt()
check(n >= 0, "invalid placeholder number: $n") check(n >= 0, "invalid placeholder number: $n")
i = lastIndex i = lastIndex
val arg: Any? = if (n < args.size()) args[n] else null /* report wrong number of arguments later */ val arg: Any? = if (n < args.size) args[n] else null /* report wrong number of arguments later */
val placeholderText = if (charOrNull(i) != ':' || charOrNull(i + 1) != '\'') { val placeholderText = if (charOrNull(i) != ':' || charOrNull(i + 1) != '\'') {
if (arg is String) arg else "xyz" if (arg is String) arg else "xyz"
} }
@@ -226,7 +226,7 @@ private fun processPattern(pattern: String, args: List<Any>): PatternData {
} }
append(placeholderText) append(placeholderText)
val range = TextRange(length() - placeholderText.length(), length()) val range = TextRange(length - placeholderText.length, length)
ranges.getOrPut(n, { ArrayList() }).add(Placeholder(range, placeholderText)) ranges.getOrPut(n, { ArrayList() }).add(Placeholder(range, placeholderText))
continue continue
} }
@@ -236,17 +236,17 @@ private fun processPattern(pattern: String, args: List<Any>): PatternData {
} }
i++ i++
} }
}.toString() }
if (!ranges.isEmpty()) { if (!ranges.isEmpty()) {
val max = ranges.keySet().max()!! val max = ranges.keys.max()!!
for (i in 0..max) { for (i in 0..max) {
check(ranges.contains(i), "no '$$i' placeholder") check(ranges.contains(i), "no '$$i' placeholder")
} }
} }
if (args.size() != ranges.size()) { if (args.size != ranges.size) {
throw IllegalArgumentException("Wrong number of arguments, expected: ${ranges.size()}, passed: ${args.size()}") throw IllegalArgumentException("Wrong number of arguments, expected: ${ranges.size}, passed: ${args.size}")
} }
return PatternData(text, ranges) return PatternData(text, ranges)
@@ -262,14 +262,14 @@ public class BuilderByPattern<TElement> {
} }
public fun appendNonFormattedText(text: String): BuilderByPattern<TElement> { public fun appendNonFormattedText(text: String): BuilderByPattern<TElement> {
patternBuilder.append("$" + arguments.size()) patternBuilder.append("$" + arguments.size)
arguments.add(text) arguments.add(text)
return this return this
} }
public fun appendExpression(expression: KtExpression?): BuilderByPattern<TElement> { public fun appendExpression(expression: KtExpression?): BuilderByPattern<TElement> {
if (expression != null) { if (expression != null) {
patternBuilder.append("$" + arguments.size()) patternBuilder.append("$" + arguments.size)
arguments.add(expression) arguments.add(expression)
} }
return this return this
@@ -287,20 +287,20 @@ public class BuilderByPattern<TElement> {
public fun appendTypeReference(typeRef: KtTypeReference?): BuilderByPattern<TElement> { public fun appendTypeReference(typeRef: KtTypeReference?): BuilderByPattern<TElement> {
if (typeRef != null) { if (typeRef != null) {
patternBuilder.append("$" + arguments.size()) patternBuilder.append("$" + arguments.size)
arguments.add(typeRef) arguments.add(typeRef)
} }
return this return this
} }
public fun appendName(name: Name): BuilderByPattern<TElement> { public fun appendName(name: Name): BuilderByPattern<TElement> {
patternBuilder.append("$" + arguments.size()) patternBuilder.append("$" + arguments.size)
arguments.add(name) arguments.add(name)
return this return this
} }
public fun appendChildRange(range: PsiChildRange): BuilderByPattern<TElement> { public fun appendChildRange(range: PsiChildRange): BuilderByPattern<TElement> {
patternBuilder.append("$" + arguments.size()) patternBuilder.append("$" + arguments.size)
arguments.add(range) arguments.add(range)
return this return this
} }
@@ -30,7 +30,7 @@ public class KtStringTemplateExpressionManipulator : AbstractElementManipulator<
val newText = oldText.substring(0, range.getStartOffset()) + content + oldText.substring(range.getEndOffset()) val newText = oldText.substring(0, range.getStartOffset()) + content + oldText.substring(range.getEndOffset())
val expression = KtPsiFactory(element.getProject()).createExpression(newText) val expression = KtPsiFactory(element.getProject()).createExpression(newText)
node.replaceAllChildrenToChildrenOf(expression.getNode()) node.replaceAllChildrenToChildrenOf(expression.getNode())
return node.getPsi(javaClass()) return node.getPsi(KtStringTemplateExpression::class.java)
} }
override fun getRangeInElement(element: KtStringTemplateExpression): TextRange { override fun getRangeInElement(element: KtStringTemplateExpression): TextRange {
@@ -30,7 +30,7 @@ public class StringTemplateExpressionManipulator: AbstractElementManipulator<KtS
val newText = oldText.substring(0, range.getStartOffset()) + content + oldText.substring(range.getEndOffset()) val newText = oldText.substring(0, range.getStartOffset()) + content + oldText.substring(range.getEndOffset())
val expression = KtPsiFactory(element.getProject()).createExpression(newText) val expression = KtPsiFactory(element.getProject()).createExpression(newText)
node.replaceAllChildrenToChildrenOf(expression.getNode()) node.replaceAllChildrenToChildrenOf(expression.getNode())
return node.getPsi(javaClass()) return node.getPsi(KtStringTemplateExpression::class.java)
} }
override fun getRangeInElement(element: KtStringTemplateExpression): TextRange { override fun getRangeInElement(element: KtStringTemplateExpression): TextRange {
@@ -152,7 +152,7 @@ public fun KtExpression.isDotReceiver(): Boolean =
public fun KtElement.getCalleeHighlightingRange(): TextRange { public fun KtElement.getCalleeHighlightingRange(): TextRange {
val annotationEntry: KtAnnotationEntry = val annotationEntry: KtAnnotationEntry =
PsiTreeUtil.getParentOfType<KtAnnotationEntry>( PsiTreeUtil.getParentOfType<KtAnnotationEntry>(
this, javaClass<KtAnnotationEntry>(), /* strict = */false, javaClass<KtValueArgumentList>() this, KtAnnotationEntry::class.java, /* strict = */false, KtValueArgumentList::class.java
) ?: return getTextRange() ) ?: return getTextRange()
val startOffset = annotationEntry.getAtSymbol()?.getTextRange()?.getStartOffset() val startOffset = annotationEntry.getAtSymbol()?.getTextRange()?.getStartOffset()
@@ -117,23 +117,23 @@ public fun <T : PsiElement> PsiElement.getNonStrictParentOfType(parentClass: Cla
} }
inline public fun <reified T : PsiElement> PsiElement.getParentOfType(strict: Boolean): T? { inline public fun <reified T : PsiElement> PsiElement.getParentOfType(strict: Boolean): T? {
return PsiTreeUtil.getParentOfType(this, javaClass<T>(), strict) return PsiTreeUtil.getParentOfType(this, T::class.java, strict)
} }
inline public fun <reified T : PsiElement> PsiElement.getStrictParentOfType(): T? { inline public fun <reified T : PsiElement> PsiElement.getStrictParentOfType(): T? {
return PsiTreeUtil.getParentOfType(this, javaClass<T>(), true) return PsiTreeUtil.getParentOfType(this, T::class.java, true)
} }
inline public fun <reified T : PsiElement> PsiElement.getNonStrictParentOfType(): T? { inline public fun <reified T : PsiElement> PsiElement.getNonStrictParentOfType(): T? {
return PsiTreeUtil.getParentOfType(this, javaClass<T>(), false) return PsiTreeUtil.getParentOfType(this, T::class.java, false)
} }
inline public fun <reified T : PsiElement> PsiElement.getChildOfType(): T? { inline public fun <reified T : PsiElement> PsiElement.getChildOfType(): T? {
return PsiTreeUtil.getChildOfType(this, javaClass<T>()) return PsiTreeUtil.getChildOfType(this, T::class.java)
} }
inline public fun <reified T : PsiElement> PsiElement.getChildrenOfType(): Array<T> { inline public fun <reified T : PsiElement> PsiElement.getChildrenOfType(): Array<T> {
return PsiTreeUtil.getChildrenOfType(this, javaClass<T>()) ?: arrayOf() return PsiTreeUtil.getChildrenOfType(this, T::class.java) ?: arrayOf()
} }
public fun PsiElement.getNextSiblingIgnoringWhitespaceAndComments(): PsiElement? { public fun PsiElement.getNextSiblingIgnoringWhitespaceAndComments(): PsiElement? {
@@ -26,11 +26,11 @@ import org.jetbrains.kotlin.psi.stubs.KotlinAnnotationUseSiteTargetStub
import org.jetbrains.kotlin.psi.stubs.impl.KotlinAnnotationUseSiteTargetStubImpl import org.jetbrains.kotlin.psi.stubs.impl.KotlinAnnotationUseSiteTargetStubImpl
public class KtAnnotationUseSiteTargetElementType(debugName: String) : KtStubElementType<KotlinAnnotationUseSiteTargetStub, KtAnnotationUseSiteTarget>( public class KtAnnotationUseSiteTargetElementType(debugName: String) : KtStubElementType<KotlinAnnotationUseSiteTargetStub, KtAnnotationUseSiteTarget>(
debugName, javaClass<KtAnnotationUseSiteTarget>(), javaClass<KotlinAnnotationUseSiteTargetStub>() debugName, KtAnnotationUseSiteTarget::class.java, KotlinAnnotationUseSiteTargetStub::class.java
) { ) {
override fun createStub(psi: KtAnnotationUseSiteTarget, parentStub: StubElement<PsiElement>): KotlinAnnotationUseSiteTargetStub { override fun createStub(psi: KtAnnotationUseSiteTarget, parentStub: StubElement<PsiElement>): KotlinAnnotationUseSiteTargetStub {
val useSiteTarget = psi.getAnnotationUseSiteTarget().name() val useSiteTarget = psi.getAnnotationUseSiteTarget().name
return KotlinAnnotationUseSiteTargetStubImpl(parentStub, StringRef.fromString(useSiteTarget)!!) return KotlinAnnotationUseSiteTargetStubImpl(parentStub, StringRef.fromString(useSiteTarget)!!)
} }
@@ -28,8 +28,8 @@ import org.jetbrains.kotlin.psi.stubs.impl.KotlinEnumEntrySuperclassReferenceExp
public class KtEnumEntrySuperClassReferenceExpressionElementType(@NonNls debugName: String) public class KtEnumEntrySuperClassReferenceExpressionElementType(@NonNls debugName: String)
: KtStubElementType<KotlinEnumEntrySuperclassReferenceExpressionStub, KtEnumEntrySuperclassReferenceExpression>( : KtStubElementType<KotlinEnumEntrySuperclassReferenceExpressionStub, KtEnumEntrySuperclassReferenceExpression>(
debugName, debugName,
javaClass<KtEnumEntrySuperclassReferenceExpression>(), KtEnumEntrySuperclassReferenceExpression::class.java,
javaClass<KotlinEnumEntrySuperclassReferenceExpressionStub>() KotlinEnumEntrySuperclassReferenceExpressionStub::class.java
) { ) {
override fun createStub(psi: KtEnumEntrySuperclassReferenceExpression, parentStub: StubElement<*>): KotlinEnumEntrySuperclassReferenceExpressionStub { override fun createStub(psi: KtEnumEntrySuperclassReferenceExpression, parentStub: StubElement<*>): KotlinEnumEntrySuperclassReferenceExpressionStub {
@@ -75,8 +75,8 @@ public open class KotlinStubBaseImpl<T : KtElementImplStub<*>>(parent: StubEleme
} }
companion object { companion object {
private val LOGGER: Logger = Logger.getInstance(javaClass<KotlinStubBaseImpl<KtElementImplStub<*>>>()) private val LOGGER: Logger = Logger.getInstance(KotlinStubBaseImpl::class.java)
private val BASE_STUB_INTERFACES = listOf(javaClass<KotlinStubWithFqName<*>>(), javaClass<KotlinClassOrObjectStub<*>>(), javaClass<NamedStub<*>>(), javaClass<KotlinCallableStubBase<*>>()) private val BASE_STUB_INTERFACES = listOf(KotlinStubWithFqName::class.java, KotlinClassOrObjectStub::class.java, NamedStub::class.java, KotlinCallableStubBase::class.java)
} }
} }
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
public object ModifierMaskUtils { public object ModifierMaskUtils {
init { init {
assert(MODIFIER_KEYWORDS_ARRAY.size() <= 32) { "Current implementation depends on the ability to represent modifier list as bit mask" } assert(MODIFIER_KEYWORDS_ARRAY.size <= 32) { "Current implementation depends on the ability to represent modifier list as bit mask" }
} }
@JvmStatic @JvmStatic
@@ -20,6 +20,6 @@ import com.intellij.util.io.StringRef
object Utils { object Utils {
fun wrapStrings(names : List<String>) : Array<StringRef> { fun wrapStrings(names : List<String>) : Array<StringRef> {
return Array(names.size()) { i -> StringRef.fromString(names.get(i))!! } return Array(names.size) { i -> StringRef.fromString(names.get(i))!! }
} }
} }
@@ -157,7 +157,7 @@ public class AnnotationChecker(private val additionalCheckers: Iterable<Addition
val targetEntryDescriptor = classDescriptor.annotations.findAnnotation(KotlinBuiltIns.FQ_NAMES.target) val targetEntryDescriptor = classDescriptor.annotations.findAnnotation(KotlinBuiltIns.FQ_NAMES.target)
?: return null ?: return null
val valueArguments = targetEntryDescriptor.allValueArguments val valueArguments = targetEntryDescriptor.allValueArguments
val valueArgument = valueArguments.entrySet().firstOrNull()?.getValue() as? ArrayValue ?: return null val valueArgument = valueArguments.entries.firstOrNull()?.value as? ArrayValue ?: return null
return valueArgument.value.filterIsInstance<EnumValue>().mapNotNull { return valueArgument.value.filterIsInstance<EnumValue>().mapNotNull {
KotlinTarget.valueOrNull(it.value.name.asString()) KotlinTarget.valueOrNull(it.value.name.asString())
}.toSet() }.toSet()
@@ -52,7 +52,7 @@ private fun CallableDescriptor.isPlatformStaticIn(predicate: (DeclarationDescrip
} }
public fun AnnotationDescriptor.argumentValue(parameterName: String): Any? { public fun AnnotationDescriptor.argumentValue(parameterName: String): Any? {
return getAllValueArguments().entrySet() return getAllValueArguments().entries
.singleOrNull { it.key.getName().asString() == parameterName } .singleOrNull { it.key.getName().asString() == parameterName }
?.value?.value ?.value?.value
} }
@@ -42,10 +42,10 @@ public fun KtReturnExpression.getTargetFunctionDescriptor(context: BindingContex
if (targetLabel != null) return context[LABEL_TARGET, targetLabel]?.let { context[FUNCTION, it] } if (targetLabel != null) return context[LABEL_TARGET, targetLabel]?.let { context[FUNCTION, it] }
val declarationDescriptor = context[DECLARATION_TO_DESCRIPTOR, getNonStrictParentOfType<KtDeclarationWithBody>()] val declarationDescriptor = context[DECLARATION_TO_DESCRIPTOR, getNonStrictParentOfType<KtDeclarationWithBody>()]
val containingFunctionDescriptor = DescriptorUtils.getParentOfType(declarationDescriptor, javaClass<FunctionDescriptor>(), false) val containingFunctionDescriptor = DescriptorUtils.getParentOfType(declarationDescriptor, FunctionDescriptor::class.java, false)
if (containingFunctionDescriptor == null) return null if (containingFunctionDescriptor == null) return null
return sequence(containingFunctionDescriptor) { DescriptorUtils.getParentOfType(it, javaClass<FunctionDescriptor>()) } return sequence(containingFunctionDescriptor) { DescriptorUtils.getParentOfType(it, FunctionDescriptor::class.java) }
.dropWhile { it is AnonymousFunctionDescriptor } .dropWhile { it is AnonymousFunctionDescriptor }
.firstOrNull() .firstOrNull()
} }
@@ -27,7 +27,7 @@ public interface CodeAnalyzerInitializer {
companion object { companion object {
public fun getInstance(project: Project): CodeAnalyzerInitializer = public fun getInstance(project: Project): CodeAnalyzerInitializer =
ServiceManager.getService<CodeAnalyzerInitializer>(project, javaClass<CodeAnalyzerInitializer>())!! ServiceManager.getService<CodeAnalyzerInitializer>(project, CodeAnalyzerInitializer::class.java)!!
} }
} }
@@ -36,7 +36,7 @@ public class CompositeBindingContext private constructor(
companion object { companion object {
public fun create(delegates: List<BindingContext>): BindingContext { public fun create(delegates: List<BindingContext>): BindingContext {
if (delegates.isEmpty()) return BindingContext.EMPTY if (delegates.isEmpty()) return BindingContext.EMPTY
if (delegates.size() == 1) return delegates.first() if (delegates.size == 1) return delegates.first()
return CompositeBindingContext(delegates) return CompositeBindingContext(delegates)
} }
} }
@@ -34,7 +34,7 @@ public fun isComponentLike(name: Name): Boolean {
} }
public fun getComponentIndex(componentName: Name): Int = public fun getComponentIndex(componentName: Name): Int =
componentName.asString().substring(COMPONENT_FUNCTION_NAME_PREFIX.length()).toInt() componentName.asString().substring(COMPONENT_FUNCTION_NAME_PREFIX.length).toInt()
public fun createComponentName(index: Int): Name = public fun createComponentName(index: Int): Name =
Name.identifier(COMPONENT_FUNCTION_NAME_PREFIX + index) Name.identifier(COMPONENT_FUNCTION_NAME_PREFIX + index)
@@ -51,7 +51,7 @@ public class DeclarationResolver(
} }
public fun checkRedeclarations(c: TopDownAnalysisContext) { public fun checkRedeclarations(c: TopDownAnalysisContext) {
for (classDescriptor in c.getDeclaredClasses().values()) { for (classDescriptor in c.getDeclaredClasses().values) {
val descriptorMap = HashMultimap.create<Name, DeclarationDescriptor>() val descriptorMap = HashMultimap.create<Name, DeclarationDescriptor>()
for (desc in classDescriptor.getUnsubstitutedMemberScope().getContributedDescriptors()) { for (desc in classDescriptor.getUnsubstitutedMemberScope().getContributedDescriptors()) {
if (desc is ClassDescriptor || desc is PropertyDescriptor) { if (desc is ClassDescriptor || desc is PropertyDescriptor) {
@@ -67,7 +67,7 @@ public class DeclarationResolver(
val redeclarations = Sets.newHashSet<Pair<PsiElement, Name>>() val redeclarations = Sets.newHashSet<Pair<PsiElement, Name>>()
for (name in descriptorMap.keySet()) { for (name in descriptorMap.keySet()) {
val descriptors = descriptorMap[name] val descriptors = descriptorMap[name]
if (descriptors.size() <= 1) { if (descriptors.size <= 1) {
continue continue
} }
// We mustn't compare PropertyDescriptor with PropertyDescriptor because we do this at OverloadResolver // We mustn't compare PropertyDescriptor with PropertyDescriptor because we do this at OverloadResolver
@@ -97,7 +97,7 @@ public class DeclarationResolver(
val descriptors = getTopLevelDescriptorsByFqName(topLevelDescriptorProvider, fqName, NoLookupLocation.WHEN_CHECK_REDECLARATIONS) val descriptors = getTopLevelDescriptorsByFqName(topLevelDescriptorProvider, fqName, NoLookupLocation.WHEN_CHECK_REDECLARATIONS)
if (descriptors.size() > 1) { if (descriptors.size > 1) {
for (declarationOrPackageDirective in declarationsOrPackageDirectives) { for (declarationOrPackageDirective in declarationsOrPackageDirectives) {
val reportAt = val reportAt =
if (declarationOrPackageDirective is KtPackageDirective) declarationOrPackageDirective.getNameIdentifier() if (declarationOrPackageDirective is KtPackageDirective) declarationOrPackageDirective.getNameIdentifier()
@@ -67,7 +67,7 @@ public object DescriptorToSourceUtils {
@JvmStatic @JvmStatic
public fun descriptorToDeclaration(descriptor: DeclarationDescriptor): PsiElement? { public fun descriptorToDeclaration(descriptor: DeclarationDescriptor): PsiElement? {
val effectiveReferencedDescriptors = getEffectiveReferencedDescriptors(descriptor) val effectiveReferencedDescriptors = getEffectiveReferencedDescriptors(descriptor)
return if (effectiveReferencedDescriptors.size() == 1) getSourceFromDescriptor(effectiveReferencedDescriptors.firstOrNull()!!) else null return if (effectiveReferencedDescriptors.size == 1) getSourceFromDescriptor(effectiveReferencedDescriptors.firstOrNull()!!) else null
} }
@JvmStatic @JvmStatic
@@ -195,7 +195,7 @@ class FunctionDescriptorResolver(
): List<ValueParameterDescriptor> { ): List<ValueParameterDescriptor> {
val expectedValueParameters = expectedFunctionType.getValueParameters(functionDescriptor) val expectedValueParameters = expectedFunctionType.getValueParameters(functionDescriptor)
if (expectedValueParameters != null) { if (expectedValueParameters != null) {
if (expectedValueParameters.size() == 1 && function is KtFunctionLiteral && function.getValueParameterList() == null) { if (expectedValueParameters.size == 1 && function is KtFunctionLiteral && function.getValueParameterList() == null) {
// it parameter for lambda // it parameter for lambda
val valueParameterDescriptor = expectedValueParameters.first() val valueParameterDescriptor = expectedValueParameters.first()
val it = ValueParameterDescriptorImpl(functionDescriptor, null, 0, Annotations.EMPTY, Name.identifier("it"), val it = ValueParameterDescriptorImpl(functionDescriptor, null, 0, Annotations.EMPTY, Name.identifier("it"),
@@ -205,9 +205,9 @@ class FunctionDescriptorResolver(
trace.record(BindingContext.AUTO_CREATED_IT, it) trace.record(BindingContext.AUTO_CREATED_IT, it)
return listOf(it) return listOf(it)
} }
if (function.getValueParameters().size() != expectedValueParameters.size()) { if (function.getValueParameters().size != expectedValueParameters.size) {
val expectedParameterTypes = ExpressionTypingUtils.getValueParametersTypes(expectedValueParameters) val expectedParameterTypes = ExpressionTypingUtils.getValueParametersTypes(expectedValueParameters)
trace.report(EXPECTED_PARAMETERS_NUMBER_MISMATCH.on(function, expectedParameterTypes.size(), expectedParameterTypes)) trace.report(EXPECTED_PARAMETERS_NUMBER_MISMATCH.on(function, expectedParameterTypes.size, expectedParameterTypes))
} }
} }
@@ -313,7 +313,7 @@ class FunctionDescriptorResolver(
for (i in valueParameters.indices) { for (i in valueParameters.indices) {
val valueParameter = valueParameters.get(i) val valueParameter = valueParameters.get(i)
val typeReference = valueParameter.getTypeReference() val typeReference = valueParameter.getTypeReference()
val expectedType = expectedValueParameters?.let { if (i < it.size()) it[i].getType() else null } val expectedType = expectedValueParameters?.let { if (i < it.size) it[i].getType() else null }
val type: KotlinType val type: KotlinType
if (typeReference != null) { if (typeReference != null) {
@@ -83,12 +83,12 @@ public class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageVa
) as? ClassifierDescriptor ) as? ClassifierDescriptor
return TypeQualifierResolutionResult(qualifierPartList, descriptor) return TypeQualifierResolutionResult(qualifierPartList, descriptor)
} }
assert(qualifierPartList.size() >= 1) { assert(qualifierPartList.size >= 1) {
"Too short qualifier list for user type $userType : ${qualifierPartList.joinToString()}" "Too short qualifier list for user type $userType : ${qualifierPartList.joinToString()}"
} }
val qualifier = resolveToPackageOrClass( val qualifier = resolveToPackageOrClass(
qualifierPartList.subList(0, qualifierPartList.size() - 1), module, qualifierPartList.subList(0, qualifierPartList.size - 1), module,
trace, scope.ownerDescriptor, scope.check { !userType.startWithPackage }, position = QualifierPosition.TYPE trace, scope.ownerDescriptor, scope.check { !userType.startWithPackage }, position = QualifierPosition.TYPE
) ?: return TypeQualifierResolutionResult(qualifierPartList, null) ) ?: return TypeQualifierResolutionResult(qualifierPartList, null)
@@ -170,7 +170,7 @@ public class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageVa
} }
val packageOrClassDescriptor = resolveToPackageOrClass( val packageOrClassDescriptor = resolveToPackageOrClass(
path.subList(0, path.size() - 1), moduleDescriptor, trace, path.subList(0, path.size - 1), moduleDescriptor, trace,
packageFragmentForVisibilityCheck, scopeForFirstPart = null, position = QualifierPosition.IMPORT packageFragmentForVisibilityCheck, scopeForFirstPart = null, position = QualifierPosition.IMPORT
) ?: return null ) ?: return null
@@ -480,7 +480,7 @@ public class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageVa
trace: BindingTrace, trace: BindingTrace,
position: QualifierPosition position: QualifierPosition
): Pair<PackageViewDescriptor, Int> { ): Pair<PackageViewDescriptor, Int> {
val possiblePackagePrefixSize = path.indexOfFirst { it.typeArguments != null }.let { if (it == -1) path.size() else it + 1 } val possiblePackagePrefixSize = path.indexOfFirst { it.typeArguments != null }.let { if (it == -1) path.size else it + 1 }
var fqName = path.subList(0, possiblePackagePrefixSize).fold(FqName.ROOT) { fqName, qualifierPart -> var fqName = path.subList(0, possiblePackagePrefixSize).fold(FqName.ROOT) { fqName, qualifierPart ->
fqName.child(qualifierPart.name) fqName.child(qualifierPart.name)
} }
@@ -522,13 +522,13 @@ public class QualifiedExpressionResolver(val symbolUsageValidator: SymbolUsageVa
position: QualifierPosition, position: QualifierPosition,
isQualifier: Boolean = true isQualifier: Boolean = true
) { ) {
if (descriptors.size() > 1) { if (descriptors.size > 1) {
val visibleDescriptors = descriptors.filter { isVisible(it, shouldBeVisibleFrom, position) } val visibleDescriptors = descriptors.filter { isVisible(it, shouldBeVisibleFrom, position) }
if (visibleDescriptors.isEmpty()) { if (visibleDescriptors.isEmpty()) {
val descriptor = descriptors.first() as DeclarationDescriptorWithVisibility val descriptor = descriptors.first() as DeclarationDescriptorWithVisibility
trace.report(Errors.INVISIBLE_REFERENCE.on(referenceExpression, descriptor, descriptor.visibility, descriptor)) trace.report(Errors.INVISIBLE_REFERENCE.on(referenceExpression, descriptor, descriptor.visibility, descriptor))
} }
else if (visibleDescriptors.size() > 1) { else if (visibleDescriptors.size > 1) {
trace.record(BindingContext.AMBIGUOUS_REFERENCE_TARGET, referenceExpression, visibleDescriptors) trace.record(BindingContext.AMBIGUOUS_REFERENCE_TARGET, referenceExpression, visibleDescriptors)
} }
else { else {
@@ -76,8 +76,8 @@ private class ExplicitTypeBinding(
override fun getArgumentBindings(): List<TypeArgumentBinding<KtTypeElement>?> { override fun getArgumentBindings(): List<TypeArgumentBinding<KtTypeElement>?> {
val psiTypeArguments = psiElement.getTypeArgumentsAsTypes() val psiTypeArguments = psiElement.getTypeArgumentsAsTypes()
val isErrorBinding = run { val isErrorBinding = run {
val sizeIsEqual = psiTypeArguments.size() == kotlinType.getArguments().size() val sizeIsEqual = psiTypeArguments.size == kotlinType.getArguments().size
&& psiTypeArguments.size() == kotlinType.getConstructor().getParameters().size() && psiTypeArguments.size == kotlinType.getConstructor().getParameters().size
kotlinType.isError() || !sizeIsEqual kotlinType.isError() || !sizeIsEqual
} }
@@ -115,7 +115,7 @@ private class NoTypeElementBinding<out P : PsiElement>(
): TypeBinding<P> { ): TypeBinding<P> {
override fun getArgumentBindings(): List<TypeArgumentBinding<P>?> { override fun getArgumentBindings(): List<TypeArgumentBinding<P>?> {
val isErrorBinding = kotlinType.isError() || kotlinType.getConstructor().getParameters().size() != kotlinType.getArguments().size() val isErrorBinding = kotlinType.isError() || kotlinType.getConstructor().getParameters().size != kotlinType.getArguments().size
return kotlinType.getArguments().indices.map { return kotlinType.getArguments().indices.map {
val typeProjection = kotlinType.getArguments()[it] val typeProjection = kotlinType.getArguments()[it]
TypeArgumentBindingImpl( TypeArgumentBindingImpl(
@@ -493,7 +493,7 @@ public class TypeResolver(
ModifierCheckerCore.check(argumentElement, c.trace, null) ModifierCheckerCore.check(argumentElement, c.trace, null)
if (projectionKind == KtProjectionKind.STAR) { if (projectionKind == KtProjectionKind.STAR) {
val parameters = constructor.getParameters() val parameters = constructor.getParameters()
if (parameters.size() > i) { if (parameters.size > i) {
val parameterDescriptor = parameters[i] val parameterDescriptor = parameters[i]
TypeUtils.makeStarProjection(parameterDescriptor) TypeUtils.makeStarProjection(parameterDescriptor)
} }
@@ -504,7 +504,7 @@ public class TypeResolver(
else { else {
val type = resolveType(c.noBareTypes(), argumentElement.getTypeReference()!!) val type = resolveType(c.noBareTypes(), argumentElement.getTypeReference()!!)
val kind = resolveProjectionKind(projectionKind) val kind = resolveProjectionKind(projectionKind)
if (constructor.getParameters().size() > i) { if (constructor.getParameters().size > i) {
val parameterDescriptor = constructor.getParameters()[i] val parameterDescriptor = constructor.getParameters()[i]
if (kind != INVARIANT && parameterDescriptor.getVariance() != INVARIANT) { if (kind != INVARIANT && parameterDescriptor.getVariance() != INVARIANT) {
if (kind == parameterDescriptor.getVariance()) { if (kind == parameterDescriptor.getVariance()) {
@@ -55,7 +55,7 @@ class VarianceChecker(private val trace: BindingTrace) {
} }
private fun checkClasses(c: TopDownAnalysisContext) { private fun checkClasses(c: TopDownAnalysisContext) {
for (jetClassOrObject in c.getDeclaredClasses()!!.keySet()) { for (jetClassOrObject in c.getDeclaredClasses()!!.keys) {
if (jetClassOrObject is KtClass) { if (jetClassOrObject is KtClass) {
for (specifier in jetClassOrObject.getSuperTypeListEntries()) { for (specifier in jetClassOrObject.getSuperTypeListEntries()) {
specifier.getTypeReference()?.checkTypePosition(trace.getBindingContext(), OUT_VARIANCE, trace) specifier.getTypeReference()?.checkTypePosition(trace.getBindingContext(), OUT_VARIANCE, trace)
@@ -121,15 +121,15 @@ public class CandidateResolver(
typeArguments.add(type) typeArguments.add(type)
} }
val expectedTypeArgumentCount = candidateDescriptor.getTypeParameters().size() val expectedTypeArgumentCount = candidateDescriptor.getTypeParameters().size
for (index in jetTypeArguments.size()..expectedTypeArgumentCount - 1) { for (index in jetTypeArguments.size..expectedTypeArgumentCount - 1) {
typeArguments.add(ErrorUtils.createErrorType( typeArguments.add(ErrorUtils.createErrorType(
"Explicit type argument expected for " + candidateDescriptor.getTypeParameters().get(index).getName())) "Explicit type argument expected for " + candidateDescriptor.getTypeParameters().get(index).getName()))
} }
val substitution = FunctionDescriptorUtil.createSubstitution(candidateDescriptor as FunctionDescriptor, typeArguments) val substitution = FunctionDescriptorUtil.createSubstitution(candidateDescriptor as FunctionDescriptor, typeArguments)
val substitutor = TypeSubstitutor.create(SubstitutionFilteringInternalResolveAnnotations(substitution)) val substitutor = TypeSubstitutor.create(SubstitutionFilteringInternalResolveAnnotations(substitution))
if (expectedTypeArgumentCount != jetTypeArguments.size()) { if (expectedTypeArgumentCount != jetTypeArguments.size) {
candidateCall.addStatus(OTHER_ERROR) candidateCall.addStatus(OTHER_ERROR)
tracing.wrongNumberOfTypeArguments(trace, expectedTypeArgumentCount) tracing.wrongNumberOfTypeArguments(trace, expectedTypeArgumentCount)
} }
@@ -315,9 +315,9 @@ public class CandidateResolver(
var resultStatus = SUCCESS var resultStatus = SUCCESS
val argumentTypes = Lists.newArrayList<KotlinType>() val argumentTypes = Lists.newArrayList<KotlinType>()
val infoForArguments = candidateCall.getDataFlowInfoForArguments() val infoForArguments = candidateCall.getDataFlowInfoForArguments()
for (entry in candidateCall.getValueArguments().entrySet()) { for (entry in candidateCall.getValueArguments().entries) {
val parameterDescriptor = entry.getKey() val parameterDescriptor = entry.key
val resolvedArgument = entry.getValue() val resolvedArgument = entry.value
for (argument in resolvedArgument.getArguments()) { for (argument in resolvedArgument.getArguments()) {
@@ -507,7 +507,7 @@ public class CandidateResolver(
substitutor: TypeSubstitutor, substitutor: TypeSubstitutor,
trace: BindingTrace) { trace: BindingTrace) {
val typeParameters = functionDescriptor.getTypeParameters() val typeParameters = functionDescriptor.getTypeParameters()
for (i in 0..Math.min(typeParameters.size(), jetTypeArguments.size()) - 1) { for (i in 0..Math.min(typeParameters.size, jetTypeArguments.size) - 1) {
val typeParameterDescriptor = typeParameters.get(i) val typeParameterDescriptor = typeParameters.get(i)
val typeArgument = typeArguments.get(i) val typeArgument = typeArguments.get(i)
val typeReference = jetTypeArguments.get(i).getTypeReference() val typeReference = jetTypeArguments.get(i).getTypeReference()
@@ -155,7 +155,7 @@ class DynamicCallableDescriptors(private val builtIns: KotlinBuiltIns) {
val parameters = ArrayList<ValueParameterDescriptor>() val parameters = ArrayList<ValueParameterDescriptor>()
fun addParameter(arg : ValueArgument, outType: KotlinType, varargElementType: KotlinType?) { fun addParameter(arg : ValueArgument, outType: KotlinType, varargElementType: KotlinType?) {
val index = parameters.size() val index = parameters.size
parameters.add(ValueParameterDescriptorImpl( parameters.add(ValueParameterDescriptorImpl(
owner, owner,
@@ -45,7 +45,7 @@ public fun <D : CallableDescriptor> ResolvedCall<D>.hasUnmappedArguments(): Bool
public fun <D : CallableDescriptor> ResolvedCall<D>.hasUnmappedParameters(): Boolean { public fun <D : CallableDescriptor> ResolvedCall<D>.hasUnmappedParameters(): Boolean {
val parameterToArgumentMap = getValueArguments() val parameterToArgumentMap = getValueArguments()
return !parameterToArgumentMap.keySet().containsAll(getResultingDescriptor().getValueParameters()) return !parameterToArgumentMap.keys.containsAll(getResultingDescriptor().getValueParameters())
} }
public fun <D : CallableDescriptor> ResolvedCall<D>.allArgumentsMapped() public fun <D : CallableDescriptor> ResolvedCall<D>.allArgumentsMapped()
@@ -144,8 +144,8 @@ public fun KtElement.getCall(context: BindingContext): Call? {
public fun KtElement.getParentCall(context: BindingContext, strict: Boolean = true): Call? { public fun KtElement.getParentCall(context: BindingContext, strict: Boolean = true): Call? {
val callExpressionTypes = arrayOf<Class<out KtElement>?>( val callExpressionTypes = arrayOf<Class<out KtElement>?>(
javaClass<KtSimpleNameExpression>(), javaClass<KtCallElement>(), javaClass<KtBinaryExpression>(), KtSimpleNameExpression::class.java, KtCallElement::class.java, KtBinaryExpression::class.java,
javaClass<KtUnaryExpression>(), javaClass<KtArrayAccessExpression>()) KtUnaryExpression::class.java, KtArrayAccessExpression::class.java)
val parent = if (strict) { val parent = if (strict) {
PsiTreeUtil.getParentOfType(this, *callExpressionTypes) PsiTreeUtil.getParentOfType(this, *callExpressionTypes)
@@ -367,7 +367,7 @@ private class ConstantExpressionEvaluatorVisitor(
val leftExpression = expression.left ?: return null val leftExpression = expression.left ?: return null
val operationToken = expression.operationToken val operationToken = expression.operationToken
if (OperatorConventions.BOOLEAN_OPERATIONS.containsKeyRaw(operationToken)) { if (OperatorConventions.BOOLEAN_OPERATIONS.containsKey(operationToken)) {
val booleanType = constantExpressionEvaluator.builtIns.booleanType val booleanType = constantExpressionEvaluator.builtIns.booleanType
val leftConstant = evaluate(leftExpression, booleanType) ?: return null val leftConstant = evaluate(leftExpression, booleanType) ?: return null

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