diff --git a/idea/src/jet/Library.jet b/idea/src/jet/Library.jet index 960b26ce3fc..15b5d8f73a4 100644 --- a/idea/src/jet/Library.jet +++ b/idea/src/jet/Library.jet @@ -7,6 +7,8 @@ namespace typeinfo { } } +fun Any?.equals(other : Any?) : Boolean = this === other + class Iterator { fun next() : T diff --git a/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java b/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java index 9687851af75..0fa820c8637 100644 --- a/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java +++ b/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java @@ -5,14 +5,12 @@ import com.intellij.lang.ASTNode; import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.lang.annotation.Annotator; import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.MultiRangeReference; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.ErrorHandler; -import org.jetbrains.jet.lang.JetDiagnostic; import org.jetbrains.jet.lang.JetHighlighter; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.AnalyzingUtils; @@ -124,8 +122,8 @@ public class JetPsiChecker implements Annotator { } @Override - public void visitJetElement(JetElement elem) { - elem.acceptChildren(this); + public void visitJetElement(JetElement element) { + element.acceptChildren(this); } }); } diff --git a/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index da9f3dc0fbb..b75c78a4ddc 100644 --- a/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/idea/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -694,16 +694,16 @@ public class JetControlFlowProcessor { } @Override - public void visitJetElement(JetElement elem) { - throw new UnsupportedOperationException("[JetControlFlowProcessor] " + elem.toString()); + public void visitJetElement(JetElement element) { + throw new UnsupportedOperationException("[JetControlFlowProcessor] " + element.toString()); } }); } } @Override - public void visitJetElement(JetElement elem) { - throw new UnsupportedOperationException("[JetControlFlowProcessor] " + elem.toString()); + public void visitJetElement(JetElement element) { + throw new UnsupportedOperationException("[JetControlFlowProcessor] " + element.toString()); } }); } @@ -726,8 +726,8 @@ public class JetControlFlowProcessor { } @Override - public void visitJetElement(JetElement elem) { - builder.unsupported(elem); + public void visitJetElement(JetElement element) { + builder.unsupported(element); } } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/idea/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 02c8c3e1d20..56557b58226 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -31,9 +31,9 @@ public class JetPsiUtil { final Set shadowedElements = new HashSet(); JetVisitor shadowAllChildren = new JetVisitor() { @Override - public void visitJetElement(JetElement elem) { - if (shadowedElements.add(elem)) { - elem.acceptChildren(this); + public void visitJetElement(JetElement element) { + if (shadowedElements.add(element)) { + element.acceptChildren(this); } } }; diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java index 3d2779e1b10..746b6557f14 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java @@ -6,8 +6,8 @@ import com.intellij.psi.PsiElementVisitor; * @author max */ public class JetVisitor extends PsiElementVisitor { - public void visitJetElement(JetElement elem) { - visitElement(elem); + public void visitJetElement(JetElement element) { + visitElement(element); } public void visitDeclaration(JetDeclaration dcl) { @@ -143,6 +143,10 @@ public class JetVisitor extends PsiElementVisitor { } public void visitSimpleNameExpression(JetSimpleNameExpression expression) { + visitReferenceExpression(expression); + } + + public void visitReferenceExpression(JetReferenceExpression expression) { visitExpression(expression); } @@ -231,7 +235,7 @@ public class JetVisitor extends PsiElementVisitor { } public void visitArrayAccessExpression(JetArrayAccessExpression expression) { - visitExpression(expression); + visitReferenceExpression(expression); } public void visitQualifiedExpression(JetQualifiedExpression expression) { diff --git a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java index 29af437d53d..26d5a4c7436 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java @@ -84,8 +84,8 @@ public class ClassDescriptorResolver { } @Override - public void visitJetElement(JetElement elem) { - throw new UnsupportedOperationException(elem.toString()); + public void visitJetElement(JetElement element) { + throw new UnsupportedOperationException(element.toString()); } }); } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java index 1343a9168c3..d99a470190d 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java @@ -7,6 +7,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionGroup; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetTypeChecker; +import org.jetbrains.jet.lang.types.TypeUtils; import java.util.ArrayList; import java.util.Collection; @@ -62,9 +63,12 @@ public class OverloadResolver { if (receiverType != null) { // ASSERT : either the receiver in not present or we are in a scope with no top-level functions - final JetType functionReceiverType = descriptor.getReceiverType(); - if (functionReceiverType != null && !typeChecker.isSubtypeOf(receiverType, functionReceiverType)) { - continue; + JetType functionReceiverType = descriptor.getReceiverType(); + if (functionReceiverType != null) { + functionReceiverType = TypeUtils.makeNullable(functionReceiverType); // Too look things up in T for T?, and later check receiver's nullability + if (!typeChecker.isSubtypeOf(receiverType, functionReceiverType)) { + continue; + } } } else if (descriptor.getReceiverType() != null) { diff --git a/idea/src/org/jetbrains/jet/lang/resolve/ScopeWithReceiver.java b/idea/src/org/jetbrains/jet/lang/resolve/ScopeWithReceiver.java index f888b0ff26e..7a471f42015 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/ScopeWithReceiver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/ScopeWithReceiver.java @@ -14,7 +14,7 @@ public class ScopeWithReceiver extends JetScopeImpl { private final JetScope outerScope; private final JetTypeChecker typeChecker; - public ScopeWithReceiver(JetScope outerScope, JetType receiverType, JetTypeChecker typeChecker) { + public ScopeWithReceiver(@NotNull JetScope outerScope, @NotNull JetType receiverType, @NotNull JetTypeChecker typeChecker) { this.outerScope = outerScope; this.receiverType = receiverType; this.typeChecker = typeChecker; @@ -23,7 +23,9 @@ public class ScopeWithReceiver extends JetScopeImpl { @NotNull @Override public FunctionGroup getFunctionGroup(@NotNull String name) { - FunctionGroup functionGroup = receiverType.getMemberScope().getFunctionGroup(name); + JetScope memberScope = receiverType.getMemberScope(); + assert memberScope != null : receiverType; + FunctionGroup functionGroup = memberScope.getFunctionGroup(name); if (functionGroup.isEmpty()) { return outerScope.getFunctionGroup(name); // return FunctionDescriptorUtil.filteredFunctionGroup(outerScope.getFunctionGroup(name), diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index a1aad553b7c..7184e507ee6 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -449,8 +449,8 @@ public class TopDownAnalyzer { } @Override - public void visitJetElement(JetElement elem) { - throw new UnsupportedOperationException(elem.getText() + " : " + elem); + public void visitJetElement(JetElement element) { + throw new UnsupportedOperationException(element.getText() + " : " + element); } }); } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index 0aef62a92ed..252a4a17d82 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -149,8 +149,8 @@ public class TypeResolver { } @Override - public void visitJetElement(JetElement elem) { - throw new IllegalArgumentException("Unsupported type: " + elem); + public void visitJetElement(JetElement element) { + throw new IllegalArgumentException("Unsupported type: " + element); } }); } diff --git a/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java index b5c63b9c916..4fe6cb82b2b 100644 --- a/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -123,11 +123,7 @@ public class ErrorUtils { ); } - private static FunctionDescriptor createErrorFunction(int typeParameterCount, Map valueParameters) { - throw new UnsupportedOperationException(); // TODO - } - - private static FunctionDescriptor createErrorFunction(int typeParameterCount, List positionedValueParameterTypes) { + public static FunctionDescriptor createErrorFunction(int typeParameterCount, List positionedValueParameterTypes) { return new FunctionDescriptorImpl(ERROR_CLASS, Collections.emptyList(), "").initialize( null, Collections.emptyList(), // TODO diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeImpl.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeImpl.java index 95bfed796f8..b0f7f47fb12 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeImpl.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeImpl.java @@ -59,6 +59,7 @@ public final class JetTypeImpl extends AnnotatedImpl implements JetType { return nullable; } + @NotNull @Override public JetScope getMemberScope() { if (memberScope == null) { diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index e87a28f173d..11af9e4e6b2 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -164,22 +164,22 @@ public class JetTypeInferrer { trace.getErrorHandler().genericError(expression.getNode(), "Unsupported [JetTypeInferrer]"); // . or ?. - JetType receiverType = getType(scope, expression.getReceiverExpression(), false); - checkNullSafety(receiverType, expression.getOperationTokenNode()); - - JetExpression selectorExpression = expression.getSelectorExpression(); - if (selectorExpression instanceof JetSimpleNameExpression) { - JetSimpleNameExpression referenceExpression = (JetSimpleNameExpression) selectorExpression; - String referencedName = referenceExpression.getReferencedName(); - - if (receiverType != null && referencedName != null) { - // No generics. Guaranteed - result[0] = semanticServices.getOverloadResolver().getOverloadDomain(receiverType, scope, referencedName); - reference[0] = referenceExpression; - } - } else { - throw new UnsupportedOperationException(); // TODO - } +// JetType receiverType = getType(scope, expression.getReceiverExpression(), false); +// checkNullSafety(receiverType, expression.getOperationTokenNode()); +// +// JetExpression selectorExpression = expression.getSelectorExpression(); +// if (selectorExpression instanceof JetSimpleNameExpression) { +// JetSimpleNameExpression referenceExpression = (JetSimpleNameExpression) selectorExpression; +// String referencedName = referenceExpression.getReferencedName(); +// +// if (receiverType != null && referencedName != null) { +// // No generics. Guaranteed +// result[0] = semanticServices.getOverloadResolver().getOverloadDomain(receiverType, scope, referencedName); +// reference[0] = referenceExpression; +// } +// } else { +// throw new UnsupportedOperationException(); // TODO +// } } @Override @@ -200,22 +200,25 @@ public class JetTypeInferrer { } @Override - public void visitJetElement(JetElement elem) { - trace.getErrorHandler().genericError(elem.getNode(), "Unsupported in call element"); // TODO : Message + public void visitJetElement(JetElement element) { + trace.getErrorHandler().genericError(element.getNode(), "Unsupported in call element"); // TODO : Message } }); return wrapForTracing(result[0], reference[0], argumentList, true); } - private void checkNullSafety(JetType receiverType, ASTNode operationTokenNode) { - if (receiverType != null) { + private void checkNullSafety(@Nullable JetType receiverType, @NotNull ASTNode operationTokenNode, @Nullable FunctionDescriptor callee) { + if (receiverType != null && callee != null) { boolean namespaceType = receiverType instanceof NamespaceType; - boolean nullable = !namespaceType && receiverType.isNullable(); + JetType calleeReceiverType = callee.getReceiverType(); + boolean nullableReceiver = !namespaceType && receiverType.isNullable(); + boolean calleeForbidsNullableReceiver = calleeReceiverType == null || !calleeReceiverType.isNullable(); + IElementType operationSign = operationTokenNode.getElementType(); - if (nullable && operationSign == JetTokens.DOT) { + if (nullableReceiver && calleeForbidsNullableReceiver && operationSign == JetTokens.DOT) { trace.getErrorHandler().genericError(operationTokenNode, "Only safe calls (?.) are allowed on a nullable receiver of type " + receiverType); } - else if (!nullable && operationSign == JetTokens.SAFE_ACCESS) { + else if ((!nullableReceiver || !calleeForbidsNullableReceiver) && operationSign == JetTokens.SAFE_ACCESS) { if (namespaceType) { trace.getErrorHandler().genericError(operationTokenNode, "Safe calls are not allowed on namespaces"); } @@ -1054,7 +1057,7 @@ public class JetTypeInferrer { // TODO : exhaustive patterns for (JetWhenEntry whenEntry : expression.getEntries()) { - final JetType finalSubjectType = subjectType; + final JetType finalSubjectType = subjectType != null ? subjectType : ErrorUtils.createErrorType("Unknown type"); JetWhenCondition condition = whenEntry.getCondition(); if (condition != null) { condition.accept(new JetVisitor() { @@ -1073,12 +1076,12 @@ public class JetTypeInferrer { @Override public void visitWhenConditionCall(JetWhenConditionCall condition) { - checkNullSafety(finalSubjectType, condition.getOperationTokenNode()); JetExpression callSuffixExpression = condition.getCallSuffixExpression(); JetScope compositeScope = new ScopeWithReceiver(scope, finalSubjectType, semanticServices.getTypeChecker()); if (callSuffixExpression != null) { JetType selectorReturnType = getType(compositeScope, callSuffixExpression, false); ensureBooleanResultWithCustomSubject(callSuffixExpression, selectorReturnType, "This expression"); + checkNullSafety(finalSubjectType, condition.getOperationTokenNode(), getCalleeFunctionDescriptor(callSuffixExpression)); } } @@ -1099,8 +1102,8 @@ public class JetTypeInferrer { } @Override - public void visitJetElement(JetElement elem) { - trace.getErrorHandler().genericError(elem.getNode(), "Unsupported [JetTypeInferrer] : " + elem); + public void visitJetElement(JetElement element) { + trace.getErrorHandler().genericError(element.getNode(), "Unsupported [JetTypeInferrer] : " + element); } }); } @@ -1182,8 +1185,8 @@ public class JetTypeInferrer { } @Override - public void visitJetElement(JetElement elem) { - trace.getErrorHandler().genericError(elem.getNode(), "Unsupported [JetTypeInferrer]"); + public void visitJetElement(JetElement element) { + trace.getErrorHandler().genericError(element.getNode(), "Unsupported [JetTypeInferrer]"); } }); } @@ -1437,8 +1440,6 @@ public class JetTypeInferrer { JetExpression receiverExpression = expression.getReceiverExpression(); JetType receiverType = new TypeInferrerVisitorWithNamespaces(scope, false).getType(receiverExpression); if (receiverType != null) { - // TODO : extensions to 'Any?' - checkNullSafety(receiverType, expression.getOperationTokenNode()); JetType selectorReturnType = getSelectorReturnType(receiverType, selectorExpression); if (expression.getOperationSign() == JetTokens.QUEST) { if (selectorReturnType != null && !isBoolean(selectorReturnType) && selectorExpression != null) { @@ -1453,9 +1454,57 @@ public class JetTypeInferrer { if (selectorExpression != null && result != null) { trace.recordExpressionType(selectorExpression, result); } + if (selectorReturnType != null) { + // TODO : extensions to 'Any?' + assert selectorExpression != null; + checkNullSafety(receiverType, expression.getOperationTokenNode(), getCalleeFunctionDescriptor(selectorExpression)); + } } } + @NotNull + private FunctionDescriptor getCalleeFunctionDescriptor(@NotNull JetExpression selectorExpression) { + final FunctionDescriptor[] result = new FunctionDescriptor[1]; + selectorExpression.accept(new JetVisitor() { + @Override + public void visitCallExpression(JetCallExpression callExpression) { + callExpression.getCalleeExpression().accept(this); + } + + @Override + public void visitReferenceExpression(JetReferenceExpression referenceExpression) { + DeclarationDescriptor declarationDescriptor = trace.getBindingContext().resolveReferenceExpression(referenceExpression); + if (declarationDescriptor instanceof FunctionDescriptor) { + result[0] = (FunctionDescriptor) declarationDescriptor; + } + } + + @Override + public void visitArrayAccessExpression(JetArrayAccessExpression expression) { + expression.getArrayExpression().accept(this); + } + + @Override + public void visitBinaryExpression(JetBinaryExpression expression) { + expression.getLeft().accept(this); + } + + @Override + public void visitQualifiedExpression(JetQualifiedExpression expression) { + expression.getReceiverExpression().accept(this); + } + + @Override + public void visitJetElement(JetElement element) { + trace.getErrorHandler().genericError(element.getNode(), "Unsupported [getCalleeFunctionDescriptor]: " + element); + } + }); + if (result[0] == null) { + result[0] = ErrorUtils.createErrorFunction(0, Collections.emptyList()); + } + return result[0]; + } + private JetType getCallExpressionType(@Nullable JetType receiverType, @NotNull JetCallExpression callExpression) { OverloadDomain overloadDomain = getOverloadDomain(receiverType, scope, callExpression.getCalleeExpression(), callExpression.getValueArgumentList()); return resolveCall(scope, overloadDomain, callExpression); @@ -1769,8 +1818,8 @@ public class JetTypeInferrer { } @Override - public void visitJetElement(JetElement elem) { - trace.getErrorHandler().genericError(elem.getNode(), "[JetTypeInferrer] Unsupported element: " + elem + " " + elem.getClass().getCanonicalName()); + public void visitJetElement(JetElement element) { + trace.getErrorHandler().genericError(element.getNode(), "[JetTypeInferrer] Unsupported element: " + element + " " + element.getClass().getCanonicalName()); } } @@ -1919,9 +1968,10 @@ public class JetTypeInferrer { } @Override - public void visitJetElement(JetElement elem) { - trace.getErrorHandler().genericError(elem.getNode(), "Unsupported element in a block: " + elem + " " + elem.getClass().getCanonicalName()); + public void visitJetElement(JetElement element) { + trace.getErrorHandler().genericError(element.getNode(), "Unsupported element in a block: " + element + " " + element.getClass().getCanonicalName()); } + } // private class CachedBindingTrace extends BindingTraceAdapter { diff --git a/idea/src/org/jetbrains/jet/lang/types/TypeUtils.java b/idea/src/org/jetbrains/jet/lang/types/TypeUtils.java index f7f18fba445..7b384eddd3d 100644 --- a/idea/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/idea/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -15,15 +15,16 @@ import java.util.*; * @author abreslav */ public class TypeUtils { - public static JetType makeNullable(JetType type) { + public static JetType makeNullable(@NotNull JetType type) { return makeNullableAsSpecified(type, true); } - public static JetType makeNotNullable(JetType type) { + public static JetType makeNotNullable(@NotNull JetType type) { return makeNullableAsSpecified(type, false); } - public static JetType makeNullableAsSpecified(JetType type, boolean nullable) { + @NotNull + public static JetType makeNullableAsSpecified(@NotNull JetType type, boolean nullable) { if (type.isNullable() == nullable) { return type; } diff --git a/idea/testData/checker/ExtensionFunctions.jet b/idea/testData/checker/ExtensionFunctions.jet index bb877dabcf3..fbd636f51af 100644 --- a/idea/testData/checker/ExtensionFunctions.jet +++ b/idea/testData/checker/ExtensionFunctions.jet @@ -6,7 +6,7 @@ fun T.foo(x : E, y : A) : T { y plus 1 y + 1.0 - this?.minus(this) + this?.minus(this) this } @@ -35,4 +35,36 @@ val Int.abs : Int val T.foo : T -fun Int.foo() = this \ No newline at end of file +fun Int.foo() = this + +namespace null_safety { + + fun parse(cmd: String): Command? { return null } + class Command() { + // fun equals(other : Any?) : Boolean + val foo : Int + } + + fun Any.equals(other : Any?) : Boolean + fun Any?.equals1(other : Any?) : Boolean + + fun main(args: Array) { + + System.out?.print(1) + + val command = parse("") + + command.foo + + command.equals(null) + command?.equals(null) + command.equals1(null) + command?.equals1(null) + + val c = new Command() + c?.equals(null) + + if (command == null) 1 + } + +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/JetTestUtils.java b/idea/tests/org/jetbrains/jet/JetTestUtils.java index 3d2033c6395..c707ac6cdad 100644 --- a/idea/tests/org/jetbrains/jet/JetTestUtils.java +++ b/idea/tests/org/jetbrains/jet/JetTestUtils.java @@ -2,7 +2,6 @@ package org.jetbrains.jet; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.codegen.ClassCodegen; import org.jetbrains.jet.lang.ErrorHandler; import org.jetbrains.jet.lang.JetDiagnostic; import org.jetbrains.jet.lang.descriptors.*; @@ -136,7 +135,7 @@ public class JetTestUtils { @Override public DeclarationDescriptor resolveReferenceExpression(JetReferenceExpression referenceExpression) { - throw new UnsupportedOperationException(); // TODO + return null; } @Override diff --git a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java index 9a117cc015b..3fc1d268a2b 100644 --- a/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java +++ b/idea/tests/org/jetbrains/jet/parsing/JetParsingTest.java @@ -52,10 +52,10 @@ public class JetParsingTest extends ParsingTestCase { protected void checkResult(@NonNls String targetDataName, PsiFile file) throws IOException { file.acceptChildren(new JetVisitor() { @Override - public void visitJetElement(JetElement elem) { - elem.acceptChildren(this); + public void visitJetElement(JetElement element) { + element.acceptChildren(this); try { - checkPsiGetters(elem); + checkPsiGetters(element); } catch (Throwable throwable) { throw new RuntimeException(throwable); }