read java bean properties as kotlin properties

This commit is contained in:
Stepan Koltsov
2012-02-21 23:15:36 +04:00
parent cc8d263f9e
commit f83c5e0d83
18 changed files with 137 additions and 9 deletions
@@ -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;
@@ -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));
}
}
}