From f817eba7aad9a5745751e8963eb15f5412db8b03 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 20 Aug 2012 16:05:16 +0400 Subject: [PATCH] removed check for 'hasNext' val in frontend --- .../jet/lang/diagnostics/Errors.java | 1 - .../rendering/DefaultErrorMessages.java | 2 -- .../ControlStructureTypingVisitor.java | 29 ++----------------- .../testData/codegen/regressions/kt1199.kt | 1 + .../diagnostics/tests/ForRangeConventions.kt | 6 ++-- .../tests/extensions/GenericIterator.kt | 1 + idea/testData/checker/ForRangeConventions.jet | 2 +- .../cases/extensionFunctionCalledFromFor.kt | 3 +- 8 files changed, 8 insertions(+), 37 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index bf7e522bb69..630aee00a21 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -212,7 +212,6 @@ public interface Errors { DiagnosticFactory1 NO_CLASS_OBJECT = DiagnosticFactory1.create(ERROR); SimpleDiagnosticFactory NO_GENERICS_IN_SUPERTYPE_SPECIFIER = SimpleDiagnosticFactory.create(ERROR); - SimpleDiagnosticFactory HAS_NEXT_PROPERTY_AND_FUNCTION_AMBIGUITY = SimpleDiagnosticFactory.create(ERROR); SimpleDiagnosticFactory HAS_NEXT_MISSING = SimpleDiagnosticFactory.create(ERROR); SimpleDiagnosticFactory HAS_NEXT_FUNCTION_AMBIGUITY = SimpleDiagnosticFactory.create(ERROR); SimpleDiagnosticFactory HAS_NEXT_MUST_BE_READABLE = SimpleDiagnosticFactory.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index 12779c502fa..e2dbbe5d516 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -228,8 +228,6 @@ public class DefaultErrorMessages { MAP.put(NO_CLASS_OBJECT, "Please specify constructor invocation; classifier ''{0}'' does not have a class object", NAME); MAP.put(NO_GENERICS_IN_SUPERTYPE_SPECIFIER, "Generic arguments of the base type must be specified"); - MAP.put(HAS_NEXT_PROPERTY_AND_FUNCTION_AMBIGUITY, - "An ambiguity between 'iterator().hasNext()' function and 'iterator().hasNext' property"); MAP.put(HAS_NEXT_MISSING, "Loop range must have an 'iterator().hasNext()' function or an 'iterator().hasNext' property"); MAP.put(HAS_NEXT_FUNCTION_AMBIGUITY, "Function 'iterator().hasNext()' is ambiguous for this expression"); MAP.put(HAS_NEXT_MUST_BE_READABLE, "The 'iterator().hasNext' property of the loop range must be readable"); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java index 36d3d6be9bc..af90a4df8a4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java @@ -327,17 +327,11 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor { JetType iteratorType = iteratorFunction.getReturnType(); FunctionDescriptor hasNextFunction = checkHasNextFunctionSupport(loopRangeExpression, iteratorType, context); boolean hasNextFunctionSupported = hasNextFunction != null; - VariableDescriptor hasNextProperty = checkHasNextPropertySupport(loopRangeExpression, iteratorType, context); - boolean hasNextPropertySupported = hasNextProperty != null; - if (hasNextFunctionSupported && hasNextPropertySupported && !ErrorUtils.isErrorType(iteratorType)) { - // TODO : overload resolution rules impose priorities here??? - context.trace.report(HAS_NEXT_PROPERTY_AND_FUNCTION_AMBIGUITY.on(loopRangeExpression)); - } - else if (!hasNextFunctionSupported && !hasNextPropertySupported) { + if (!hasNextFunctionSupported) { context.trace.report(HAS_NEXT_MISSING.on(loopRangeExpression)); } else { - context.trace.record(LOOP_RANGE_HAS_NEXT, loopRange.getExpression(), hasNextFunctionSupported ? hasNextFunction : hasNextProperty); + context.trace.record(LOOP_RANGE_HAS_NEXT, loopRange.getExpression(), hasNextFunction); } OverloadResolutionResults nextResolutionResults = context.resolveExactSignature(new TransientReceiver(iteratorType), Name.identifier("next"), Collections.emptyList()); @@ -388,25 +382,6 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor { return hasNextResolutionResults.getResultingCall().getResultingDescriptor(); } - @Nullable - private static VariableDescriptor checkHasNextPropertySupport(@NotNull JetExpression loopRange, @NotNull JetType iteratorType, ExpressionTypingContext context) { - VariableDescriptor hasNextProperty = DescriptorUtils.filterNonExtensionProperty(iteratorType.getMemberScope().getProperties(Name.identifier("hasNext"))); - if (hasNextProperty == null) { - return null; - } - else { - JetType hasNextReturnType = hasNextProperty.getType(); - if (hasNextReturnType == null) { - // TODO : accessibility - context.trace.report(HAS_NEXT_MUST_BE_READABLE.on(loopRange)); - } - else if (!isBoolean(hasNextReturnType)) { - context.trace.report(HAS_NEXT_PROPERTY_TYPE_MISMATCH.on(loopRange, hasNextReturnType)); - } - } - return hasNextProperty; - } - @Override public JetTypeInfo visitTryExpression(JetTryExpression expression, ExpressionTypingContext context) { JetExpression tryBlock = expression.getTryBlock(); diff --git a/compiler/testData/codegen/regressions/kt1199.kt b/compiler/testData/codegen/regressions/kt1199.kt index 0d854f0c959..9939ff6a890 100644 --- a/compiler/testData/codegen/regressions/kt1199.kt +++ b/compiler/testData/codegen/regressions/kt1199.kt @@ -1,6 +1,7 @@ fun T?.iterator() = object { var hasNext = this@iterator != null private set + fun hasNext() = hasNext fun next() : T { if (hasNext) { diff --git a/compiler/testData/diagnostics/tests/ForRangeConventions.kt b/compiler/testData/diagnostics/tests/ForRangeConventions.kt index 0ba48098ab9..531c41b8104 100644 --- a/compiler/testData/diagnostics/tests/ForRangeConventions.kt +++ b/compiler/testData/diagnostics/tests/ForRangeConventions.kt @@ -1,4 +1,3 @@ - import java.util.*; class NotRange1() { @@ -82,12 +81,11 @@ fun test(notRange1: NotRange1, notRange2: NotRange2, notRange3: NotRange3, notRa for (i in notRange3); for (i in notRange4); for (i in notRange5); - for (i in notRange6); + for (i in notRange6); for (i in notRange7); for (i in notRange8); for (i in range0); for (i in range1); for (i in (ArrayList() : List)); -} - +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/extensions/GenericIterator.kt b/compiler/testData/diagnostics/tests/extensions/GenericIterator.kt index 2a68c68ec81..cb36d9a5993 100644 --- a/compiler/testData/diagnostics/tests/extensions/GenericIterator.kt +++ b/compiler/testData/diagnostics/tests/extensions/GenericIterator.kt @@ -9,6 +9,7 @@ inline fun java.util.Enumeration.iterator() = object: Iterator { fun T?.iterator() = object { var hasNext = this@iterator != null private set + fun hasNext() = hasNext fun next() : T { if (hasNext) { diff --git a/idea/testData/checker/ForRangeConventions.jet b/idea/testData/checker/ForRangeConventions.jet index da56cf2232e..5ec0337fe07 100644 --- a/idea/testData/checker/ForRangeConventions.jet +++ b/idea/testData/checker/ForRangeConventions.jet @@ -71,7 +71,7 @@ fun test(notRange1: NotRange1, notRange2: NotRange2, notRange3: NotRange3, notRa for (i in notRange3); for (i in notRange4); for (i in notRange5); - for (i in notRange6); + for (i in notRange6); for (i in notRange7); for (i in range0); for (i in range1); diff --git a/js/js.translator/testFiles/extensionFunction/cases/extensionFunctionCalledFromFor.kt b/js/js.translator/testFiles/extensionFunction/cases/extensionFunctionCalledFromFor.kt index 98f24fe5da3..b9ef9cbc45e 100644 --- a/js/js.translator/testFiles/extensionFunction/cases/extensionFunctionCalledFromFor.kt +++ b/js/js.translator/testFiles/extensionFunction/cases/extensionFunctionCalledFromFor.kt @@ -12,8 +12,7 @@ class SimpleEnumerator { } class SimpleEnumeratorWrapper(private val enumerator: SimpleEnumerator) { - val hasNext: Boolean - get() = enumerator.hasMoreElements() + fun hasNext(): Boolean = enumerator.hasMoreElements() fun next() = enumerator.getNext() }