Synthetic properties made locale-independant too

This commit is contained in:
Valentin Kipyatkov
2015-09-28 21:59:21 +03:00
parent 069ce12604
commit 8f1a3043de
5 changed files with 98 additions and 16 deletions
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.typeUtil.isBoolean
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
import org.jetbrains.kotlin.types.typeUtil.isUnit
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeFirstWord
import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeSmart
import org.jetbrains.kotlin.utils.Printer
@@ -79,7 +80,7 @@ interface SyntheticJavaPropertyDescriptor : PropertyDescriptor {
}
if (!removePrefix) return methodName
val name = identifier.removePrefix(prefix).decapitalizeSmart()
val name = identifier.removePrefix(prefix).decapitalizeSmart(asciiOnly = true)
if (!Name.isValidIdentifier(name)) return null
return Name.identifier(name)
}
@@ -96,7 +97,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager) : JetScopeImp
val identifier = name.identifier
if (identifier.isEmpty()) return null
val firstChar = identifier[0]
if (!firstChar.isJavaIdentifierStart() || firstChar.isUpperCase()) return null
if (!firstChar.isJavaIdentifierStart() || firstChar in 'A'..'Z') return null
val memberScope = ownerClass.unsubstitutedMemberScope
val getMethod = possibleGetMethodNames(name)
@@ -221,8 +222,8 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager) : JetScopeImp
result.add(propertyName)
}
val capitalize1 = identifier.capitalize()
val capitalize2 = identifier.capitalizeFirstWord()
val capitalize1 = identifier.capitalizeAsciiOnly()
val capitalize2 = identifier.capitalizeFirstWord(asciiOnly = true)
result.add(Name.identifier("get" + capitalize1))
if (capitalize2 != capitalize1) {
result.add(Name.identifier("get" + capitalize2))
@@ -0,0 +1,22 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.КакоеТоСвойство = javaClass.КакоеТоСвойство + 1
javaClass.<!UNRESOLVED_REFERENCE!>какоеТоСвойство<!>
javaClass.КУ
javaClass.<!UNRESOLVED_REFERENCE!>ку<!>
}
// FILE: JavaClass.java
public class JavaClass {
public int getКакоеТоСвойство() {
return 0;
}
public void setКакоеТоСвойство(int value) {
}
public int getКУ() {
return 0;
}
}
@@ -0,0 +1,13 @@
package
public fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getКУ(): kotlin.Int
public open fun getКакоеТоСвойство(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setКакоеТоСвойство(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -15059,6 +15059,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("OnlyAscii.kt")
public void testOnlyAscii() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/syntheticExtensions/javaProperties/OnlyAscii.kt");
doTest(fileName);
}
@TestMetadata("OnlyPublic.kt")
public void testOnlyPublic() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/syntheticExtensions/javaProperties/OnlyPublic.kt");