mirror of
https://github.com/enso-org/enso.git
synced 2024-11-27 05:15:42 +03:00
Avoid WithWarnings without any warnings (#8583)
This commit is contained in:
parent
fce6d5dce6
commit
7daad75dd9
@ -263,7 +263,10 @@ public abstract class SortVectorNode extends Node {
|
|||||||
}
|
}
|
||||||
case REPORT_WARNING -> {
|
case REPORT_WARNING -> {
|
||||||
return attachDifferentComparatorsWarning(
|
return attachDifferentComparatorsWarning(
|
||||||
attachWarnings(sortedVector, gatheredWarnings), groups);
|
gatheredWarnings.isEmpty()
|
||||||
|
? sortedVector
|
||||||
|
: attachWarnings(sortedVector, gatheredWarnings),
|
||||||
|
groups);
|
||||||
}
|
}
|
||||||
case IGNORE -> {
|
case IGNORE -> {
|
||||||
return sortedVector;
|
return sortedVector;
|
||||||
|
@ -35,11 +35,12 @@ public final class WithWarnings implements EnsoObject {
|
|||||||
* @param maxWarnings maximal number of warnings allowed to be attached to the value
|
* @param maxWarnings maximal number of warnings allowed to be attached to the value
|
||||||
* @param limitReached if `true`, indicates that `warnings` have already been limited for a
|
* @param limitReached if `true`, indicates that `warnings` have already been limited for a
|
||||||
* custom-method, `false` otherwise
|
* custom-method, `false` otherwise
|
||||||
* @param warnings warnings to be attached to a value
|
* @param warnings non-empty warnings to be attached to a value
|
||||||
*/
|
*/
|
||||||
private WithWarnings(Object value, int maxWarnings, boolean limitReached, Warning... warnings) {
|
private WithWarnings(Object value, int maxWarnings, boolean limitReached, Warning... warnings) {
|
||||||
assert !(value instanceof WithWarnings);
|
assert !(value instanceof WithWarnings);
|
||||||
this.warnings = createSetFromArray(maxWarnings, warnings);
|
this.warnings = createSetFromArray(maxWarnings, warnings);
|
||||||
|
assert this.warnings.size() > 0;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.limitReached = limitReached || this.warnings.size() >= maxWarnings;
|
this.limitReached = limitReached || this.warnings.size() >= maxWarnings;
|
||||||
this.maxWarnings = maxWarnings;
|
this.maxWarnings = maxWarnings;
|
||||||
@ -69,6 +70,7 @@ public final class WithWarnings implements EnsoObject {
|
|||||||
Warning... additionalWarnings) {
|
Warning... additionalWarnings) {
|
||||||
assert !(value instanceof WithWarnings);
|
assert !(value instanceof WithWarnings);
|
||||||
this.warnings = cloneSetAndAppend(maxWarnings, warnings, additionalWarnings);
|
this.warnings = cloneSetAndAppend(maxWarnings, warnings, additionalWarnings);
|
||||||
|
assert this.warnings.size() > 0;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.limitReached = limitReached || this.warnings.size() >= maxWarnings;
|
this.limitReached = limitReached || this.warnings.size() >= maxWarnings;
|
||||||
this.maxWarnings = maxWarnings;
|
this.maxWarnings = maxWarnings;
|
||||||
@ -168,7 +170,7 @@ public final class WithWarnings implements EnsoObject {
|
|||||||
|
|
||||||
@ExportMessage
|
@ExportMessage
|
||||||
boolean hasWarnings() {
|
boolean hasWarnings() {
|
||||||
return warnings.size() > 0;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExportMessage
|
@ExportMessage
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package org.enso.interpreter.test;
|
package org.enso.interpreter.test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
import org.enso.interpreter.runtime.EnsoContext;
|
import org.enso.interpreter.runtime.EnsoContext;
|
||||||
import org.enso.interpreter.runtime.error.Warning;
|
import org.enso.interpreter.runtime.error.Warning;
|
||||||
@ -17,24 +18,26 @@ import org.junit.Test;
|
|||||||
public class WarningsTest extends TestBase {
|
public class WarningsTest extends TestBase {
|
||||||
|
|
||||||
private static Context ctx;
|
private static Context ctx;
|
||||||
|
private static EnsoContext ensoContext;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void initEnsoContext() {
|
public static void initEnsoContext() {
|
||||||
ctx = createDefaultContext();
|
ctx = createDefaultContext();
|
||||||
|
ensoContext =
|
||||||
|
(EnsoContext)
|
||||||
|
ctx.getBindings(LanguageInfo.ID)
|
||||||
|
.invokeMember(MethodNames.TopScope.LEAK_CONTEXT)
|
||||||
|
.asHostObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void disposeContext() {
|
public static void disposeContext() {
|
||||||
|
ensoContext = null;
|
||||||
ctx.close();
|
ctx.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doubleWithWarningsWrap() {
|
public void doubleWithWarningsWrap() {
|
||||||
var ensoContext =
|
|
||||||
(EnsoContext)
|
|
||||||
ctx.getBindings(LanguageInfo.ID)
|
|
||||||
.invokeMember(MethodNames.TopScope.LEAK_CONTEXT)
|
|
||||||
.asHostObject();
|
|
||||||
var warn1 = Warning.create(ensoContext, "w1", this);
|
var warn1 = Warning.create(ensoContext, "w1", this);
|
||||||
var warn2 = Warning.create(ensoContext, "w2", this);
|
var warn2 = Warning.create(ensoContext, "w2", this);
|
||||||
var value = 42;
|
var value = 42;
|
||||||
@ -49,4 +52,17 @@ public class WarningsTest extends TestBase {
|
|||||||
Assert.assertArrayEquals(
|
Assert.assertArrayEquals(
|
||||||
new Object[] {warn1, warn2}, with2.getWarningsArray(WarningsLibrary.getUncached()));
|
new Object[] {warn1, warn2}, with2.getWarningsArray(WarningsLibrary.getUncached()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void wrapAndUnwrap() {
|
||||||
|
var value = 42;
|
||||||
|
WithWarnings without;
|
||||||
|
try {
|
||||||
|
without = WithWarnings.wrap(ensoContext, 42, new Warning[0]);
|
||||||
|
} catch (AssertionError e) {
|
||||||
|
// OK
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fail("One shall not be created WithWarnings without any warnings " + without);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user