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>();
|
Set<VariableDescriptor> r = new HashSet<VariableDescriptor>(1);
|
||||||
|
|
||||||
for (GroupingValue members : map.values()) {
|
// 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;
|
boolean isFinal;
|
||||||
if (members.setter == null && members.getter == null) {
|
if (members.setter == null && members.getter == null) {
|
||||||
isFinal = false;
|
isFinal = false;
|
||||||
|
|||||||
+19
-6
@@ -20,6 +20,7 @@ import com.intellij.openapi.util.text.StringUtil;
|
|||||||
import com.intellij.psi.PsiField;
|
import com.intellij.psi.PsiField;
|
||||||
import com.intellij.psi.PsiMember;
|
import com.intellij.psi.PsiMember;
|
||||||
import com.intellij.psi.PsiMethod;
|
import com.intellij.psi.PsiMethod;
|
||||||
|
import com.intellij.psi.PsiParameter;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -113,6 +114,9 @@ class JavaDescriptorResolverHelper {
|
|||||||
// TODO: remove getJavaClass
|
// TODO: remove getJavaClass
|
||||||
if (method.getName().startsWith(JvmAbi.GETTER_PREFIX)) {
|
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
|
// TODO: some java properties too
|
||||||
if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
|
if (method.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
|
||||||
|
|
||||||
@@ -137,16 +141,22 @@ class JavaDescriptorResolverHelper {
|
|||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
|
||||||
String propertyName = StringUtil.decapitalize(method.getName().substring(JvmAbi.GETTER_PREFIX.length()));
|
|
||||||
NamedMembers members = getNamedMembers(propertyName);
|
|
||||||
|
|
||||||
// TODO: what if returnType == null?
|
// TODO: what if returnType == null?
|
||||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType(), method.getPsiMethod());
|
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), method.getReturnType(), method.getPsiMethod());
|
||||||
|
|
||||||
members.addPropertyAccessor(new PropertyAccessorData(method, true, propertyType, receiverType));
|
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)) {
|
} 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.getJetMethod().kind() == JvmStdlibNames.JET_METHOD_KIND_PROPERTY) {
|
||||||
if (method.getParameters().size() == 0) {
|
if (method.getParameters().size() == 0) {
|
||||||
// TODO: report error properly
|
// TODO: report error properly
|
||||||
@@ -173,10 +183,13 @@ class JavaDescriptorResolverHelper {
|
|||||||
PsiParameterWrapper propertyTypeParameter = method.getParameter(i);
|
PsiParameterWrapper propertyTypeParameter = method.getParameter(i);
|
||||||
TypeSource propertyType = new TypeSource(method.getJetMethod().propertyType(), propertyTypeParameter.getPsiParameter().getType(), propertyTypeParameter.getPsiParameter());
|
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));
|
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 setYear(/*0*/ p0: jet.Int): jet.Tuple0
|
||||||
open override /*1*/ fun toGMTString(): jet.String?
|
open override /*1*/ fun toGMTString(): jet.String?
|
||||||
open override /*1*/ fun toLocaleString(): 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