From bf84878a73ee48a5930e0f7a5d8847f51269b485 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 15 Jun 2011 19:45:08 +0400 Subject: [PATCH 1/2] Assertion failure fixed --- .../org/jetbrains/jet/lang/psi/JetUnaryExpression.java | 1 + .../src/org/jetbrains/jet/lang/types/JetTypeInferrer.java | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java index 6e66ee62660..ca81e0d0735 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetUnaryExpression.java @@ -13,6 +13,7 @@ public abstract class JetUnaryExpression extends JetExpression { super(node); } + @Nullable @IfNotParsed public abstract JetExpression getBaseExpression(); @NotNull diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 8b7dc70e6c2..a7993719c22 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -1878,10 +1878,14 @@ public class JetTypeInferrer { @Override public void visitUnaryExpression(JetUnaryExpression expression) { + JetExpression baseExpression = expression.getBaseExpression(); + if (baseExpression == null) { + return; + } JetSimpleNameExpression operationSign = expression.getOperationSign(); if (JetTokens.LABELS.contains(operationSign.getReferencedNameElementType())) { // TODO : Some processing for the label? - result = getType(expression.getBaseExpression()); + result = getType(baseExpression); return; } IElementType operationType = operationSign.getReferencedNameElementType(); @@ -1890,7 +1894,7 @@ public class JetTypeInferrer { trace.getErrorHandler().genericError(operationSign.getNode(), "Unknown unary operation"); } else { - JetType receiverType = getType(scope, expression.getBaseExpression(), false); + JetType receiverType = getType(scope, baseExpression, false); if (receiverType != null) { FunctionDescriptor functionDescriptor = lookupFunction(scope, expression.getOperationSign(), name, receiverType, Collections.emptyList(), true); if (functionDescriptor != null) { From dcdb39a71683698ba84172071d316d66018810b9 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 15 Jun 2011 20:42:52 +0400 Subject: [PATCH 2/2] Parent scopes are shown in completion --- .../jetbrains/jet/lang/resolve/WritableScopeImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java b/idea/src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java index 7c813ebe042..637e6d84d19 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/WritableScopeImpl.java @@ -17,6 +17,7 @@ import java.util.*; public class WritableScopeImpl extends WritableScopeWithImports { private final Collection allDescriptors = Sets.newHashSet(); + private boolean allDescriptorsDone = false; @NotNull private final DeclarationDescriptor ownerDeclarationDescriptor; @@ -38,7 +39,6 @@ public class WritableScopeImpl extends WritableScopeWithImports { public WritableScopeImpl(@NotNull JetScope scope, @NotNull DeclarationDescriptor owner, @NotNull ErrorHandler errorHandler) { super(scope, errorHandler); this.ownerDeclarationDescriptor = owner; - this.allDescriptors.addAll(scope.getAllDescriptors()); } @NotNull @@ -57,7 +57,6 @@ public class WritableScopeImpl extends WritableScopeWithImports { @Override public void importScope(@NotNull JetScope imported) { - allDescriptors.addAll(imported.getAllDescriptors()); super.importScope(imported); } @@ -69,6 +68,13 @@ public class WritableScopeImpl extends WritableScopeWithImports { @Override public Collection getAllDescriptors() { + if (!allDescriptorsDone) { + allDescriptorsDone = true; + allDescriptors.addAll(getWorkerScope().getAllDescriptors()); + for (JetScope imported : getImports()) { + allDescriptors.addAll(imported.getAllDescriptors()); + } + } return allDescriptors; }