read java bean properties as kotlin properties
This commit is contained in:
+7
-3
@@ -1069,9 +1069,13 @@ public class JavaDescriptorResolver {
|
||||
}
|
||||
|
||||
|
||||
Set<VariableDescriptor> r = new HashSet<VariableDescriptor>();
|
||||
|
||||
for (GroupingValue members : map.values()) {
|
||||
Set<VariableDescriptor> r = new HashSet<VariableDescriptor>(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;
|
||||
|
||||
+19
-6
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package test;
|
||||
|
||||
class DifferentGetterAndSetter {
|
||||
void setSomething(String color) { }
|
||||
int getSomething() { return 17; }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
open class DifferentGetterAndSetter() {
|
||||
open fun setSomething(p0: String?): Unit { }
|
||||
open fun getSomething() = 17
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace test
|
||||
|
||||
open class test.DifferentGetterAndSetter : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.DifferentGetterAndSetter
|
||||
open fun getSomething(): jet.Int
|
||||
open fun setSomething(/*0*/ p0: jet.String?): jet.Tuple0
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package test;
|
||||
|
||||
class JavaBeanVal {
|
||||
String getColor() { return ""; }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
open class JavaBeanVal() {
|
||||
open fun getColor(): String? = ""
|
||||
val color: String? = ""
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace test
|
||||
|
||||
open class test.JavaBeanVal : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.JavaBeanVal
|
||||
open fun getColor(): jet.String?
|
||||
val color: jet.String?
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package test;
|
||||
|
||||
class JavaBeanVal {
|
||||
String getColor() { return ""; }
|
||||
void setColor(String string) { }
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package test
|
||||
|
||||
open class JavaBeanVal() {
|
||||
open fun getColor(): String? = ""
|
||||
open fun setColor(p0: String?): Unit { }
|
||||
var color: String? = ""
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace test
|
||||
|
||||
open class test.JavaBeanVal : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.JavaBeanVal
|
||||
open fun getColor(): jet.String?
|
||||
open fun setColor(/*0*/ p0: jet.String?): jet.Tuple0
|
||||
var color: jet.String?
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
class JavaBeanVarOfGenericType<P> {
|
||||
ArrayList<P> getCharacters() { return null; }
|
||||
void setCharacters(ArrayList<P> characters) { }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package test
|
||||
|
||||
import java.util.ArrayList
|
||||
|
||||
open class JavaBeanVarOfGenericType<erased P> {
|
||||
open fun getCharacters(): ArrayList<P>? = null
|
||||
open fun setCharacters(p0: ArrayList<P>?) { }
|
||||
var characters: ArrayList<P>? = null
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace test
|
||||
|
||||
open class test.JavaBeanVarOfGenericType</*0*/ P : jet.Any?> : jet.Any {
|
||||
final /*constructor*/ fun </*0*/ P : jet.Any?><init>(): test.JavaBeanVarOfGenericType</*0*/ P : jet.Any?>
|
||||
open fun getCharacters(): java.util.ArrayList</*0*/ P : jet.Any?>?
|
||||
open fun setCharacters(/*0*/ p0: java.util.ArrayList<P>?): jet.Tuple0
|
||||
var characters: java.util.ArrayList</*0*/ P : jet.Any?>?
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package test;
|
||||
|
||||
class TwoSetters {
|
||||
void setSize(String size) { }
|
||||
void setSize(int size) { }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package test
|
||||
|
||||
open class TwoSetters() {
|
||||
open fun setSize(p0: String?) { }
|
||||
open fun setSize(p0: Int) { }
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace test
|
||||
|
||||
open class test.TwoSetters : jet.Any {
|
||||
final /*constructor*/ fun <init>(): test.TwoSetters
|
||||
open fun setSize(/*0*/ p0: jet.Int): jet.Tuple0
|
||||
open fun setSize(/*0*/ p0: jet.String?): jet.Tuple0
|
||||
}
|
||||
Reference in New Issue
Block a user