From 8e5b755ba12971fc5af6510caaef5110605774a6 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 23 Jun 2017 12:36:20 +0300 Subject: [PATCH] UAST value analysis: perform variable merge more accurately In particular, Phis are now lifted inside variables & dependent, whenever it's possible --- .../jetbrains/uast/values/UDependentValue.kt | 6 ++-- .../org/jetbrains/uast/values/UValueBase.kt | 2 +- .../jetbrains/uast/values/UVariableValue.kt | 12 ++++---- .../LoopWithReassignment.values.txt | 16 +++++----- .../java/Simple/AliveThenElse.values.txt | 2 +- .../java/Simple/CascadeIf.values.txt | 2 +- .../DeadSwitchEntriesWithoutBreaks.values.txt | 4 +-- .../uast-tests/java/Simple/DoWhile.values.txt | 30 +++++++++---------- .../java/Simple/EnumChoice.values.txt | 2 +- .../java/Simple/EnumSwitch.values.txt | 2 +- .../EnumSwitchConditionalBreak.values.txt | 4 +-- .../Simple/EnumSwitchWithoutBreaks.values.txt | 6 ++-- uast/uast-tests/java/Simple/For.values.txt | 22 +++++++------- .../uast-tests/java/Simple/ForEach.values.txt | 12 ++++---- .../Simple/ForEachMutableIterable.values.txt | 30 +++++++++---------- .../java/Simple/TryCatch.values.txt | 12 ++++---- uast/uast-tests/java/Simple/While.values.txt | 20 ++++++------- .../java/Simple/WhileWithContinue.values.txt | 12 ++++---- .../java/Simple/WhileWithIncrement.values.txt | 6 ++-- 19 files changed, 102 insertions(+), 100 deletions(-) diff --git a/uast/uast-common/src/org/jetbrains/uast/values/UDependentValue.kt b/uast/uast-common/src/org/jetbrains/uast/values/UDependentValue.kt index 4f9a6c08bf17..aa01fa13171e 100644 --- a/uast/uast-common/src/org/jetbrains/uast/values/UDependentValue.kt +++ b/uast/uast-common/src/org/jetbrains/uast/values/UDependentValue.kt @@ -91,9 +91,11 @@ open class UDependentValue protected constructor( override fun merge(other: UValue) = when (other) { this -> this value -> this + is UVariableValue -> other.merge(this) is UDependentValue -> { - if (value != other.value) UPhiValue.create(this, other) - else UDependentValue(value, dependencies + other.dependencies) + val allDependencies = dependencies + other.dependencies + if (value != other.value) UDependentValue(value.merge(other.value), allDependencies) + else UDependentValue(value, allDependencies) } else -> UPhiValue.create(this, other) } diff --git a/uast/uast-common/src/org/jetbrains/uast/values/UValueBase.kt b/uast/uast-common/src/org/jetbrains/uast/values/UValueBase.kt index cb1bed3fb842..d73b8a9a43ce 100644 --- a/uast/uast-common/src/org/jetbrains/uast/values/UValueBase.kt +++ b/uast/uast-common/src/org/jetbrains/uast/values/UValueBase.kt @@ -83,7 +83,7 @@ abstract class UValueBase : UValue { override fun merge(other: UValue): UValue = when (other) { this -> this - is UVariableValue -> other.merge(this) + is UDependentValue -> other.merge(this) is UCallResultValue -> other.merge(this) else -> UPhiValue.create(this, other) } diff --git a/uast/uast-common/src/org/jetbrains/uast/values/UVariableValue.kt b/uast/uast-common/src/org/jetbrains/uast/values/UVariableValue.kt index 2185cd9e38ed..7f2da9c77c64 100644 --- a/uast/uast-common/src/org/jetbrains/uast/values/UVariableValue.kt +++ b/uast/uast-common/src/org/jetbrains/uast/values/UVariableValue.kt @@ -36,13 +36,13 @@ class UVariableValue private constructor( override fun merge(other: UValue) = when (other) { this -> this value -> this - is UVariableValue -> { - if (variable != other.variable || value != other.value) UPhiValue.create(this, other) - else create(variable, value, dependencies + other.dependencies) - } is UDependentValue -> { - if (value != other.value) UPhiValue.create(this, other) - else create(variable, value, dependencies + other.dependencies) + val allDependencies = dependencies + other.dependencies + when { + other !is UVariableValue || variable != other.variable -> UPhiValue.create(this, other) + value != other.value -> create(variable, value.merge(other.value), allDependencies) + else -> create(variable, value, allDependencies) + } } else -> UPhiValue.create(this, other) } diff --git a/uast/uast-tests/java/Performance/LoopWithReassignment.values.txt b/uast/uast-tests/java/Performance/LoopWithReassignment.values.txt index dbfb937e8b1e..5162caeeb9c9 100644 --- a/uast/uast-tests/java/Performance/LoopWithReassignment.values.txt +++ b/uast/uast-tests/java/Performance/LoopWithReassignment.values.txt @@ -7,11 +7,11 @@ UFile (package = ) [public class LoopWithReassignment {...] ULiteralExpression (value = "") [""] = "" UWhileExpression [while (bar(name) !== null) {...}] = Undetermined UBinaryExpression (operator = !==) [bar(name) !== null] = Undetermined - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [bar(name)] = external bar(name)(Undetermined) + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [bar(name)] = external bar(name)((var name = Undetermined)) UIdentifier (Identifier (bar)) [UIdentifier (Identifier (bar))] - USimpleNameReferenceExpression (identifier = name) [name] = Undetermined + USimpleNameReferenceExpression (identifier = name) [name] = (var name = Undetermined) ULiteralExpression (value = null) [null] = null - UBlockExpression [{...}] = external bar(name)(Undetermined) + UBlockExpression [{...}] = external bar(name)((var name = Undetermined)) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [baz(Color(128, 64, 0))] = external baz(Color(128, 64, 0))(external Color(128, 64, 0)(128, 64, 0)) UIdentifier (Identifier (baz)) [UIdentifier (Identifier (baz))] UCallExpression (kind = UastCallKind(name='constructor_call'), argCount = 3)) [Color(128, 64, 0)] = external Color(128, 64, 0)(128, 64, 0) @@ -19,13 +19,13 @@ UFile (package = ) [public class LoopWithReassignment {...] ULiteralExpression (value = 128) [128] = 128 ULiteralExpression (value = 64) [64] = 64 ULiteralExpression (value = 0) [0] = 0 - UBinaryExpression (operator = =) [name = bar(name)] = external bar(name)(Undetermined) - USimpleNameReferenceExpression (identifier = name) [name] = Undetermined - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [bar(name)] = external bar(name)(Undetermined) + UBinaryExpression (operator = =) [name = bar(name)] = external bar(name)((var name = Undetermined)) + USimpleNameReferenceExpression (identifier = name) [name] = (var name = Undetermined) + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [bar(name)] = external bar(name)((var name = Undetermined)) UIdentifier (Identifier (bar)) [UIdentifier (Identifier (bar))] - USimpleNameReferenceExpression (identifier = name) [name] = Undetermined + USimpleNameReferenceExpression (identifier = name) [name] = (var name = Undetermined) UReturnExpression [return name] = Nothing - USimpleNameReferenceExpression (identifier = name) [name] = Undetermined + USimpleNameReferenceExpression (identifier = name) [name] = (var name = Undetermined) UMethod (name = bar) [private static fun bar(name: java.lang.String) : java.lang.String {...}] UParameter (name = name) [var name: java.lang.String] UBlockExpression [{...}] = Nothing diff --git a/uast/uast-tests/java/Simple/AliveThenElse.values.txt b/uast/uast-tests/java/Simple/AliveThenElse.values.txt index 9d4fa95960ab..eaa7b4871c0d 100644 --- a/uast/uast-tests/java/Simple/AliveThenElse.values.txt +++ b/uast/uast-tests/java/Simple/AliveThenElse.values.txt @@ -22,4 +22,4 @@ UFile (package = ) [public class AliveThenElse {...] USimpleNameReferenceExpression (identifier = z) [z] = (var z = Undetermined) USimpleNameReferenceExpression (identifier = x) [x] = (var x = 0) UReturnExpression [return z] = Nothing - USimpleNameReferenceExpression (identifier = z) [z] = Phi((var z = (var y = 1)), (var z = (var x = 0))) + USimpleNameReferenceExpression (identifier = z) [z] = (var z = Phi((var y = 1), (var x = 0))) diff --git a/uast/uast-tests/java/Simple/CascadeIf.values.txt b/uast/uast-tests/java/Simple/CascadeIf.values.txt index baad4b1f1f73..b961a1911490 100644 --- a/uast/uast-tests/java/Simple/CascadeIf.values.txt +++ b/uast/uast-tests/java/Simple/CascadeIf.values.txt @@ -42,4 +42,4 @@ UFile (package = ) [public class CascadeIf {...] USimpleNameReferenceExpression (identifier = z) [z] = (var z = Undetermined) USimpleNameReferenceExpression (identifier = w) [w] = (var w = 3) UReturnExpression [return z] = Nothing - USimpleNameReferenceExpression (identifier = z) [z] = Phi((var z = (var y = 1)), (var z = (var x = 0)), (var z = (var v = 2)), (var z = (var w = 3))) + USimpleNameReferenceExpression (identifier = z) [z] = (var z = Phi((var y = 1), (var x = 0), (var v = 2), (var w = 3))) diff --git a/uast/uast-tests/java/Simple/DeadSwitchEntriesWithoutBreaks.values.txt b/uast/uast-tests/java/Simple/DeadSwitchEntriesWithoutBreaks.values.txt index 67b1ca06c0d5..b5df0ce21c01 100644 --- a/uast/uast-tests/java/Simple/DeadSwitchEntriesWithoutBreaks.values.txt +++ b/uast/uast-tests/java/Simple/DeadSwitchEntriesWithoutBreaks.values.txt @@ -33,13 +33,13 @@ UFile (package = ) [public final enum DeadSwitchEntriesWithoutBreaks {...] USimpleNameReferenceExpression (identifier = THIRD) [THIRD] = THIRD (enum entry) UExpressionList (switch_entry) [{...] = Undetermined UBinaryExpression (operator = =) [result = 13] = 13 - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = 7), (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) ULiteralExpression (value = 13) [13] = 13 USwitchClauseExpressionWithBody [else -> {...] = Undetermined UDefaultCaseExpression [else] = NON-EVALUATED UExpressionList (switch_entry) [{...] = Undetermined UBinaryExpression (operator = =) [result = 66] = 66 - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = 13), (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) ULiteralExpression (value = 66) [66] = 66 UBreakExpression (label = null) [break] = Nothing(break) UReturnExpression [return result] = Nothing diff --git a/uast/uast-tests/java/Simple/DoWhile.values.txt b/uast/uast-tests/java/Simple/DoWhile.values.txt index 3dda28fc1437..3a6d7afc2287 100644 --- a/uast/uast-tests/java/Simple/DoWhile.values.txt +++ b/uast/uast-tests/java/Simple/DoWhile.values.txt @@ -9,24 +9,24 @@ UFile (package = ) [public class DoWhile {...] ULocalVariable (name = number) [var number: int = 42] ULiteralExpression (value = 42) [42] = 42 UDoWhileExpression [do {...] = Undetermined - UBinaryExpression (operator = >) [number > 0] = Undetermined - USimpleNameReferenceExpression (identifier = number) [number] = Phi((var number = Undetermined), (var number = 0), (var number = 4)) + UBinaryExpression (operator = >) [number > 0] = Undetermined (depending on: (var number = Undetermined)) + USimpleNameReferenceExpression (identifier = number) [number] = (var number = Undetermined) ULiteralExpression (value = 0) [0] = 0 - UBlockExpression [{...}] = Undetermined - UIfExpression [if (number % 10 === 7) {...}] = Undetermined - UBinaryExpression (operator = ===) [number % 10 === 7] = Undetermined - UBinaryExpression (operator = %) [number % 10] = Undetermined - USimpleNameReferenceExpression (identifier = number) [number] = Phi((var number = Undetermined), (var number = 0), (var number = 4)) + UBlockExpression [{...}] = Undetermined (depending on: (var number = Undetermined)) + UIfExpression [if (number % 10 === 7) {...}] = (var count = Undetermined) + UBinaryExpression (operator = ===) [number % 10 === 7] = Undetermined (depending on: (var number = Undetermined)) + UBinaryExpression (operator = %) [number % 10] = Undetermined (depending on: (var number = Undetermined)) + USimpleNameReferenceExpression (identifier = number) [number] = (var number = Undetermined) ULiteralExpression (value = 10) [10] = 10 ULiteralExpression (value = 7) [7] = 7 - UBlockExpression [{...}] = Phi((var count = Undetermined), (var count = 0), (var count = 1)) - UPostfixExpression (operator = ++) [count++] = Phi((var count = Undetermined), (var count = 0), (var count = 1)) - USimpleNameReferenceExpression (identifier = count) [count] = Phi((var count = Undetermined), (var count = 0), (var count = 1)) + UBlockExpression [{...}] = (var count = Undetermined) + UPostfixExpression (operator = ++) [count++] = (var count = Undetermined) + USimpleNameReferenceExpression (identifier = count) [count] = (var count = Undetermined) UastEmptyExpression [UastEmptyExpression] = NON-EVALUATED - UBinaryExpression (operator = =) [number = number / 10] = Undetermined - USimpleNameReferenceExpression (identifier = number) [number] = Phi((var number = Undetermined), (var number = 0), (var number = 4)) - UBinaryExpression (operator = /) [number / 10] = Undetermined - USimpleNameReferenceExpression (identifier = number) [number] = Phi((var number = Undetermined), (var number = 0), (var number = 4)) + UBinaryExpression (operator = =) [number = number / 10] = Undetermined (depending on: (var number = Undetermined)) + USimpleNameReferenceExpression (identifier = number) [number] = (var number = Undetermined) + UBinaryExpression (operator = /) [number / 10] = Undetermined (depending on: (var number = Undetermined)) + USimpleNameReferenceExpression (identifier = number) [number] = (var number = Undetermined) ULiteralExpression (value = 10) [10] = 10 UReturnExpression [return count] = Nothing - USimpleNameReferenceExpression (identifier = count) [count] = Phi((var count = Undetermined), (var count = 0), (var count = 1)) + USimpleNameReferenceExpression (identifier = count) [count] = (var count = Undetermined) diff --git a/uast/uast-tests/java/Simple/EnumChoice.values.txt b/uast/uast-tests/java/Simple/EnumChoice.values.txt index b9a7a12066f3..32c86d0a0644 100644 --- a/uast/uast-tests/java/Simple/EnumChoice.values.txt +++ b/uast/uast-tests/java/Simple/EnumChoice.values.txt @@ -20,4 +20,4 @@ UFile (package = ) [public final enum EnumChoice {...] USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) USimpleNameReferenceExpression (identifier = SECOND) [SECOND] = SECOND (enum entry) UReturnExpression [return result] = Nothing - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = FIRST (enum entry)), (var result = SECOND (enum entry))) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Phi(FIRST (enum entry), SECOND (enum entry))) diff --git a/uast/uast-tests/java/Simple/EnumSwitch.values.txt b/uast/uast-tests/java/Simple/EnumSwitch.values.txt index 5bf5ec50b30a..cc696742c579 100644 --- a/uast/uast-tests/java/Simple/EnumSwitch.values.txt +++ b/uast/uast-tests/java/Simple/EnumSwitch.values.txt @@ -43,4 +43,4 @@ UFile (package = ) [public final enum EnumSwitch {...] ULiteralExpression (value = 66) [66] = 66 UBreakExpression (label = null) [break] = Nothing(break) UReturnExpression [return result] = Nothing - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = 66), (var result = 13), (var result = 3), (var result = 7)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Phi(3, 7, 13, 66)) diff --git a/uast/uast-tests/java/Simple/EnumSwitchConditionalBreak.values.txt b/uast/uast-tests/java/Simple/EnumSwitchConditionalBreak.values.txt index 08983b93aea0..2aaaa52457af 100644 --- a/uast/uast-tests/java/Simple/EnumSwitchConditionalBreak.values.txt +++ b/uast/uast-tests/java/Simple/EnumSwitchConditionalBreak.values.txt @@ -41,8 +41,8 @@ UFile (package = ) [public final enum EnumSwitchConditionalBreak {...] UBinaryExpression (operator = =) [newResult = 42] = 42 USimpleNameReferenceExpression (identifier = newResult) [newResult] = (var newResult = Undetermined) ULiteralExpression (value = 42) [42] = 42 - UPostfixExpression (operator = ++) [counter++] = Phi((var counter = 1), (var counter = 0)) - USimpleNameReferenceExpression (identifier = counter) [counter] = Phi((var counter = 1), (var counter = 0)) + UPostfixExpression (operator = ++) [counter++] = (var counter = Phi(1, 0)) + USimpleNameReferenceExpression (identifier = counter) [counter] = (var counter = Phi(1, 0)) UBreakExpression (label = null) [break] = Nothing(break) UReturnExpression [return newResult + counter] = Nothing UBinaryExpression (operator = +) [newResult + counter] = Undetermined (depending on: (var newResult = 42), (var counter = Undetermined)) diff --git a/uast/uast-tests/java/Simple/EnumSwitchWithoutBreaks.values.txt b/uast/uast-tests/java/Simple/EnumSwitchWithoutBreaks.values.txt index 171ce410b3de..c42536c8fa74 100644 --- a/uast/uast-tests/java/Simple/EnumSwitchWithoutBreaks.values.txt +++ b/uast/uast-tests/java/Simple/EnumSwitchWithoutBreaks.values.txt @@ -31,14 +31,14 @@ UFile (package = ) [public final enum EnumSwitchWithoutBreaks {...] USimpleNameReferenceExpression (identifier = THIRD) [THIRD] = THIRD (enum entry) UExpressionList (switch_entry) [{...] = Undetermined UBinaryExpression (operator = =) [result = 13] = 13 - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = 7), (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) ULiteralExpression (value = 13) [13] = 13 USwitchClauseExpressionWithBody [else -> {...] = Undetermined UDefaultCaseExpression [else] = NON-EVALUATED UExpressionList (switch_entry) [{...] = Undetermined UBinaryExpression (operator = =) [result = 66] = 66 - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = 13), (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) ULiteralExpression (value = 66) [66] = 66 UBreakExpression (label = null) [break] = Nothing(break) UReturnExpression [return result] = Nothing - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = 3), (var result = 66)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Phi(3, 66)) diff --git a/uast/uast-tests/java/Simple/For.values.txt b/uast/uast-tests/java/Simple/For.values.txt index 23f047977deb..b199284c171f 100644 --- a/uast/uast-tests/java/Simple/For.values.txt +++ b/uast/uast-tests/java/Simple/For.values.txt @@ -9,16 +9,16 @@ UFile (package = ) [public class For {...] UDeclarationsExpression [var i: int = 0] = Undetermined ULocalVariable (name = i) [var i: int = 0] ULiteralExpression (value = 0) [0] = 0 - UBinaryExpression (operator = <) [i < 10] = Undetermined - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) + UBinaryExpression (operator = <) [i < 10] = Undetermined (depending on: (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) ULiteralExpression (value = 10) [10] = 10 - UPostfixExpression (operator = ++) [i++] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) - UBlockExpression [{...}] = Undetermined - UBinaryExpression (operator = =) [result = result + i] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0 (depending on: (var i = 0))), (var result = 0)) - UBinaryExpression (operator = +) [result + i] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0 (depending on: (var i = 0))), (var result = 0)) - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) + UPostfixExpression (operator = ++) [i++] = (var i = Undetermined) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) + UBlockExpression [{...}] = Undetermined (depending on: (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))), (var i = Undetermined)) + UBinaryExpression (operator = =) [result = result + i] = Undetermined (depending on: (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))), (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))) + UBinaryExpression (operator = +) [result + i] = Undetermined (depending on: (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))), (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) UReturnExpression [return result] = Nothing - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0 (depending on: (var i = 0))), (var result = 0)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))) diff --git a/uast/uast-tests/java/Simple/ForEach.values.txt b/uast/uast-tests/java/Simple/ForEach.values.txt index 9de4c4192e3b..4ed8629085e8 100644 --- a/uast/uast-tests/java/Simple/ForEach.values.txt +++ b/uast/uast-tests/java/Simple/ForEach.values.txt @@ -8,11 +8,11 @@ UFile (package = ) [public class For {...] ULiteralExpression (value = 0) [0] = 0 UForEachExpression [for (number : numbers) {...}] = Undetermined USimpleNameReferenceExpression (identifier = numbers) [numbers] = Undetermined - UBlockExpression [{...}] = Undetermined - UBinaryExpression (operator = =) [result = result + number] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0)) - UBinaryExpression (operator = +) [result + number] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0)) + UBlockExpression [{...}] = Undetermined (depending on: (var result = Undetermined)) + UBinaryExpression (operator = =) [result = result + number] = Undetermined (depending on: (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) + UBinaryExpression (operator = +) [result + number] = Undetermined (depending on: (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) USimpleNameReferenceExpression (identifier = number) [number] = Undetermined UReturnExpression [return result] = Nothing - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) diff --git a/uast/uast-tests/java/Simple/ForEachMutableIterable.values.txt b/uast/uast-tests/java/Simple/ForEachMutableIterable.values.txt index 11b4815d6d7d..fde717de6a12 100644 --- a/uast/uast-tests/java/Simple/ForEachMutableIterable.values.txt +++ b/uast/uast-tests/java/Simple/ForEachMutableIterable.values.txt @@ -16,17 +16,17 @@ UFile (package = ) [import java.util...] ULocalVariable (name = i) [var i: int = a++] UPostfixExpression (operator = ++) [a++] = (var a = 0) USimpleNameReferenceExpression (identifier = a) [a] = (var a = 0) - UBinaryExpression (operator = <) [i < size] = Undetermined - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0))) + UBinaryExpression (operator = <) [i < size] = Undetermined (depending on: (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) USimpleNameReferenceExpression (identifier = size) [size] = Undetermined - UPostfixExpression (operator = ++) [i++] = Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0))) - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0))) - UBlockExpression [{...}] = external add(i)(Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0)))) - UQualifiedReferenceExpression [result.add(i)] = external add(i)(Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0)))) + UPostfixExpression (operator = ++) [i++] = (var i = Undetermined) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) + UBlockExpression [{...}] = external add(i)((var i = Undetermined)) + UQualifiedReferenceExpression [result.add(i)] = external add(i)((var i = Undetermined)) USimpleNameReferenceExpression (identifier = result) [result] = (var result = external LinkedList()()) - UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [add(i)] = external add(i)(Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0)))) + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [add(i)] = external add(i)((var i = Undetermined)) UIdentifier (Identifier (add)) [UIdentifier (Identifier (add))] - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = (var a = 0))) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) UQualifiedReferenceExpression [result.add(a)] = external add(a)((var a = 1)) USimpleNameReferenceExpression (identifier = result) [result] = (var result = external LinkedList()()) UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [add(a)] = external add(a)((var a = 1)) @@ -48,13 +48,13 @@ UFile (package = ) [import java.util...] UIdentifier (Identifier (getList)) [UIdentifier (Identifier (getList))] UPrefixExpression (operator = ++) [++size] = 4 (depending on: (var size = 3)) USimpleNameReferenceExpression (identifier = size) [size] = (var size = 3) - UBlockExpression [{...}] = Undetermined - UBinaryExpression (operator = =) [result = result + number] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0)) - UBinaryExpression (operator = +) [result + number] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0)) + UBlockExpression [{...}] = Undetermined (depending on: (var result = Undetermined)) + UBinaryExpression (operator = =) [result = result + number] = Undetermined (depending on: (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) + UBinaryExpression (operator = +) [result + number] = Undetermined (depending on: (var result = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) USimpleNameReferenceExpression (identifier = number) [number] = Undetermined UReturnExpression [return result + size] = Nothing - UBinaryExpression (operator = +) [result + size] = Undetermined (depending on: (var size = 4)) - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0)) + UBinaryExpression (operator = +) [result + size] = Undetermined (depending on: (var result = Undetermined), (var size = 4)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined) USimpleNameReferenceExpression (identifier = size) [size] = (var size = 4) diff --git a/uast/uast-tests/java/Simple/TryCatch.values.txt b/uast/uast-tests/java/Simple/TryCatch.values.txt index 5fbc940869ab..094fc53667c1 100644 --- a/uast/uast-tests/java/Simple/TryCatch.values.txt +++ b/uast/uast-tests/java/Simple/TryCatch.values.txt @@ -18,10 +18,10 @@ UFile (package = ) [public class TryCatch {...] ULiteralExpression (value = 0) [0] = 0 UTryExpression [try {...] = Undetermined UBlockExpression [{...}] = 1 - UBinaryExpression (operator = =) [sum = sum + Integer.parseInt(part)] = Undetermined - USimpleNameReferenceExpression (identifier = sum) [sum] = Phi((var sum = 0), (var sum = Undetermined)) - UBinaryExpression (operator = +) [sum + Integer.parseInt(part)] = Undetermined - USimpleNameReferenceExpression (identifier = sum) [sum] = Phi((var sum = 0), (var sum = Undetermined)) + UBinaryExpression (operator = =) [sum = sum + Integer.parseInt(part)] = Undetermined (depending on: (var sum = Undetermined)) + USimpleNameReferenceExpression (identifier = sum) [sum] = (var sum = Undetermined) + UBinaryExpression (operator = +) [sum + Integer.parseInt(part)] = Undetermined (depending on: (var sum = Undetermined)) + USimpleNameReferenceExpression (identifier = sum) [sum] = (var sum = Undetermined) UQualifiedReferenceExpression [Integer.parseInt(part)] = external parseInt(part)(Undetermined) USimpleNameReferenceExpression (identifier = Integer) [Integer] = external Integer() UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [parseInt(part)] = external parseInt(part)(Undetermined) @@ -37,6 +37,6 @@ UFile (package = ) [public class TryCatch {...] ULiteralExpression (value = 1) [1] = 1 UDeclarationsExpression [var c: int = b] = Undetermined ULocalVariable (name = c) [var c: int = b] - USimpleNameReferenceExpression (identifier = b) [b] = Phi((var b = 1), (var b = 0)) + USimpleNameReferenceExpression (identifier = b) [b] = (var b = Phi(1, 0)) UReturnExpression [return sum] = Nothing - USimpleNameReferenceExpression (identifier = sum) [sum] = Phi((var sum = Undetermined), (var sum = 0)) + USimpleNameReferenceExpression (identifier = sum) [sum] = (var sum = Undetermined) diff --git a/uast/uast-tests/java/Simple/While.values.txt b/uast/uast-tests/java/Simple/While.values.txt index 595b63082ebe..a28937040cd3 100644 --- a/uast/uast-tests/java/Simple/While.values.txt +++ b/uast/uast-tests/java/Simple/While.values.txt @@ -8,15 +8,15 @@ UFile (package = ) [public class While {...] ULocalVariable (name = i) [var i: int = 0] ULiteralExpression (value = 0) [0] = 0 UWhileExpression [while (i < 10) {...}] = Undetermined - UBinaryExpression (operator = <) [i < 10] = Undetermined - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) + UBinaryExpression (operator = <) [i < 10] = Undetermined (depending on: (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) ULiteralExpression (value = 10) [10] = 10 - UBlockExpression [{...}] = Undetermined - UBinaryExpression (operator = =) [result = result + i++] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0 (depending on: (var i = 0))), (var result = 0)) - UBinaryExpression (operator = +) [result + i++] = Undetermined - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0 (depending on: (var i = 0))), (var result = 0)) - UPostfixExpression (operator = ++) [i++] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) + UBlockExpression [{...}] = Undetermined (depending on: (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))), (var i = Undetermined)) + UBinaryExpression (operator = =) [result = result + i++] = Undetermined (depending on: (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))), (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))) + UBinaryExpression (operator = +) [result + i++] = Undetermined (depending on: (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))), (var i = Undetermined)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))) + UPostfixExpression (operator = ++) [i++] = (var i = Undetermined) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) UReturnExpression [return result] = Nothing - USimpleNameReferenceExpression (identifier = result) [result] = Phi((var result = Undetermined), (var result = 0 (depending on: (var i = 0))), (var result = 0)) + USimpleNameReferenceExpression (identifier = result) [result] = (var result = Undetermined (depending on: (var i = Undetermined), (var i = Phi(1, 0)), (var i = 0))) diff --git a/uast/uast-tests/java/Simple/WhileWithContinue.values.txt b/uast/uast-tests/java/Simple/WhileWithContinue.values.txt index 47724be7f87f..e2c43a2a3a78 100644 --- a/uast/uast-tests/java/Simple/WhileWithContinue.values.txt +++ b/uast/uast-tests/java/Simple/WhileWithContinue.values.txt @@ -17,7 +17,7 @@ UFile (package = ) [public class WhileWithContinue {...] UIdentifier (Identifier (bar)) [UIdentifier (Identifier (bar))] UBlockExpression [{...}] = Nothing(continue) UBinaryExpression (operator = =) [second = 3] = 3 - USimpleNameReferenceExpression (identifier = second) [second] = Phi((var second = 3), (var second = 2)) + USimpleNameReferenceExpression (identifier = second) [second] = (var second = Phi(3, 2)) ULiteralExpression (value = 3) [3] = 3 UIfExpression [if (first > 0) continue] = Nothing(continue) UBinaryExpression (operator = >) [first > 0] = true (depending on: (var first = 1)) @@ -29,7 +29,7 @@ UFile (package = ) [public class WhileWithContinue {...] USimpleNameReferenceExpression (identifier = second) [second] = Undetermined ULiteralExpression (value = 4) [4] = 4 UReturnExpression [return second] = Nothing - USimpleNameReferenceExpression (identifier = second) [second] = Phi((var second = 3), (var second = 2)) + USimpleNameReferenceExpression (identifier = second) [second] = (var second = Phi(3, 2)) UMethod (name = baz) [public static fun baz() : int {...}] UBlockExpression [{...}] = Nothing UDeclarationsExpression [var first: int = 2] = Undetermined @@ -43,10 +43,10 @@ UFile (package = ) [public class WhileWithContinue {...] UIdentifier (Identifier (bar)) [UIdentifier (Identifier (bar))] UBlockExpression [{...}] = 4 UBinaryExpression (operator = =) [second = 3] = 3 - USimpleNameReferenceExpression (identifier = second) [second] = Phi((var second = 4), (var second = 3), (var second = 2)) + USimpleNameReferenceExpression (identifier = second) [second] = (var second = Phi(4, 3, 2)) ULiteralExpression (value = 3) [3] = 3 - UPostfixExpression (operator = --) [first--] = Phi((var first = Undetermined), (var first = 1), (var first = 2)) - USimpleNameReferenceExpression (identifier = first) [first] = Phi((var first = Undetermined), (var first = 1), (var first = 2)) + UPostfixExpression (operator = --) [first--] = (var first = Undetermined) + USimpleNameReferenceExpression (identifier = first) [first] = (var first = Undetermined) UIfExpression [if (first > 0) continue] = Undetermined UBinaryExpression (operator = >) [first > 0] = Undetermined (depending on: (var first = Undetermined)) USimpleNameReferenceExpression (identifier = first) [first] = (var first = Undetermined) @@ -57,4 +57,4 @@ UFile (package = ) [public class WhileWithContinue {...] USimpleNameReferenceExpression (identifier = second) [second] = (var second = 3) ULiteralExpression (value = 4) [4] = 4 UReturnExpression [return second] = Nothing - USimpleNameReferenceExpression (identifier = second) [second] = Phi((var second = 4), (var second = 3), (var second = 2)) + USimpleNameReferenceExpression (identifier = second) [second] = (var second = Phi(4, 3, 2)) diff --git a/uast/uast-tests/java/Simple/WhileWithIncrement.values.txt b/uast/uast-tests/java/Simple/WhileWithIncrement.values.txt index 57e6e08baf44..81689361becd 100644 --- a/uast/uast-tests/java/Simple/WhileWithIncrement.values.txt +++ b/uast/uast-tests/java/Simple/WhileWithIncrement.values.txt @@ -8,8 +8,8 @@ UFile (package = ) [public class WhileWithIncrement {...] UWhileExpression [while (true) {...}] = Undetermined ULiteralExpression (value = true) [true] = true UBlockExpression [{...}] = Undetermined - UPostfixExpression (operator = ++) [i++] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) + UPostfixExpression (operator = ++) [i++] = (var i = Undetermined) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined) UIfExpression [if (i % 42 === 0) break] = Undetermined UBinaryExpression (operator = ===) [i % 42 === 0] = Undetermined (depending on: (var i = Undetermined)) UBinaryExpression (operator = %) [i % 42] = Undetermined (depending on: (var i = Undetermined)) @@ -19,4 +19,4 @@ UFile (package = ) [public class WhileWithIncrement {...] UBreakExpression (label = null) [break] = Nothing(break) UastEmptyExpression [UastEmptyExpression] = NON-EVALUATED UReturnExpression [return i] = Nothing - USimpleNameReferenceExpression (identifier = i) [i] = Phi((var i = Undetermined), (var i = 1), (var i = 0)) + USimpleNameReferenceExpression (identifier = i) [i] = (var i = Undetermined)