Capitalize/decapitalize only ASCII characters across project

Use {de,}capitalizeAsciiOnly and to{Lower,Upper}CaseAsciiOnly where
possible, and stdlib's functions with Locale.US everywhere else.

Otherwise, if the default system locale is Turkish, the capital latin
letter "I" is transformed in toLowerCase to "ı" (see
https://github.com/JetBrains/kotlin/blob/66bc142f92085047a1ca64f9a291f0496e33dd98/libraries/stdlib/jvm/test/text/StringJVMTest.kt#L119),
which for example breaks the codegen for `intArrayOf` in
KT-25400/KT-43405.

Similarly, lower case latin letter "i" is transformed to "İ".

 #KT-13631 Fixed
 #KT-25400 Fixed
 #KT-43405 Fixed
This commit is contained in:
Alexander Udalov
2020-11-17 20:26:19 +01:00
parent 5d4b0b19d4
commit 77a9d14f93
53 changed files with 173 additions and 121 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.name.parentOrNull
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
import org.jetbrains.kotlin.serialization.deserialization.getClassId import org.jetbrains.kotlin.serialization.deserialization.getClassId
import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.io.DataInput import java.io.DataInput
import java.io.DataOutput import java.io.DataOutput
import java.io.File import java.io.File
@@ -326,7 +327,7 @@ private class ProtoDataProvider(private val serializerProtocol: SerializerExtens
proto.`package`.apply { proto.`package`.apply {
val packageNameId = getExtensionOrNull(serializerProtocol.packageFqName) val packageNameId = getExtensionOrNull(serializerProtocol.packageFqName)
val packageFqName = packageNameId?.let { FqName(nameResolver.getPackageFqName(it)) } ?: FqName.ROOT val packageFqName = packageNameId?.let { FqName(nameResolver.getPackageFqName(it)) } ?: FqName.ROOT
val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalize() + "Kt")) val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalizeAsciiOnly() + "Kt"))
classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName) classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName)
} }
@@ -347,7 +348,7 @@ fun getProtoData(sourceFile: File, metadata: ByteArray): Map<ClassId, ProtoData>
proto.`package`.apply { proto.`package`.apply {
val packageFqName = getExtensionOrNull(JsProtoBuf.packageFqName)?.let(nameResolver::getPackageFqName)?.let(::FqName) ?: FqName.ROOT val packageFqName = getExtensionOrNull(JsProtoBuf.packageFqName)?.let(nameResolver::getPackageFqName)?.let(::FqName) ?: FqName.ROOT
val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalize() + "Kt")) val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalizeAsciiOnly() + "Kt"))
classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName) classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName)
} }
@@ -412,4 +413,4 @@ private class PackageMetadataMap(storageFile: File) : BasicStringMap<ByteArray>(
operator fun get(packageName: String) = storage[packageName] operator fun get(packageName: String) = storage[packageName]
override fun dumpValue(value: ByteArray): String = "Package metadata: ${value.md5()}" override fun dumpValue(value: ByteArray): String = "Package metadata: ${value.md5()}"
} }
@@ -17,11 +17,10 @@
package org.jetbrains.kotlin.codegen.intrinsics; package org.jetbrains.kotlin.codegen.intrinsics;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import kotlin.text.StringsKt;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.StandardNames;
import org.jetbrains.kotlin.builtins.PrimitiveType; import org.jetbrains.kotlin.builtins.PrimitiveType;
import org.jetbrains.kotlin.builtins.StandardNames;
import org.jetbrains.kotlin.codegen.AsmUtil; import org.jetbrains.kotlin.codegen.AsmUtil;
import org.jetbrains.kotlin.config.JvmTarget; import org.jetbrains.kotlin.config.JvmTarget;
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor; import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
@@ -30,6 +29,7 @@ import org.jetbrains.kotlin.name.FqNameUnsafe;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType; import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
import org.jetbrains.kotlin.types.expressions.OperatorConventions; import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt;
import org.jetbrains.org.objectweb.asm.Type; import org.jetbrains.org.objectweb.asm.Type;
import static org.jetbrains.kotlin.builtins.StandardNames.*; import static org.jetbrains.kotlin.builtins.StandardNames.*;
@@ -122,7 +122,9 @@ public class IntrinsicMethods {
declareIntrinsicFunction(typeFqName, "toString", 0, TO_STRING); declareIntrinsicFunction(typeFqName, "toString", 0, TO_STRING);
intrinsicsMap.registerIntrinsic( intrinsicsMap.registerIntrinsic(
BUILT_INS_PACKAGE_FQ_NAME, null, StringsKt.decapitalize(type.getArrayTypeName().asString()) + "Of", 1, new ArrayOf() BUILT_INS_PACKAGE_FQ_NAME, null,
CapitalizeDecapitalizeKt.decapitalizeAsciiOnly(type.getArrayTypeName().asString()) + "Of",
1, new ArrayOf()
); );
} }
@@ -23,6 +23,7 @@ import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.internal.CLibrary; import org.fusesource.jansi.internal.CLibrary;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Set; import java.util.Set;
@@ -130,7 +131,7 @@ public abstract class PlainTextMessageRenderer implements MessageRenderer {
return message; return message;
} }
return StringsKt.decapitalize(message); return CapitalizeDecapitalizeKt.decapitalizeAsciiOnly(message);
} }
@NotNull @NotNull
@@ -30,6 +30,7 @@ import org.xml.sax.SAXException
import org.xml.sax.helpers.DefaultHandler import org.xml.sax.helpers.DefaultHandler
import java.io.IOException import java.io.IOException
import java.io.Reader import java.io.Reader
import java.util.*
import javax.xml.parsers.SAXParserFactory import javax.xml.parsers.SAXParserFactory
object CompilerOutputParser { object CompilerOutputParser {
@@ -124,7 +125,7 @@ object CompilerOutputParser {
// We're directly inside the root tag: <MESSAGES> // We're directly inside the root tag: <MESSAGES>
return return
} }
val qNameLowerCase = qName.toLowerCase() val qNameLowerCase = qName.toLowerCase(Locale.US)
var category: CompilerMessageSeverity? = CATEGORIES[qNameLowerCase] var category: CompilerMessageSeverity? = CATEGORIES[qNameLowerCase]
if (category == null) { if (category == null) {
messageCollector.report(ERROR, "Unknown compiler message tag: $qName") messageCollector.report(ERROR, "Unknown compiler message tag: $qName")
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.daemon.common package org.jetbrains.kotlin.daemon.common
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import java.io.File import java.io.File
enum class OSKind { enum class OSKind {
@@ -25,7 +26,7 @@ enum class OSKind {
Unknown; Unknown;
companion object { companion object {
val current: OSKind = System.getProperty("os.name").toLowerCase().let { val current: OSKind = System.getProperty("os.name").toLowerCaseAsciiOnly().let {
when { when {
// partly taken from http://www.code4copy.com/java/post/detecting-os-type-in-java // partly taken from http://www.code4copy.com/java/post/detecting-os-type-in-java
it.startsWith("windows") -> Windows it.startsWith("windows") -> Windows
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
open class FirJvmMangleComputer( open class FirJvmMangleComputer(
@@ -210,7 +211,7 @@ open class FirJvmMangleComputer(
is ConeStarProjection -> appendSignature(MangleConstant.STAR_MARK) is ConeStarProjection -> appendSignature(MangleConstant.STAR_MARK)
is ConeKotlinTypeProjection -> { is ConeKotlinTypeProjection -> {
if (arg.kind != ProjectionKind.INVARIANT) { if (arg.kind != ProjectionKind.INVARIANT) {
appendSignature(arg.kind.name.toLowerCase()) appendSignature(arg.kind.name.toLowerCaseAsciiOnly())
appendSignature(MangleConstant.VARIANCE_SEPARATOR) appendSignature(MangleConstant.VARIANCE_SEPARATOR)
} }
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance.* import org.jetbrains.kotlin.types.Variance.*
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.runIf
import java.lang.Deprecated import java.lang.Deprecated
import java.lang.annotation.Documented import java.lang.annotation.Documented
@@ -140,7 +141,7 @@ internal fun JavaType?.toConeKotlinTypeWithoutEnhancement(
val primitiveType = type val primitiveType = type
val kotlinPrimitiveName = when (val javaName = primitiveType?.typeName?.asString()) { val kotlinPrimitiveName = when (val javaName = primitiveType?.typeName?.asString()) {
null -> "Unit" null -> "Unit"
else -> javaName.capitalize() else -> javaName.capitalizeAsciiOnly()
} }
val classId = StandardClassIds.byName(kotlinPrimitiveName) val classId = StandardClassIds.byName(kotlinPrimitiveName)
@@ -194,7 +195,7 @@ private fun JavaArrayType.toConeKotlinTypeWithoutEnhancement(
) )
} }
} else { } else {
val javaComponentName = componentType.type?.typeName?.asString()?.capitalize() ?: error("Array of voids") val javaComponentName = componentType.type?.typeName?.asString()?.capitalizeAsciiOnly() ?: error("Array of voids")
val classId = StandardClassIds.byName(javaComponentName + "Array") val classId = StandardClassIds.byName(javaComponentName + "Array")
if (forAnnotationValueParameter) { if (forAnnotationValueParameter) {
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.NoMutableState
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
@NoMutableState @NoMutableState
@@ -91,7 +92,7 @@ object FirJavaSyntheticNamesProvider : FirSyntheticNamesProvider() {
else -> return emptyList() else -> return emptyList()
} }
val withoutPrefix = identifier.removePrefix(prefix) val withoutPrefix = identifier.removePrefix(prefix)
val withoutPrefixName = Name.identifier(withoutPrefix.decapitalize()) val withoutPrefixName = Name.identifier(withoutPrefix.decapitalizeAsciiOnly())
return if (prefix == SETTER_PREFIX) { return if (prefix == SETTER_PREFIX) {
listOf(withoutPrefixName, Name.identifier(IS_PREFIX + withoutPrefix)) listOf(withoutPrefixName, Name.identifier(IS_PREFIX + withoutPrefix))
} else { } else {
@@ -99,4 +100,3 @@ object FirJavaSyntheticNamesProvider : FirSyntheticNamesProvider() {
} }
} }
} }
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.Printer
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@@ -226,7 +227,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
} }
private fun FirMemberDeclaration.modalityAsString(): String { private fun FirMemberDeclaration.modalityAsString(): String {
return modality?.name?.toLowerCase() ?: run { return modality?.name?.toLowerCaseAsciiOnly() ?: run {
if (this is FirCallableMemberDeclaration<*> && this.isOverride) { if (this is FirCallableMemberDeclaration<*> && this.isOverride) {
"open?" "open?"
} else { } else {
@@ -343,7 +344,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
declaration.renderPhaseIfNeeded() declaration.renderPhaseIfNeeded()
print( print(
when (declaration) { when (declaration) {
is FirRegularClass -> declaration.classKind.name.toLowerCase().replace("_", " ") is FirRegularClass -> declaration.classKind.name.toLowerCaseAsciiOnly().replace("_", " ")
is FirTypeAlias -> "typealias" is FirTypeAlias -> "typealias"
is FirSimpleFunction -> "fun" is FirSimpleFunction -> "fun"
is FirProperty -> { is FirProperty -> {
@@ -7,18 +7,22 @@ package org.jetbrains.kotlin.ir.interpreter
import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.ir.interpreter.builtins.evaluateIntrinsicAnnotation
import org.jetbrains.kotlin.ir.interpreter.stack.Variable
import org.jetbrains.kotlin.ir.interpreter.state.*
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.interpreter.builtins.evaluateIntrinsicAnnotation
import org.jetbrains.kotlin.ir.interpreter.stack.Variable
import org.jetbrains.kotlin.ir.interpreter.state.*
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
internal fun IrFunction.getDispatchReceiver(): IrValueParameterSymbol? = this.dispatchReceiverParameter?.symbol internal fun IrFunction.getDispatchReceiver(): IrValueParameterSymbol? = this.dispatchReceiverParameter?.symbol
@@ -202,7 +206,7 @@ internal fun State?.getCorrectReceiverByFunction(irFunction: IrFunction): State?
return generateSequence(original) { it.superClass }.firstOrNull { it.irClass.thisReceiver == other } ?: this return generateSequence(original) { it.superClass }.firstOrNull { it.irClass.thisReceiver == other } ?: this
} }
internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", "Kt").capitalize() internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", "Kt").capitalizeAsciiOnly()
internal fun IrType.isUnsigned() = this.isUByte() || this.isUShort() || this.isUInt() || this.isULong() internal fun IrType.isUnsigned() = this.isUByte() || this.isUShort() || this.isUInt() || this.isULong()
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization import org.jetbrains.kotlin.ir.util.fqNameForIrSerialization
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.lang.invoke.MethodHandle import java.lang.invoke.MethodHandle
import java.lang.invoke.MethodHandles import java.lang.invoke.MethodHandles
import java.lang.invoke.MethodType import java.lang.invoke.MethodType
@@ -30,7 +31,7 @@ internal class Wrapper(val value: Any, override val irClass: IrClass) : Complex(
if (irFunction.getEvaluateIntrinsicValue()?.isEmpty() == true) return null // this method will handle IntrinsicEvaluator if (irFunction.getEvaluateIntrinsicValue()?.isEmpty() == true) return null // this method will handle IntrinsicEvaluator
// if function is actually a getter, then use "get${property.name.capitalize()}" as method name // if function is actually a getter, then use "get${property.name.capitalize()}" as method name
val propertyName = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol?.owner?.name?.asString() val propertyName = (irFunction as? IrSimpleFunction)?.correspondingPropertySymbol?.owner?.name?.asString()
val propertyCall = listOfNotNull(propertyName, "get${propertyName?.capitalize()}") val propertyCall = listOfNotNull(propertyName, "get${propertyName?.capitalizeAsciiOnly()}")
.firstOrNull { receiverClass.methods.any { method -> method.name == it } } .firstOrNull { receiverClass.methods.any { method -> method.name == it } }
val intrinsicName = getJavaOriginalName(irFunction) val intrinsicName = getJavaOriginalName(irFunction)
@@ -187,4 +188,4 @@ internal class Wrapper(val value: Any, override val irClass: IrClass) : Complex(
override fun toString(): String { override fun toString(): String {
return "Wrapper(obj='$typeFqName', value=$value)" return "Wrapper(obj='$typeFqName', value=$value)"
} }
} }
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.kdoc.parser package org.jetbrains.kotlin.kdoc.parser
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
enum class KDocKnownTag(val isReferenceRequired: Boolean, val isSectionStart: Boolean) { enum class KDocKnownTag(val isReferenceRequired: Boolean, val isSectionStart: Boolean) {
AUTHOR(false, false), AUTHOR(false, false),
THROWS(true, false), THROWS(true, false),
@@ -37,7 +39,7 @@ enum class KDocKnownTag(val isReferenceRequired: Boolean, val isSectionStart: Bo
tagName.subSequence(1, tagName.length) tagName.subSequence(1, tagName.length)
} else tagName } else tagName
try { try {
return valueOf(name.toString().toUpperCase()) return valueOf(name.toString().toUpperCaseAsciiOnly())
} catch (ignored: IllegalArgumentException) { } catch (ignored: IllegalArgumentException) {
} }
@@ -10,13 +10,14 @@ import com.intellij.psi.impl.source.tree.LazyParseablePsiElement
import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag
import org.jetbrains.kotlin.kdoc.psi.api.KDoc import org.jetbrains.kotlin.kdoc.psi.api.KDoc
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.kotlin.kdoc.parser.KDocKnownTag import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocTokens.KDOC, buffer), KDoc { class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocTokens.KDOC, buffer), KDoc {
@@ -37,10 +38,10 @@ class KDocImpl(buffer: CharSequence?) : LazyParseablePsiElement(KDocTokens.KDOC,
getChildrenOfType<KDocSection>().firstOrNull { it.name == name } getChildrenOfType<KDocSection>().firstOrNull { it.name == name }
override fun findSectionByTag(tag: KDocKnownTag): KDocSection? = override fun findSectionByTag(tag: KDocKnownTag): KDocSection? =
findSectionByName(tag.name.toLowerCase()) findSectionByName(tag.name.toLowerCaseAsciiOnly())
override fun findSectionByTag(tag: KDocKnownTag, subjectName: String): KDocSection? = override fun findSectionByTag(tag: KDocKnownTag, subjectName: String): KDocSection? =
getChildrenOfType<KDocSection>().firstOrNull { getChildrenOfType<KDocSection>().firstOrNull {
it.name == tag.name.toLowerCase() && it.getSubjectName() == subjectName it.name == tag.name.toLowerCaseAsciiOnly() && it.getSubjectName() == subjectName
} }
} }
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
private typealias Stack = MutableList<Pair<String, MutableList<String>>> private typealias Stack = MutableList<Pair<String, MutableList<String>>>
@@ -452,7 +453,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
resolvedQualifier.symbol?.let { resolvedQualifier.symbol?.let {
val fir = it.fir val fir = it.fir
if (fir is FirClass) { if (fir is FirClass) {
data.append(fir.classKind.name.toLowerCase()).append(" ") data.append(fir.classKind.name.toLowerCaseAsciiOnly()).append(" ")
data.append((fir as? FirRegularClass)?.name ?: Name.special("<anonymous>")) data.append((fir as? FirRegularClass)?.name ?: Name.special("<anonymous>"))
if (fir.superTypeRefs.any { it.render() != "kotlin/Any" }) { if (fir.superTypeRefs.any { it.render() != "kotlin/Any" }) {
data.append(": ") data.append(": ")
@@ -16,16 +16,18 @@
package org.jetbrains.kotlin.descriptors.annotations package org.jetbrains.kotlin.descriptors.annotations
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
enum class AnnotationUseSiteTarget(renderName: String? = null) { enum class AnnotationUseSiteTarget(renderName: String? = null) {
FIELD(), FIELD,
FILE(), FILE,
PROPERTY(), PROPERTY,
PROPERTY_GETTER("get"), PROPERTY_GETTER("get"),
PROPERTY_SETTER("set"), PROPERTY_SETTER("set"),
RECEIVER(), RECEIVER,
CONSTRUCTOR_PARAMETER("param"), CONSTRUCTOR_PARAMETER("param"),
SETTER_PARAMETER("setparam"), SETTER_PARAMETER("setparam"),
PROPERTY_DELEGATE_FIELD("delegate"); PROPERTY_DELEGATE_FIELD("delegate");
val renderName: String = renderName ?: name.toLowerCase() val renderName: String = renderName ?: name.toLowerCaseAsciiOnly()
} }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: NotFoundClasses) { class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: NotFoundClasses) {
@@ -35,7 +36,7 @@ class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: Not
private class ClassLookup(val numberOfTypeParameters: Int) { private class ClassLookup(val numberOfTypeParameters: Int) {
operator fun getValue(types: ReflectionTypes, property: KProperty<*>): ClassDescriptor { operator fun getValue(types: ReflectionTypes, property: KProperty<*>): ClassDescriptor {
return types.find(property.name.capitalize(), numberOfTypeParameters) return types.find(property.name.capitalizeAsciiOnly(), numberOfTypeParameters)
} }
} }
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.declaresOrInheritsDefaultValu
import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor
import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import java.util.* import java.util.*
internal class DescriptorRendererImpl( internal class DescriptorRendererImpl(
@@ -494,7 +495,7 @@ internal class DescriptorRendererImpl(
private fun renderModality(modality: Modality, builder: StringBuilder, defaultModality: Modality) { private fun renderModality(modality: Modality, builder: StringBuilder, defaultModality: Modality) {
if (!renderDefaultModality && modality == defaultModality) return if (!renderDefaultModality && modality == defaultModality) return
renderModifier(builder, DescriptorRendererModifier.MODALITY in modifiers, modality.name.toLowerCase()) renderModifier(builder, DescriptorRendererModifier.MODALITY in modifiers, modality.name.toLowerCaseAsciiOnly())
} }
private fun MemberDescriptor.implicitModalityWithoutExtensions(): Modality { private fun MemberDescriptor.implicitModalityWithoutExtensions(): Modality {
@@ -538,7 +539,7 @@ internal class DescriptorRendererImpl(
private fun renderMemberKind(callableMember: CallableMemberDescriptor, builder: StringBuilder) { private fun renderMemberKind(callableMember: CallableMemberDescriptor, builder: StringBuilder) {
if (DescriptorRendererModifier.MEMBER_KIND !in modifiers) return if (DescriptorRendererModifier.MEMBER_KIND !in modifiers) return
if (verbose && callableMember.kind != CallableMemberDescriptor.Kind.DECLARATION) { if (verbose && callableMember.kind != CallableMemberDescriptor.Kind.DECLARATION) {
builder.append("/*").append(callableMember.kind.name.toLowerCase()).append("*/ ") builder.append("/*").append(callableMember.kind.name.toLowerCaseAsciiOnly()).append("*/ ")
} }
} }
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.utils.collectDescriptorsFiltered import org.jetbrains.kotlin.resolve.scopes.utils.collectDescriptorsFiltered
import java.util.*
class KDocCompletionContributor : CompletionContributor() { class KDocCompletionContributor : CompletionContributor() {
init { init {
@@ -157,7 +158,7 @@ object KDocTagCompletionProvider : CompletionProvider<CompletionParameters>() {
val resultWithPrefix = result.withPrefixMatcher(prefix) val resultWithPrefix = result.withPrefixMatcher(prefix)
KDocKnownTag.values().forEach { KDocKnownTag.values().forEach {
if (kdocOwner == null || it.isApplicable(kdocOwner)) { if (kdocOwner == null || it.isApplicable(kdocOwner)) {
resultWithPrefix.addElement(LookupElementBuilder.create("@" + it.name.toLowerCase())) resultWithPrefix.addElement(LookupElementBuilder.create("@" + it.name.toLowerCase(Locale.US)))
} }
} }
} }
@@ -24,7 +24,6 @@ import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.psi.PsiClass import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
import com.intellij.psi.codeStyle.NameUtil import com.intellij.psi.codeStyle.NameUtil
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
@@ -69,7 +68,7 @@ class VariableOrParameterNameWithTypeCompletion(
prefixWords.indices.map { index -> if (index == 0) prefix else prefixWords.drop(index).joinToString("") } prefixWords.indices.map { index -> if (index == 0) prefix else prefixWords.drop(index).joinToString("") }
userPrefixes = nameSuggestionPrefixes.indices.map { prefixWords.take(it).joinToString("") } userPrefixes = nameSuggestionPrefixes.indices.map { prefixWords.take(it).joinToString("") }
classNamePrefixMatchers = nameSuggestionPrefixes.map { CamelHumpMatcher(it.capitalize(), false) } classNamePrefixMatchers = nameSuggestionPrefixes.map { CamelHumpMatcher(it.capitalize(Locale.US), false) }
} }
private val suggestionsByTypesAdded = HashSet<Type>() private val suggestionsByTypesAdded = HashSet<Type>()
@@ -281,4 +280,4 @@ class VariableOrParameterNameWithTypeCompletion(
object Weigher : LookupElementWeigher("kotlin.parameterNameAndTypePriority") { object Weigher : LookupElementWeigher("kotlin.parameterNameAndTypePriority") {
override fun weigh(element: LookupElement, context: WeighingContext): Int = element.getUserData(PRIORITY_KEY) ?: 0 override fun weigh(element: LookupElement, context: WeighingContext): Int = element.getUserData(PRIORITY_KEY) ?: 0
} }
} }
@@ -164,7 +164,7 @@ object KotlinNameSuggester {
val argText = typeArguments.joinToString(separator = "") { it.typeReference?.typeElement?.render() ?: "" } val argText = typeArguments.joinToString(separator = "") { it.typeReference?.typeElement?.render() ?: "" }
"$argText${referenceExpression?.text ?: ""}" "$argText${referenceExpression?.text ?: ""}"
} }
else -> text.capitalize() else -> text.capitalizeAsciiOnly()
} }
} }
@@ -13,6 +13,7 @@ import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.idea.caches.project.isMPPModule import org.jetbrains.kotlin.idea.caches.project.isMPPModule
import org.jetbrains.kotlin.idea.configuration.KotlinTargetData import org.jetbrains.kotlin.idea.configuration.KotlinTargetData
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil
import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.GradleConstants
@@ -57,6 +58,6 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider {
private fun getTaskNames(task: TaskData, namePrefix: String): List<String> { private fun getTaskNames(task: TaskData, namePrefix: String): List<String> {
val name = task.name val name = task.name
return listOf(namePrefix + CLEAN_NAME_PREFIX + name.capitalize(), namePrefix + name) return listOf(namePrefix + CLEAN_NAME_PREFIX + name.capitalizeAsciiOnly(), namePrefix + name)
} }
} }
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.config.ExternalSystemRunTask
import org.jetbrains.kotlin.config.ExternalSystemTestRunTask import org.jetbrains.kotlin.config.ExternalSystemTestRunTask
import org.jetbrains.kotlin.idea.facet.externalSystemTestRunTasks import org.jetbrains.kotlin.idea.facet.externalSystemTestRunTasks
import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.plugins.gradle.execution.test.runner.* import org.jetbrains.plugins.gradle.execution.test.runner.*
import org.jetbrains.plugins.gradle.util.TasksToRun import org.jetbrains.plugins.gradle.util.TasksToRun
import java.util.* import java.util.*
@@ -56,7 +57,7 @@ class MultiplatformTestTasksChooser : TestTasksChooser() {
return { it.targetName == targetName } return { it.targetName == targetName }
} }
val taskPrefix = targetName + parts[1].capitalize() val taskPrefix = targetName + parts[1].capitalizeAsciiOnly()
return { it.targetName == targetName && it.taskName.startsWith(taskPrefix) } return { it.targetName == targetName && it.taskName.startsWith(taskPrefix) }
} }
@@ -119,9 +120,9 @@ class MultiplatformTestTasksChooser : TestTasksChooser() {
} }
private fun getTaskNames(task: ExternalSystemRunTask): List<String> { private fun getTaskNames(task: ExternalSystemRunTask): List<String> {
return listOf("clean" + task.taskName.capitalize(), task.taskName) return listOf("clean" + task.taskName.capitalizeAsciiOnly(), task.taskName)
} }
} }
private val ExternalSystemRunTask.presentableName: String private val ExternalSystemRunTask.presentableName: String
get() = targetName ?: (":$taskName") get() = targetName ?: (":$taskName")
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.config.TestSourceKotlinRootType
import org.jetbrains.kotlin.idea.configuration.RepositoryDescription import org.jetbrains.kotlin.idea.configuration.RepositoryDescription
import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
import java.util.* import java.util.*
@@ -116,7 +117,7 @@ class PomFile private constructor(private val xmlFile: XmlFile, val domModel: Ma
dependency.classifier.stringValue = classifier dependency.classifier.stringValue = classifier
if (scope != null && scope != MavenArtifactScope.COMPILE) { if (scope != null && scope != MavenArtifactScope.COMPILE) {
dependency.scope.stringValue = scope.name.toLowerCase() dependency.scope.stringValue = scope.name.toLowerCaseAsciiOnly()
} }
if (optional) { if (optional) {
@@ -635,7 +636,8 @@ internal fun MavenDomDependencies.findDependencies(artifacts: List<MavenId>, sco
} }
private fun MavenDomDependency.matches(artifact: MavenId, scope: MavenArtifactScope?) = private fun MavenDomDependency.matches(artifact: MavenId, scope: MavenArtifactScope?) =
this.matches(artifact) && (this.scope.stringValue == scope?.name?.toLowerCase() || scope == null && this.scope.stringValue == "compile") this.matches(artifact) &&
(this.scope.stringValue == scope?.name?.toLowerCaseAsciiOnly() || scope == null && this.scope.stringValue == "compile")
private fun MavenDomArtifactCoordinates.matches(artifact: MavenId) = private fun MavenDomArtifactCoordinates.matches(artifact: MavenId) =
(artifact.groupId == null || groupId.stringValue == artifact.groupId) (artifact.groupId == null || groupId.stringValue == artifact.groupId)
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep.FirstWizardS
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.runWithProgressBar
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.SecondStepWizardComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep.SecondStepWizardComponent
import java.io.File import java.io.File
import java.util.*
import javax.swing.JButton import javax.swing.JButton
import javax.swing.JComponent import javax.swing.JComponent
import com.intellij.openapi.module.Module as IdeaModule import com.intellij.openapi.module.Module as IdeaModule
@@ -217,7 +218,7 @@ class ModuleNewWizardFirstStep(wizard: IdeWizard) : WizardStep(wizard, Generatio
private fun suggestGroupId(): String { private fun suggestGroupId(): String {
val username = SystemProperties.getUserName() ?: return DEFAULT_GROUP_ID val username = SystemProperties.getUserName() ?: return DEFAULT_GROUP_ID
if (!username.matches("[\\w\\s]+".toRegex())) return DEFAULT_GROUP_ID if (!username.matches("[\\w\\s]+".toRegex())) return DEFAULT_GROUP_ID
val usernameAsGroupId = username.trim().toLowerCase().split("\\s+".toRegex()).joinToString(separator = ".") val usernameAsGroupId = username.trim().toLowerCase(Locale.US).split("\\s+".toRegex()).joinToString(separator = ".")
return "me.$usernameAsGroupId" return "me.$usernameAsGroupId"
} }
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.util.*
import javax.swing.JComponent import javax.swing.JComponent
class ModulesEditorToolbarDecorator( class ModulesEditorToolbarDecorator(
@@ -72,7 +73,7 @@ class ModulesEditorToolbarDecorator(
null -> "" null -> ""
} }
text = KotlinNewProjectWizardUIBundle.message("editor.modules.add", moduleKindTextToAdd.capitalize()) text = KotlinNewProjectWizardUIBundle.message("editor.modules.add", moduleKindTextToAdd.capitalize(Locale.US))
} }
event.presentation.isEnabled event.presentation.isEnabled
} }
@@ -103,7 +104,7 @@ class ModulesEditorToolbarDecorator(
isEnabled = tree.selectedSettingItem is Module isEnabled = tree.selectedSettingItem is Module
text = KotlinNewProjectWizardUIBundle.message( text = KotlinNewProjectWizardUIBundle.message(
"editor.modules.remove.tooltip", "editor.modules.remove.tooltip",
selectedModuleKindText?.let { " ${it.capitalize()}" }.orEmpty() selectedModuleKindText?.let { " ${it.capitalize(Locale.US)}" }.orEmpty()
) )
} }
event.presentation.isEnabled event.presentation.isEnabled
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.varargParameterPosition import org.jetbrains.kotlin.resolve.descriptorUtil.varargParameterPosition
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.keysToMap import org.jetbrains.kotlin.utils.keysToMap
import kotlin.jvm.internal.FunctionBase import kotlin.jvm.internal.FunctionBase
@@ -172,7 +173,7 @@ abstract class FileRankingCalculator(private val checkClassFqName: Boolean = tru
return -MAJOR return -MAJOR
// boolean is // boolean is
return if (methodName.drop(3) == propertyName.capitalize()) MAJOR else -NORMAL return if (methodName.drop(3) == propertyName.capitalizeAsciiOnly()) MAJOR else -NORMAL
} }
private fun rankingForVisibility(descriptor: DeclarationDescriptorWithVisibility, accessible: Accessible): Ranking { private fun rankingForVisibility(descriptor: DeclarationDescriptorWithVisibility, accessible: Accessible): Ranking {
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR import org.jetbrains.kotlin.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR
import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
class RecursivePropertyAccessorInspection : AbstractKotlinInspection() { class RecursivePropertyAccessorInspection : AbstractKotlinInspection() {
@@ -98,7 +99,7 @@ class RecursivePropertyAccessorInspection : AbstractKotlinInspection() {
if (element !is KtSimpleNameExpression) return false if (element !is KtSimpleNameExpression) return false
val namedFunction = element.getParentOfType<KtDeclarationWithBody>(true) as? KtNamedFunction ?: return false val namedFunction = element.getParentOfType<KtDeclarationWithBody>(true) as? KtNamedFunction ?: return false
val name = namedFunction.name ?: return false val name = namedFunction.name ?: return false
val referencedName = element.text.capitalize() val referencedName = element.text.capitalizeAsciiOnly()
val isGetter = name == "get$referencedName" val isGetter = name == "get$referencedName"
val isSetter = name == "set$referencedName" val isSetter = name == "set$referencedName"
if (!isGetter && !isSetter) return false if (!isGetter && !isSetter) return false
@@ -117,4 +118,4 @@ class RecursivePropertyAccessorInspection : AbstractKotlinInspection() {
return (context[REFERENCE_TARGET, receiver] as? ClassDescriptor)?.kind == ClassKind.OBJECT return (context[REFERENCE_TARGET, receiver] as? ClassDescriptor)?.kind == ClassKind.OBJECT
} }
} }
} }
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.psi.createExpressionByPattern
import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import java.util.*
class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : KotlinQuickFixAction<KtExpression>(expression) { class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : KotlinQuickFixAction<KtExpression>(expression) {
@@ -22,7 +23,7 @@ class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : Ko
"arrayOf" "arrayOf"
} else { } else {
val typeName = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(expectedType) val typeName = DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(expectedType)
"${typeName.decapitalize()}Of" "${typeName.decapitalize(Locale.US)}Of"
} }
@@ -34,4 +35,4 @@ class AddArrayOfTypeFix(expression: KtExpression, expectedType: KotlinType) : Ko
val arrayOfExpression = KtPsiFactory(project).createExpressionByPattern("$0($1)", prefix, element) val arrayOfExpression = KtPsiFactory(project).createExpressionByPattern("$0($1)", prefix, element)
element.replace(arrayOfExpression) element.replace(arrayOfExpression)
} }
} }
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.cfg.pseudocodeTraverser.traverseFollowingInstruction
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
@@ -34,7 +35,6 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator
import org.jetbrains.kotlin.idea.core.compareDescriptors import org.jetbrains.kotlin.idea.core.compareDescriptors
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.refactoring.createTempCopy import org.jetbrains.kotlin.idea.refactoring.createTempCopy
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.ErrorMessage import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.ErrorMessage
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.Status import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.Status
@@ -56,6 +56,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny
import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.typeUtil.makeNullable import org.jetbrains.kotlin.types.typeUtil.makeNullable
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.DFS.* import org.jetbrains.kotlin.utils.DFS.*
import java.util.* import java.util.*
@@ -736,7 +737,7 @@ private fun ExtractionData.suggestFunctionNames(returnType: KotlinType): List<St
expressions.singleOrNull()?.let { expr -> expressions.singleOrNull()?.let { expr ->
val property = expr.getStrictParentOfType<KtProperty>() val property = expr.getStrictParentOfType<KtProperty>()
if (property?.initializer == expr) { if (property?.initializer == expr) {
property.name?.let { functionNames.add(KotlinNameSuggester.suggestNameByName("get" + it.capitalize(), validator)) } property.name?.let { functionNames.add(KotlinNameSuggester.suggestNameByName("get" + it.capitalizeAsciiOnly(), validator)) }
} }
} }
@@ -834,4 +835,4 @@ fun ExtractableCodeDescriptor.validate(target: ExtractionTarget = ExtractionTarg
) )
return ExtractableCodeDescriptorWithConflicts(this, conflicts) return ExtractableCodeDescriptorWithConflicts(this, conflicts)
} }
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.descriptorUtil.isAncestorOf import org.jetbrains.kotlin.resolve.descriptorUtil.isAncestorOf
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.util.containingNonLocalDeclaration import org.jetbrains.kotlin.util.containingNonLocalDeclaration
class MoveKotlinMethodProcessor( class MoveKotlinMethodProcessor(
@@ -197,7 +198,7 @@ class MoveKotlinMethodProcessor(
argumentExpression argumentExpression
} else return } else return
} else { } else {
val getterName = "get${targetVariable.nameAsSafeName.identifier.capitalize()}" val getterName = "get${targetVariable.nameAsSafeName.identifier.capitalizeAsciiOnly()}"
JavaPsiFacade.getElementFactory(myProject).createExpressionFromText("${oldReceiver.text}.$getterName()", null) JavaPsiFacade.getElementFactory(myProject).createExpressionFromText("${oldReceiver.text}.$getterName()", null)
} }
@@ -57,6 +57,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
import org.jetbrains.kotlin.types.expressions.DoubleColonLHS import org.jetbrains.kotlin.types.expressions.DoubleColonLHS
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import java.io.File import java.io.File
import java.lang.System.currentTimeMillis import java.lang.System.currentTimeMillis
@@ -407,7 +408,7 @@ fun guessNewFileName(declarationsToMove: Collection<KtNamedDeclaration>): String
val newFileName = representative?.run { val newFileName = representative?.run {
if (containingKtFile.isScript()) "$name.kts" else "$name.${KotlinFileType.EXTENSION}" if (containingKtFile.isScript()) "$name.kts" else "$name.${KotlinFileType.EXTENSION}"
} ?: declarationsToMove.first().containingFile.name } ?: declarationsToMove.first().containingFile.name
return newFileName.capitalize() return newFileName.capitalizeAsciiOnly()
} }
// returns true if successful // returns true if successful
@@ -22,6 +22,7 @@ import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.j2k.CodeBuilder import org.jetbrains.kotlin.j2k.CodeBuilder
import org.jetbrains.kotlin.j2k.append import org.jetbrains.kotlin.j2k.append
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import java.util.*
class ArrayAccessExpression(val expression: Expression, val index: Expression, val lvalue: Boolean) : Expression() { class ArrayAccessExpression(val expression: Expression, val index: Expression, val lvalue: Boolean) : Expression() {
override fun generateCode(builder: CodeBuilder) { override fun generateCode(builder: CodeBuilder) {
@@ -294,7 +295,7 @@ class ClassLiteralExpression(val type: Type): Expression() {
fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List<Expression>, needExplicitType: Boolean = true) : MethodCallExpression { fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List<Expression>, needExplicitType: Boolean = true) : MethodCallExpression {
val elementType = arrayType.elementType val elementType = arrayType.elementType
val createArrayFunction = when { val createArrayFunction = when {
elementType is PrimitiveType -> (elementType.toNotNullType().canonicalCode() + "ArrayOf").decapitalize() elementType is PrimitiveType -> (elementType.toNotNullType().canonicalCode() + "ArrayOf").decapitalize(Locale.US)
needExplicitType -> "arrayOf<" + arrayType.elementType.canonicalCode() + ">" needExplicitType -> "arrayOf<" + arrayType.elementType.canonicalCode() + ">"
else -> "arrayOf" else -> "arrayOf"
} }
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.j2k.AccessorKind
import org.jetbrains.kotlin.j2k.CodeConverter import org.jetbrains.kotlin.j2k.CodeConverter
import org.jetbrains.kotlin.j2k.ast.* import org.jetbrains.kotlin.j2k.ast.*
import org.jetbrains.kotlin.j2k.dot import org.jetbrains.kotlin.j2k.dot
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
class FieldToPropertyProcessing( class FieldToPropertyProcessing(
private val field: PsiField, private val field: PsiField,
@@ -167,5 +168,5 @@ class UseAccessorsJavaCodeProcessor(private val factory: PsiElementFactory, priv
} }
private fun accessorName(kind: AccessorKind) = private fun accessorName(kind: AccessorKind) =
(if (kind == AccessorKind.GETTER) "get" else "set") + propertyName.capitalize() (if (kind == AccessorKind.GETTER) "get" else "set") + propertyName.capitalizeAsciiOnly()
} }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.js.backend.ast.*
import org.jetbrains.kotlin.js.backend.ast.metadata.SpecialFunction import org.jetbrains.kotlin.js.backend.ast.metadata.SpecialFunction
import org.jetbrains.kotlin.js.backend.ast.metadata.specialFunction import org.jetbrains.kotlin.js.backend.ast.metadata.specialFunction
import org.jetbrains.kotlin.js.dce.Context.Node import org.jetbrains.kotlin.js.dce.Context.Node
import java.util.*
fun Context.isObjectDefineProperty(function: JsExpression) = isObjectFunction(function, "defineProperty") fun Context.isObjectDefineProperty(function: JsExpression) = isObjectFunction(function, "defineProperty")
@@ -46,7 +47,7 @@ fun Context.isObjectFunction(function: JsExpression, functionName: String): Bool
fun Context.isKotlinFunction(function: JsExpression, name: String): Boolean { fun Context.isKotlinFunction(function: JsExpression, name: String): Boolean {
if (function !is JsNameRef || function.ident != name) return false if (function !is JsNameRef || function.ident != name) return false
val receiver = (function.qualifier as? JsNameRef)?.name ?: return false val receiver = (function.qualifier as? JsNameRef)?.name ?: return false
return receiver in nodes && receiver.ident.toLowerCase() == "kotlin" return receiver in nodes && receiver.ident.toLowerCase(Locale.US) == "kotlin"
} }
fun isSpecialFunction(expr: JsExpression, specialFunction: SpecialFunction): Boolean = fun isSpecialFunction(expr: JsExpression, specialFunction: SpecialFunction): Boolean =
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.js.config package org.jetbrains.kotlin.js.config
import java.util.*
enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanticErrors: Boolean) { enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanticErrors: Boolean) {
NONE(false, false), NONE(false, false),
SEMANTIC(false, true), SEMANTIC(false, true),
@@ -16,7 +18,7 @@ enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanti
val DEFAULT = NONE val DEFAULT = NONE
fun resolvePolicy(key: String): ErrorTolerancePolicy { fun resolvePolicy(key: String): ErrorTolerancePolicy {
return when (key.toUpperCase()) { return when (key.toUpperCase(Locale.US)) {
"NONE" -> NONE "NONE" -> NONE
"SEMANTIC" -> SEMANTIC "SEMANTIC" -> SEMANTIC
"SYNTAX", "ALL" -> ALL "SYNTAX", "ALL" -> ALL
@@ -24,4 +26,4 @@ enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanti
} }
} }
} }
} }
@@ -109,7 +109,7 @@ object ArrayFIF : CompositeFIF() {
} }
private val PrimitiveType.lowerCaseName private val PrimitiveType.lowerCaseName
get() = typeName.asString().toLowerCase() get() = typeName.asString().toLowerCase(Locale.US)
fun getTag(descriptor: CallableDescriptor, config: JsConfig): String? { fun getTag(descriptor: CallableDescriptor, config: JsConfig): String? {
if (descriptor !is ConstructorDescriptor) return null if (descriptor !is ConstructorDescriptor) return null
@@ -39,7 +39,7 @@ class Directories(
// compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt // compiler/daemon/daemon-common/src/org/jetbrains/kotlin/daemon/common/FileSystemUtils.kt
// which in turn is based on: http://www.code4copy.com/java/post/detecting-os-type-in-java // which in turn is based on: http://www.code4copy.com/java/post/detecting-os-type-in-java
private val os: OSKind private val os: OSKind
get() = getProperty("os.name")?.toLowerCase().let { name -> get() = getProperty("os.name")?.toLowerCase(Locale.US).let { name ->
when { when {
name == null -> OSKind.Unknown name == null -> OSKind.Unknown
name.startsWith("windows") -> OSKind.Windows name.startsWith("windows") -> OSKind.Windows
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.kotlinp
import kotlinx.metadata.* import kotlinx.metadata.*
import kotlinx.metadata.jvm.* import kotlinx.metadata.jvm.*
import java.util.*
private object SpecialCharacters { private object SpecialCharacters {
const val TYPE_ALIAS_MARKER = '^' const val TYPE_ALIAS_MARKER = '^'
@@ -309,7 +310,7 @@ private fun printType(flags: Flags, output: (String) -> Unit): KmTypeVisitor =
printType(flags) { argumentTypeString -> printType(flags) { argumentTypeString ->
arguments += buildString { arguments += buildString {
if (variance != KmVariance.INVARIANT) { if (variance != KmVariance.INVARIANT) {
append(variance.name.toLowerCase()).append(" ") append(variance.name.toLowerCase(Locale.US)).append(" ")
} }
append(argumentTypeString) append(argumentTypeString)
} }
@@ -399,7 +400,7 @@ private fun printTypeParameter(
append("@").append(renderAnnotation(annotation)).append(" ") append("@").append(renderAnnotation(annotation)).append(" ")
} }
if (variance != KmVariance.INVARIANT) { if (variance != KmVariance.INVARIANT) {
append(variance.name.toLowerCase()).append(" ") append(variance.name.toLowerCase(Locale.US)).append(" ")
} }
append("T#$id") append("T#$id")
if (settings.isVerbose) { if (settings.isVerbose) {
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Sourceset
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
import java.nio.file.Path import java.nio.file.Path
import java.util.*
sealed class SourcesetIR : BuildSystemIR { sealed class SourcesetIR : BuildSystemIR {
@@ -55,4 +56,4 @@ data class MultiplatformSourcesetIR(
} }
val MultiplatformSourcesetIR.sourcesetName val MultiplatformSourcesetIR.sourcesetName
get() = targetName + sourcesetType.name.capitalize() get() = targetName + sourcesetType.name.capitalize(Locale.US)
@@ -4,8 +4,6 @@ import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.core.Reader import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.NonDefaultTargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.NonDefaultTargetConfigurationIR
@@ -13,6 +11,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.* import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import java.util.*
interface NativeTargetConfigurator : TargetConfigurator { interface NativeTargetConfigurator : TargetConfigurator {
val isDesktopTarget: Boolean val isDesktopTarget: Boolean
@@ -22,7 +21,7 @@ interface NativeTargetConfigurator : TargetConfigurator {
class RealNativeTargetConfigurator private constructor( class RealNativeTargetConfigurator private constructor(
override val moduleSubType: ModuleSubType override val moduleSubType: ModuleSubType
) : NativeTargetConfigurator, SimpleTargetConfigurator { ) : NativeTargetConfigurator, SimpleTargetConfigurator {
override val text: String = moduleSubType.name.capitalize() override val text: String = moduleSubType.name.capitalize(Locale.US)
override val isDesktopTarget: Boolean override val isDesktopTarget: Boolean
get() = moduleSubType.isNativeDesktop get() = moduleSubType.isNativeDesktop
@@ -7,12 +7,9 @@ package org.jetbrains.kotlin.tools.projectWizard.mpp
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.SimpleTargetConfigurator import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.SimpleTargetConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfModuleConfigurator
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage
@@ -22,6 +19,7 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.FileDescriptor
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTextDescriptor import org.jetbrains.kotlin.tools.projectWizard.templates.FileTextDescriptor
import java.nio.file.Path import java.nio.file.Path
import java.util.*
@DslMarker @DslMarker
annotation class ExpectFileDSL annotation class ExpectFileDSL
@@ -321,7 +319,7 @@ private fun pathForFileInTarget(
sourcesetType: SourcesetType, sourcesetType: SourcesetType,
) = mppModulePath / ) = mppModulePath /
Defaults.SRC_DIR / Defaults.SRC_DIR /
"${target.name}${sourcesetType.name.capitalize()}" / "${target.name}${sourcesetType.name.capitalize(Locale.US)}" /
mppModule.configurator.kotlinDirectoryName / mppModule.configurator.kotlinDirectoryName /
javaPackage?.asPath() / javaPackage?.asPath() /
filename filename
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import java.nio.file.Path import java.nio.file.Path
import java.util.*
data class ModulesToIrConversionData( data class ModulesToIrConversionData(
val rootModules: List<Module>, val rootModules: List<Module>,
@@ -265,7 +266,7 @@ class ModulesToIRsConverter(
val (moduleDependencies) = createModuleDependencies(target) val (moduleDependencies) = createModuleDependencies(target)
mutateProjectStructureByModuleConfigurator(target, modulePath) mutateProjectStructureByModuleConfigurator(target, modulePath)
val sourcesetss = target.sourcesets.map { sourceset -> val sourcesetss = target.sourcesets.map { sourceset ->
val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize() val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize(Locale.US)
MultiplatformSourcesetIR( MultiplatformSourcesetIR(
sourceset.sourcesetType, sourceset.sourcesetType,
modulePath / Defaults.SRC_DIR / sourcesetName, modulePath / Defaults.SRC_DIR / sourcesetName,
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetti
import org.jetbrains.kotlin.tools.projectWizard.core.service.TemplateEngineService import org.jetbrains.kotlin.tools.projectWizard.core.service.TemplateEngineService
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfiguratorWithTests import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfiguratorWithTests
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.MppModuleConfigurator.runArbitraryTask
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.isPresent import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.isPresent
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.settingValue
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.*
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptionApplicationState import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptionApplicationState
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.applyAll import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.applyAll
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.settingValue
import java.nio.file.Path import java.nio.file.Path
import java.util.*
class TemplatesPlugin(context: Context) : Plugin(context) { class TemplatesPlugin(context: Context) : Plugin(context) {
override val path = pluginPath override val path = pluginPath
@@ -174,7 +174,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
is SrcFilePath -> moduleConfigurator.kotlinDirectoryName is SrcFilePath -> moduleConfigurator.kotlinDirectoryName
is ResourcesFilePath -> moduleConfigurator.resourcesDirectoryName is ResourcesFilePath -> moduleConfigurator.resourcesDirectoryName
} }
SRC_DIR / "${module.name}${filePath.sourcesetType.name.capitalize()}" / directory SRC_DIR / "${module.name}${filePath.sourcesetType.name.capitalize(Locale.US)}" / directory
} }
is FakeMultiplatformModuleIR -> error("Not supported for FakeMultiplatformModuleIR") is FakeMultiplatformModuleIR -> error("Not supported for FakeMultiplatformModuleIR")
} }
@@ -193,4 +193,4 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
templates, templates,
fileTemplatesToRender fileTemplatesToRender
) )
} }
@@ -7,6 +7,11 @@ package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.Writer import org.jetbrains.kotlin.tools.projectWizard.core.Writer
import org.jetbrains.kotlin.tools.projectWizard.core.asPath import org.jetbrains.kotlin.tools.projectWizard.core.asPath
import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.core.buildList
@@ -15,20 +20,19 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.addWithJavaIntoJvmTarget import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.addWithJavaIntoJvmTarget
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
import java.util.*
class KtorServerTemplate : Template() { class KtorServerTemplate : Template() {
override val title: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.title") override val title: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.title")
@@ -110,5 +114,5 @@ enum class KtorServerEngine(val engineName: String, val dependencyName: String)
get() = engineName.capitalize() get() = engineName.capitalize()
val import: String val import: String
get() = "io.ktor.server.${engineName.decapitalize()}.${engineName.capitalize()}" get() = "io.ktor.server.${engineName.decapitalize(Locale.US)}.${engineName.capitalize(Locale.US)}"
} }
@@ -1,12 +1,14 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.tools.projectWizard.templates package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.Identificator
import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.*
import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
@@ -14,8 +16,6 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatf
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.RunConfigurationsPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.RunConfigurationsPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor
import java.nio.file.Path import java.nio.file.Path
import java.util.*
import kotlin.properties.ReadOnlyProperty import kotlin.properties.ReadOnlyProperty
interface TemplateEnvironment { interface TemplateEnvironment {
@@ -163,7 +164,7 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor, DisplayableSet
private fun Reader.createDefaultSettings() = mapOf( private fun Reader.createDefaultSettings() = mapOf(
"projectName" to StructurePlugin.name.settingValue.capitalize() "projectName" to StructurePlugin.name.settingValue.capitalize(Locale.US)
) )
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
@@ -331,4 +332,4 @@ operator fun TemplateApplicationResult.plus(other: TemplateApplicationResult) =
irsToAddToBuildFile + other.irsToAddToBuildFile, irsToAddToBuildFile + other.irsToAddToBuildFile,
updateTarget andThen other.updateTarget, updateTarget andThen other.updateTarget,
updateModuleIR andThen other.updateModuleIR, updateModuleIR andThen other.updateModuleIR,
) )
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.konan.target package org.jetbrains.kotlin.konan.target
import java.util.*
/** /**
* Name of a preset used in the 'kotlin-multiplatform' Gradle plugin to represent this target. * Name of a preset used in the 'kotlin-multiplatform' Gradle plugin to represent this target.
*/ */
@@ -19,5 +21,5 @@ val KonanTarget.presetName: String
private fun evaluatePresetName(targetName: String): String { private fun evaluatePresetName(targetName: String): String {
val nameParts = targetName.split('_').mapNotNull { it.takeIf(String::isNotEmpty) } val nameParts = targetName.split('_').mapNotNull { it.takeIf(String::isNotEmpty) }
return nameParts.asSequence().drop(1).joinToString("", nameParts.firstOrNull().orEmpty(), transform = String::capitalize) return nameParts.asSequence().drop(1).joinToString("", nameParts.firstOrNull().orEmpty()) { it.capitalize(Locale.US) }
} }
@@ -52,6 +52,7 @@ import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.isError
import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.types.typeUtil.isUnit
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
import org.jetbrains.kotlin.util.isJavaDescriptor import org.jetbrains.kotlin.util.isJavaDescriptor
import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
@@ -369,7 +370,7 @@ private class ConvertGettersAndSettersToPropertyStatefulProcessing(
return declarations return declarations
.asSequence() .asSequence()
.mapNotNull { it.asPropertyAccessor() } .mapNotNull { it.asPropertyAccessor() }
.groupBy { it.name.removePrefix("is").decapitalize() } .groupBy { it.name.removePrefix("is").decapitalizeAsciiOnly() }
.values .values
.mapNotNull { group -> .mapNotNull { group ->
val realGetter = group.firstIsInstanceOrNull<RealGetter>() val realGetter = group.firstIsInstanceOrNull<RealGetter>()
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.nj2k.tree.JKLambdaExpression
import org.jetbrains.kotlin.nj2k.tree.JKParameter import org.jetbrains.kotlin.nj2k.tree.JKParameter
import org.jetbrains.kotlin.nj2k.tree.JKTreeRoot import org.jetbrains.kotlin.nj2k.tree.JKTreeRoot
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.util.*
object ConversionsRunner { object ConversionsRunner {
private fun createConversions(context: NewJ2kConverterContext) = listOf( private fun createConversions(context: NewJ2kConverterContext) = listOf(
@@ -105,7 +106,7 @@ object ConversionsRunner {
private fun Conversion.description(): String { private fun Conversion.description(): String {
val conversionName = this::class.simpleName val conversionName = this::class.simpleName
val words = conversionName?.let { wordRegex.findAll(conversionName).map { it.value.decapitalize() }.toList() } val words = conversionName?.let { wordRegex.findAll(conversionName).map { it.value.decapitalize(Locale.US) }.toList() }
return when { return when {
conversionName == null -> "Converting..." conversionName == null -> "Converting..."
conversionName.endsWith("Conversion") -> "Converting ${words!!.dropLast(1).joinToString(" ")}" conversionName.endsWith("Conversion") -> "Converting ${words!!.dropLast(1).joinToString(" ")}"
@@ -114,4 +115,4 @@ object ConversionsRunner {
} }
private val wordRegex = "[A-Z][a-z0-9]+".toRegex() private val wordRegex = "[A-Z][a-z0-9]+".toRegex()
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.types.primitiveTypes import org.jetbrains.kotlin.nj2k.types.primitiveTypes
import java.util.*
class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) { class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
override fun applyToElement(element: JKTreeElement): JKTreeElement { override fun applyToElement(element: JKTreeElement): JKTreeElement {
@@ -40,7 +40,7 @@ class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : Recursive
if (operationType !in primitiveTypeNames) return null if (operationType !in primitiveTypeNames) return null
return JKCallExpressionImpl( return JKCallExpressionImpl(
symbolProvider.provideMethodSymbol( symbolProvider.provideMethodSymbol(
"kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}" "kotlin.${primitiveTypeName.capitalize(Locale.US)}.to${operationType.capitalize(Locale.US)}"
), ),
JKArgumentList() JKArgumentList()
).withFormattingFrom(methodCallExpression) ).withFormattingFrom(methodCallExpression)
@@ -59,4 +59,4 @@ class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : Recursive
private val primitiveTypeUnwrapRegexp = private val primitiveTypeUnwrapRegexp =
"""([\w.]+)\.(\w+)Value""".toRegex() """([\w.]+)\.(\w+)Value""".toRegex()
} }
} }
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.nj2k.types.*
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.util.*
class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) { class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
override fun applyToElement(element: JKTreeElement): JKTreeElement { override fun applyToElement(element: JKTreeElement): JKTreeElement {
@@ -138,8 +139,8 @@ class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplic
} }
} }
val initialTypeName = expressionTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize() val initialTypeName = expressionTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize(Locale.US)
val conversionFunctionName = "to${toTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize()}" val conversionFunctionName = "to${toTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize(Locale.US)}"
return JKQualifiedExpression( return JKQualifiedExpression(
copyTreeAndDetach().parenthesizeIfBinaryExpression(), copyTreeAndDetach().parenthesizeIfBinaryExpression(),
JKCallExpressionImpl( JKCallExpressionImpl(
@@ -164,4 +165,4 @@ class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplic
val lastArrayType = realParameterTypes.lastOrNull()?.arrayInnerType() ?: return realParameterTypes val lastArrayType = realParameterTypes.lastOrNull()?.arrayInnerType() ?: return realParameterTypes
return realParameterTypes.subList(0, realParameterTypes.lastIndex) + lastArrayType return realParameterTypes.subList(0, realParameterTypes.lastIndex) + lastArrayType
} }
} }
+4 -3
View File
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k
import org.jetbrains.kotlin.lexer.KtKeywordToken import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
fun <T> List<T>.replace(element: T, replacer: T): List<T> { fun <T> List<T>.replace(element: T, replacer: T): List<T> {
val mutableList = toMutableList() val mutableList = toMutableList()
@@ -22,14 +23,14 @@ fun String.asGetterName() =
?.takeIf { ?.takeIf {
it.isNotEmpty() && it.first().isUpperCase() it.isNotEmpty() && it.first().isUpperCase()
|| it.startsWith("is") && it.length > 2 && it[2].isUpperCase() || it.startsWith("is") && it.length > 2 && it[2].isUpperCase()
}?.decapitalize() }?.decapitalizeAsciiOnly()
?.escaped() ?.escaped()
fun String.asSetterName() = fun String.asSetterName() =
takeIf { JvmAbi.isSetterName(it) } takeIf { JvmAbi.isSetterName(it) }
?.removePrefix("set") ?.removePrefix("set")
?.takeIf { it.isNotEmpty() && it.first().isUpperCase() } ?.takeIf { it.isNotEmpty() && it.first().isUpperCase() }
?.decapitalize() ?.decapitalizeAsciiOnly()
?.escaped() ?.escaped()
fun String.isPossiblyGetterOrSetterName() = fun String.isPossiblyGetterOrSetterName() =
@@ -40,4 +41,4 @@ private val KEYWORDS = KtTokens.KEYWORDS.types.map { (it as KtKeywordToken).valu
fun String.escaped() = fun String.escaped() =
if (this in KEYWORDS || '$' in this) "`$this`" if (this in KEYWORDS || '$' in this) "`$this`"
else this else this
@@ -9,6 +9,7 @@ import com.sun.tools.javac.code.Symbol
import org.jetbrains.kotlin.kapt3.base.util.KaptLogger import org.jetbrains.kotlin.kapt3.base.util.KaptLogger
import java.io.File import java.io.File
import java.net.URI import java.net.URI
import java.util.*
import javax.annotation.processing.Filer import javax.annotation.processing.Filer
import javax.annotation.processing.ProcessingEnvironment import javax.annotation.processing.ProcessingEnvironment
import javax.annotation.processing.Processor import javax.annotation.processing.Processor
@@ -49,7 +50,7 @@ class IncrementalProcessor(private val processor: Processor, private val kind: D
if (fromOptions == null) { if (fromOptions == null) {
RuntimeProcType.NON_INCREMENTAL RuntimeProcType.NON_INCREMENTAL
} else { } else {
val declaredType = fromOptions.drop("org.gradle.annotation.processing.".length).toUpperCase() val declaredType = fromOptions.drop("org.gradle.annotation.processing.".length).toUpperCase(Locale.US)
if (ALLOWED_RUNTIME_TYPES.contains(declaredType)) { if (ALLOWED_RUNTIME_TYPES.contains(declaredType)) {
enumValueOf(declaredType) enumValueOf(declaredType)
} else { } else {
@@ -251,4 +252,4 @@ enum class RuntimeProcType(val isIncremental: Boolean) {
AGGREGATING(true), AGGREGATING(true),
ISOLATING(true), ISOLATING(true),
NON_INCREMENTAL(false), NON_INCREMENTAL(false),
} }
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.idea.configuration.GradleProjectImportHandler
import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
import java.io.File import java.io.File
import java.util.*
class KaptGradleProjectImportHandler : GradleProjectImportHandler { class KaptGradleProjectImportHandler : GradleProjectImportHandler {
override fun importBySourceSet(facet: KotlinFacet, sourceSetNode: DataNode<GradleSourceSetData>) { override fun importBySourceSet(facet: KotlinFacet, sourceSetNode: DataNode<GradleSourceSetData>) {
@@ -42,7 +43,7 @@ class KaptGradleProjectImportHandler : GradleProjectImportHandler {
private fun isKaptCompilerPluginPath(path: String): Boolean { private fun isKaptCompilerPluginPath(path: String): Boolean {
val lastIndexOfFile = path.lastIndexOfAny(charArrayOf('/', File.separatorChar)).takeIf { it >= 0 } ?: return false val lastIndexOfFile = path.lastIndexOfAny(charArrayOf('/', File.separatorChar)).takeIf { it >= 0 } ?: return false
val fileName = path.drop(lastIndexOfFile + 1).toLowerCase() val fileName = path.drop(lastIndexOfFile + 1).toLowerCase(Locale.US)
return fileName.matches("kotlin\\-annotation\\-processing(\\-gradle)?\\-[0-9].*\\.jar".toRegex()) return fileName.matches("kotlin\\-annotation\\-processing(\\-gradle)?\\-[0-9].*\\.jar".toRegex())
} }
} }