From 50b311621f7ab9690bfd4e3361700a27d58ee491 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 17 Oct 2013 16:54:53 +0200 Subject: [PATCH] IDEA-115070 Remove "exit" as possible @Contract method effect --- .../codeInspection/dataFlow/ControlFlowAnalyzer.java | 10 +++------- .../src/org/jetbrains/annotations/Contract.java | 5 ++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index 8d70438b8d4e..3492a2b13b04 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -1452,9 +1452,6 @@ class ControlFlowAnalyzer extends JavaElementVisitor { case THROW_EXCEPTION: returnCheckingFinally(); break; - case SYSTEM_EXIT: - addInstruction(new ReturnInstruction(true)); - break; } // if contract is false @@ -1493,7 +1490,7 @@ class ControlFlowAnalyzer extends JavaElementVisitor { final String className = owner.getQualifiedName(); if ("java.lang.System".equals(className)) { if ("exit".equals(methodName)) { - return Collections.singletonList(new MethodContract(getAnyArgConstraints(params), ValueConstraint.SYSTEM_EXIT)); + return Collections.singletonList(new MethodContract(getAnyArgConstraints(params), ValueConstraint.THROW_EXCEPTION)); } } else if ("junit.framework.Assert".equals(className) || "org.junit.Assert".equals(className) || @@ -1579,10 +1576,9 @@ class ControlFlowAnalyzer extends JavaElementVisitor { if ("!null".equals(name)) return ValueConstraint.NOT_NULL_VALUE; if ("true".equals(name)) return ValueConstraint.TRUE_VALUE; if ("false".equals(name)) return ValueConstraint.FALSE_VALUE; - if ("exit".equals(name)) return ValueConstraint.SYSTEM_EXIT; if ("fail".equals(name)) return ValueConstraint.THROW_EXCEPTION; if ("_".equals(name)) return ValueConstraint.ANY_VALUE; - throw new ParseException("Constraint should be one of: null, !null, true, false, exit, fail, _. Found: " + name); + throw new ParseException("Constraint should be one of: null, !null, true, false, fail, _. Found: " + name); } public static class ParseException extends Exception { @@ -1890,7 +1886,7 @@ class MethodContract { } public enum ValueConstraint { - ANY_VALUE, NULL_VALUE, NOT_NULL_VALUE, TRUE_VALUE, FALSE_VALUE, THROW_EXCEPTION, SYSTEM_EXIT + ANY_VALUE, NULL_VALUE, NOT_NULL_VALUE, TRUE_VALUE, FALSE_VALUE, THROW_EXCEPTION } } diff --git a/platform/annotations/src/org/jetbrains/annotations/Contract.java b/platform/annotations/src/org/jetbrains/annotations/Contract.java index 4e41f581eba9..6fa2e4b779e9 100644 --- a/platform/annotations/src/org/jetbrains/annotations/Contract.java +++ b/platform/annotations/src/org/jetbrains/annotations/Contract.java @@ -27,7 +27,7 @@ import java.lang.annotation.*; * args ::= ((arg ',')* arg )?
* arg ::= value-constraint
* value-constraint ::= 'any' | 'null' | '!null' | 'false' | 'true'
- * effect ::= value-constraint | 'fail' | 'exit'

+ * effect ::= value-constraint | 'fail'

* * The constraints denote the following:
*

* Examples:

* @Contract("_, null -> null") - method returns null if its second argument is null