From 162f1a94b7e587c0316018b681dfaf5454433da6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 24 Mar 2011 15:36:52 +0300 Subject: [PATCH 1/5] Checks for non-readable properties --- .../org/jetbrains/jet/lang/types/JetTypeInferrer.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 63c6902b960..5961cc51a7a 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -335,6 +335,9 @@ public class JetTypeInferrer { if (property != null) { trace.recordReferenceResolution(expression, property); result = property.getOutType(); + if (result == null) { + semanticServices.getErrorHandler().genericError(expression.getNode(), "This property is not readable in this context"); + } return; } else { NamespaceDescriptor namespace = scope.getNamespace(referencedName); @@ -1036,9 +1039,11 @@ public class JetTypeInferrer { List argumentTypes = getTypes(scope, indexExpressions); if (argumentTypes == null) return; - FunctionDescriptor functionDescriptor = lookupFunction(scope, expression, "get", receiverType, argumentTypes, true); - if (functionDescriptor != null) { - result = functionDescriptor.getUnsubstitutedReturnType(); + if (receiverType != null) { + FunctionDescriptor functionDescriptor = lookupFunction(scope, expression, "get", receiverType, argumentTypes, true); + if (functionDescriptor != null) { + result = functionDescriptor.getUnsubstitutedReturnType(); + } } } From 090b843eb072f21cd284dadef3e80f26828f2a0a Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 24 Mar 2011 15:37:26 +0300 Subject: [PATCH 2/5] Fix for declaration resolve --- .../src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index 7bd3fd8f888..8c025bacbaa 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -114,6 +114,6 @@ public class BindingTraceContext extends BindingTrace implements BindingContext @Override public PsiElement getDeclarationPsiElement(DeclarationDescriptor descriptor) { - return descriptorToDeclarations.get(descriptor); + return descriptorToDeclarations.get(descriptor.getOriginal()); } } From 1c6dc190ff618f56d1e113d2b05e4daf69523796 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 24 Mar 2011 15:38:19 +0300 Subject: [PATCH 3/5] Granular type information for properties --- .../jetbrains/jet/resolve/DescriptorUtil.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java b/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java index f7c3c09bf75..a5cc88ee5ff 100644 --- a/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java +++ b/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java @@ -16,8 +16,27 @@ public class DescriptorUtil { new DeclarationDescriptorVisitor() { @Override public Void visitPropertyDescriptor(PropertyDescriptor descriptor, StringBuilder builder) { - JetType type = descriptor.getOutType(); - builder.append(renderName(descriptor)).append(" : ").append(type); + JetType outType = descriptor.getOutType(); + JetType inType = descriptor.getInType(); + String typeString = ""; + if (inType != null && outType != null) { + builder.append("var "); + if (inType.equals(outType)) { + typeString = outType.toString(); + } + else { + typeString = ""; + } + } + else if (outType != null) { + builder.append("val "); + typeString = outType.toString(); + } + else if (inType != null) { + builder.append(" "); + typeString = inType.toString(); + } + builder.append(renderName(descriptor)).append(" : ").append(typeString); return super.visitPropertyDescriptor(descriptor, builder); } From 2194e7c41963726bc133687cc64b655694e839c9 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 24 Mar 2011 15:43:25 +0300 Subject: [PATCH 4/5] Warning fixed --- idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java b/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java index a5cc88ee5ff..13329b1524c 100644 --- a/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java +++ b/idea/src/org/jetbrains/jet/resolve/DescriptorUtil.java @@ -9,6 +9,8 @@ import java.util.List; * @author abreslav */ public class DescriptorUtil { + private DescriptorUtil() {} + public static String renderPresentableText(DeclarationDescriptor declarationDescriptor) { if (declarationDescriptor == null) return ""; StringBuilder stringBuilder = new StringBuilder(); From 0262423d003e4ef4fc2a96e1c7acc03b815b9615 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 24 Mar 2011 17:46:12 +0300 Subject: [PATCH 5/5] java.lang.String becomes Jat's String when Java descriptors are converted --- .../jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java index b2b807fb9ea..d7f97270e0c 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java @@ -37,6 +37,10 @@ public class JavaTypeTransformer { return JetStandardClasses.getNullableAnyType(); } + if ("java.lang.String".equals(psiClass.getQualifiedName())) { + return standardLibrary.getNullableStringType(); + } + ClassDescriptor descriptor = resolver.resolveClass(psiClass); // TODO : arguments & raw types List arguments = Collections.emptyList(); // TODO