diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 0bcae7a0512..e29fdba5758 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -1069,9 +1069,13 @@ public class JavaDescriptorResolver { } - Set r = new HashSet(); - - for (GroupingValue members : map.values()) { + Set r = new HashSet(1); + + // we cannot have more then one property with given name even if java code + // has several fields, getters and setter of different types + if (map.size() == 1) { + GroupingValue members = map.values().iterator().next(); + boolean isFinal; if (members.setter == null && members.getter == null) { isFinal = false; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java index f8971e7aca3..ce430c6de7d 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolverHelper.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMember; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiParameter; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -113,6 +114,9 @@ class JavaDescriptorResolverHelper { // TODO: remove getJavaClass if (method.getName().startsWith(JvmAbi.GETTER_PREFIX)) { + String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.GETTER_PREFIX.length())); + NamedMembers members = getNamedMembers(propertyName); + // TODO: some java properties too if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { @@ -137,16 +141,22 @@ class JavaDescriptorResolverHelper { throw new IllegalStateException(); } - String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.GETTER_PREFIX.length())); - NamedMembers members = getNamedMembers(propertyName); - // TODO: what if returnType == null? TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType(), method.getPsiMethod()); members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, receiverType)); + } else if (!kotlin) { + if (method.getParameters().size() == 0) { + TypeSource propertyType = new TypeSource("", method.getReturnType(), method.getPsiMethod()); + members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, null)); + } } + } else if (method.getName().startsWith(JvmAbi.SETTER_PREFIX)) { + String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.SETTER_PREFIX.length())); + NamedMembers members = getNamedMembers(propertyName); + if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) { if (method.getParameters().size() == 0) { // TODO: report error properly @@ -173,10 +183,13 @@ class JavaDescriptorResolverHelper { PsiParameterWrapper propertyTypeParameter = method.getParameter(i); TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), propertyTypeParameter.getPsiParameter().getType(), propertyTypeParameter.getPsiParameter()); - String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.SETTER_PREFIX.length())); - NamedMembers members = getNamedMembers(propertyName); - members.addPropertyAccessor(new PropertyAccessorData(method, false, propertyType, receiverType)); + } else if (!kotlin) { + if (method.getParameters().size() == 1) { + PsiParameter psiParameter = method.getParameters().get(0).getPsiParameter(); + TypeSource propertyType = new TypeSource("", psiParameter.getType(), psiParameter); + members.addPropertyAccessor(new PropertyAccessorData(method, false, propertyType, null)); + } } } diff --git a/compiler/testData/readJavaBinaryClass/ClassDoesNotOverrideMethod.txt b/compiler/testData/readJavaBinaryClass/ClassDoesNotOverrideMethod.txt index 2388cc9b8c2..9f5eedde86f 100644 --- a/compiler/testData/readJavaBinaryClass/ClassDoesNotOverrideMethod.txt +++ b/compiler/testData/readJavaBinaryClass/ClassDoesNotOverrideMethod.txt @@ -24,4 +24,13 @@ abstract class test.ClassDoesNotOverrideMethod : java.util.Date { open override /*1*/ fun setYear(/*0*/ p0: jet.Int): jet.Tuple0 open override /*1*/ fun toGMTString(): jet.String? open override /*1*/ fun toLocaleString(): jet.String? + val day: jet.Int + val timezoneOffset: jet.Int + var date: jet.Int + var hours: jet.Int + var minutes: jet.Int + var month: jet.Int + var seconds: jet.Int + var time: jet.Long + var year: jet.Int } diff --git a/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.java b/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.java new file mode 100644 index 00000000000..4906b73e69c --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.java @@ -0,0 +1,6 @@ +package test; + +class DifferentGetterAndSetter { + void setSomething(String color) { } + int getSomething() { return 17; } +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.kt b/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.kt new file mode 100644 index 00000000000..308edbd4d83 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.kt @@ -0,0 +1,6 @@ +package test + +open class DifferentGetterAndSetter() { + open fun setSomething(p0: String?): Unit { } + open fun getSomething() = 17 +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.txt b/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.txt new file mode 100644 index 00000000000..d9c9120fc25 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/DifferentGetterAndSetter.txt @@ -0,0 +1,7 @@ +namespace test + +open class test.DifferentGetterAndSetter : jet.Any { + final /*constructor*/ fun (): test.DifferentGetterAndSetter + open fun getSomething(): jet.Int + open fun setSomething(/*0*/ p0: jet.String?): jet.Tuple0 +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.java b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.java new file mode 100644 index 00000000000..9cc328c8cbd --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.java @@ -0,0 +1,5 @@ +package test; + +class JavaBeanVal { + String getColor() { return ""; } +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.kt b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.kt new file mode 100644 index 00000000000..dbf5b93f564 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.kt @@ -0,0 +1,6 @@ +package test + +open class JavaBeanVal() { + open fun getColor(): String? = "" + val color: String? = "" +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.txt b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.txt new file mode 100644 index 00000000000..372e3dd4d00 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVal.txt @@ -0,0 +1,7 @@ +namespace test + +open class test.JavaBeanVal : jet.Any { + final /*constructor*/ fun (): test.JavaBeanVal + open fun getColor(): jet.String? + val color: jet.String? +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.java b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.java new file mode 100644 index 00000000000..09d1ce1e1db --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.java @@ -0,0 +1,6 @@ +package test; + +class JavaBeanVal { + String getColor() { return ""; } + void setColor(String string) { } +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.kt b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.kt new file mode 100644 index 00000000000..fa2bd5feb4b --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.kt @@ -0,0 +1,7 @@ +package test + +open class JavaBeanVal() { + open fun getColor(): String? = "" + open fun setColor(p0: String?): Unit { } + var color: String? = "" +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.txt b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.txt new file mode 100644 index 00000000000..5509c13812c --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVar.txt @@ -0,0 +1,8 @@ +namespace test + +open class test.JavaBeanVal : jet.Any { + final /*constructor*/ fun (): test.JavaBeanVal + open fun getColor(): jet.String? + open fun setColor(/*0*/ p0: jet.String?): jet.Tuple0 + var color: jet.String? +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.java b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.java new file mode 100644 index 00000000000..97537e85c8f --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.java @@ -0,0 +1,8 @@ +package test; + +import java.util.ArrayList; + +class JavaBeanVarOfGenericType

{ + ArrayList

getCharacters() { return null; } + void setCharacters(ArrayList

characters) { } +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.kt b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.kt new file mode 100644 index 00000000000..ed384b4b644 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.kt @@ -0,0 +1,9 @@ +package test + +import java.util.ArrayList + +open class JavaBeanVarOfGenericType { + open fun getCharacters(): ArrayList

? = null + open fun setCharacters(p0: ArrayList

?) { } + var characters: ArrayList

? = null +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.txt b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.txt new file mode 100644 index 00000000000..40b549d5a64 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/JavaBeanVarOfGenericType.txt @@ -0,0 +1,8 @@ +namespace test + +open class test.JavaBeanVarOfGenericType : jet.Any { + final /*constructor*/ fun (): test.JavaBeanVarOfGenericType + open fun getCharacters(): java.util.ArrayList? + open fun setCharacters(/*0*/ p0: java.util.ArrayList

?): jet.Tuple0 + var characters: java.util.ArrayList? +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.java b/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.java new file mode 100644 index 00000000000..38600a47e9a --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.java @@ -0,0 +1,6 @@ +package test; + +class TwoSetters { + void setSize(String size) { } + void setSize(int size) { } +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.kt b/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.kt new file mode 100644 index 00000000000..d217ea08cca --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.kt @@ -0,0 +1,6 @@ +package test + +open class TwoSetters() { + open fun setSize(p0: String?) { } + open fun setSize(p0: Int) { } +} diff --git a/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.txt b/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.txt new file mode 100644 index 00000000000..74fc3e7bb3f --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/javaBean/TwoSetters.txt @@ -0,0 +1,7 @@ +namespace test + +open class test.TwoSetters : jet.Any { + final /*constructor*/ fun (): test.TwoSetters + open fun setSize(/*0*/ p0: jet.Int): jet.Tuple0 + open fun setSize(/*0*/ p0: jet.String?): jet.Tuple0 +}