summaryrefslogtreecommitdiff
path: root/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java')
-rw-r--r--java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java19
1 files changed, 15 insertions, 4 deletions
diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java
index 08c52c4d49b0..625eb8eed977 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/Parameters.java
@@ -78,8 +78,9 @@ abstract class PResults {
};
static final class ConditionalNPE implements PResult {
final Set<Set<Key>> sop;
- public ConditionalNPE(Set<Set<Key>> sop) {
+ public ConditionalNPE(Set<Set<Key>> sop) throws AnalyzerException {
this.sop = sop;
+ checkLimit(sop);
}
public ConditionalNPE(Key key) {
@@ -88,9 +89,19 @@ abstract class PResults {
prod.add(key);
sop.add(prod);
}
+
+ static void checkLimit(Set<Set<Key>> sop) throws AnalyzerException {
+ int size = 0;
+ for (Set<Key> keys : sop) {
+ size += keys.size();
+ }
+ if (size > Analysis.EQUATION_SIZE_LIMIT) {
+ throw new AnalyzerException(null, "Equation size is too big");
+ }
+ }
}
- static PResult join(PResult r1, PResult r2) {
+ static PResult join(PResult r1, PResult r2) throws AnalyzerException {
if (Identity == r1) return r2;
if (Identity == r2) return r1;
if (Return == r1) return Return;
@@ -102,7 +113,7 @@ abstract class PResults {
return new ConditionalNPE(join(cnpe1.sop, cnpe2.sop));
}
- static PResult meet(PResult r1, PResult r2) {
+ static PResult meet(PResult r1, PResult r2) throws AnalyzerException {
if (Identity == r1) return r2;
if (Return == r1) return r2;
if (Return == r2) return r1;
@@ -130,7 +141,7 @@ class NonNullInAnalysis extends Analysis<PResult> {
}
@Override
- PResult combineResults(PResult delta, List<PResult> subResults) {
+ PResult combineResults(PResult delta, List<PResult> subResults) throws AnalyzerException {
PResult subResult = Identity;
for (PResult sr : subResults) {
subResult = join(subResult, sr);