diff --git a/python/src/com/jetbrains/python/codeInsight/controlflow/ReadWriteInstruction.java b/python/src/com/jetbrains/python/codeInsight/controlflow/ReadWriteInstruction.java index 5b343f1a30e3..cbc25a83821a 100644 --- a/python/src/com/jetbrains/python/codeInsight/controlflow/ReadWriteInstruction.java +++ b/python/src/com/jetbrains/python/codeInsight/controlflow/ReadWriteInstruction.java @@ -20,24 +20,32 @@ public class ReadWriteInstruction extends InstructionImpl { }; public enum ACCESS { - READ(true, false), - WRITE(false, true), - WRITETYPE(false, true), - READWRITE(true, true); + READ(true, false, false), + WRITE(false, true, false), + ASSERTTYPE(false, false, true), + READWRITE(true, true, false); private final boolean isWrite; private final boolean isRead; + private final boolean isAssertType; - ACCESS(boolean read, boolean write) { + ACCESS(boolean read, boolean write, boolean assertType) { isRead = read; isWrite = write; + isAssertType = assertType; } - public boolean isWriteAccess(){ + + public boolean isWriteAccess() { return isWrite; } - public boolean isReadAccess(){ + + public boolean isReadAccess() { return isRead; } + + public boolean isAssertTypeAccess() { + return isAssertType; + } } private final String myName; @@ -93,7 +101,7 @@ public class ReadWriteInstruction extends InstructionImpl { final PsiElement element, final String name, final Function getType) { - return new ReadWriteInstruction(builder, element, name, ACCESS.WRITETYPE, getType); + return new ReadWriteInstruction(builder, element, name, ACCESS.ASSERTTYPE, getType); } @Nullable diff --git a/python/src/com/jetbrains/python/refactoring/PyDefUseUtil.java b/python/src/com/jetbrains/python/refactoring/PyDefUseUtil.java index 11e3d68ba3df..d30776bb26a5 100644 --- a/python/src/com/jetbrains/python/refactoring/PyDefUseUtil.java +++ b/python/src/com/jetbrains/python/refactoring/PyDefUseUtil.java @@ -50,7 +50,7 @@ public class PyDefUseUtil { final PsiElement element = instruction.getElement(); final String name = elementName(element); final ReadWriteInstruction.ACCESS access = instruction.getAccess(); - if (access.isWriteAccess() && Comparing.strEqual(name, var.getName())) { + if ((access.isWriteAccess() || access.isAssertTypeAccess()) && Comparing.strEqual(name, var.getName())) { result.add(instruction); return; } diff --git a/python/testData/codeInsight/controlflow/assert.txt b/python/testData/codeInsight/controlflow/assert.txt index 20e88ed71962..d30cedb2ef2e 100644 --- a/python/testData/codeInsight/controlflow/assert.txt +++ b/python/testData/codeInsight/controlflow/assert.txt @@ -5,6 +5,6 @@ 4(5) READ ACCESS: isinstance 5(6) READ ACCESS: x 6(7) READ ACCESS: int -7(8) WRITETYPE ACCESS: s -8(9) WRITETYPE ACCESS: x +7(8) ASSERTTYPE ACCESS: s +8(9) ASSERTTYPE ACCESS: x 9() element: null \ No newline at end of file diff --git a/python/testData/codeInsight/controlflow/assignment2.txt b/python/testData/codeInsight/controlflow/assignment2.txt index 4531c455bec4..a3f468d77dd4 100644 --- a/python/testData/codeInsight/controlflow/assignment2.txt +++ b/python/testData/codeInsight/controlflow/assignment2.txt @@ -4,7 +4,7 @@ 3(4) element: PyIfStatement 4(5,10) READ ACCESS: sibling 5(6) element: PyStatementList. Condition: sibling:true -6(7) WRITETYPE ACCESS: sibling +6(7) ASSERTTYPE ACCESS: sibling 7(8) element: PyAssignmentStatement 8(9) element: PySubscriptionExpression 9(10) READ ACCESS: sibling diff --git a/python/testData/codeInsight/controlflow/break.txt b/python/testData/codeInsight/controlflow/break.txt index 4b74c0ae9cb5..f00c85098ebb 100644 --- a/python/testData/codeInsight/controlflow/break.txt +++ b/python/testData/codeInsight/controlflow/break.txt @@ -5,7 +5,7 @@ 4(5) element: PyIfStatement 5(6,9) READ ACCESS: condition 6(7) element: PyStatementList. Condition: condition:true -7(8) WRITETYPE ACCESS: condition +7(8) ASSERTTYPE ACCESS: condition 8(10) element: PyBreakStatement 9(1) element: PyPrintStatement 10() element: null \ No newline at end of file diff --git a/python/testData/codeInsight/controlflow/continue.txt b/python/testData/codeInsight/controlflow/continue.txt index 531e228f1682..0da087d6cfe7 100644 --- a/python/testData/codeInsight/controlflow/continue.txt +++ b/python/testData/codeInsight/controlflow/continue.txt @@ -5,7 +5,7 @@ 4(5) element: PyIfStatement 5(6,9) READ ACCESS: condition 6(7) element: PyStatementList. Condition: condition:true -7(8) WRITETYPE ACCESS: condition +7(8) ASSERTTYPE ACCESS: condition 8(1) element: PyContinueStatement 9(1) element: PyPrintStatement 10() element: null \ No newline at end of file diff --git a/python/testData/codeInsight/controlflow/ifelsereturn.txt b/python/testData/codeInsight/controlflow/ifelsereturn.txt index be3de5e39d0f..d0513796c26a 100644 --- a/python/testData/codeInsight/controlflow/ifelsereturn.txt +++ b/python/testData/codeInsight/controlflow/ifelsereturn.txt @@ -2,7 +2,7 @@ 1(2) element: PyIfStatement 2(3,13) READ ACCESS: markup 3(4) element: PyStatementList. Condition: markup:true -4(5) WRITETYPE ACCESS: markup +4(5) ASSERTTYPE ACCESS: markup 5(6) element: PyTryExceptStatement 6(7,9) element: PyTryPart 7(8,9) element: PyReturnStatement diff --git a/python/testData/codeInsight/controlflow/isinstance.txt b/python/testData/codeInsight/controlflow/isinstance.txt index 3df94dabb153..f7459afa9508 100644 --- a/python/testData/codeInsight/controlflow/isinstance.txt +++ b/python/testData/codeInsight/controlflow/isinstance.txt @@ -6,7 +6,7 @@ 5(6) READ ACCESS: s 6(7,12) READ ACCESS: basestring 7(8) element: PyStatementList. Condition: (isinstance(s, basestring)):true -8(9) WRITETYPE ACCESS: s +8(9) ASSERTTYPE ACCESS: s 9(10) element: PyAssignmentStatement 10(11) READ ACCESS: s 11(16) WRITE ACCESS: s2 diff --git a/python/testData/codeInsight/controlflow/manyifs.txt b/python/testData/codeInsight/controlflow/manyifs.txt index 3206af0e248d..26d53adaacd0 100644 --- a/python/testData/codeInsight/controlflow/manyifs.txt +++ b/python/testData/codeInsight/controlflow/manyifs.txt @@ -17,7 +17,7 @@ 16(17) element: PyIfStatement 17(18,25) READ ACCESS: bbb 18(19) element: PyStatementList. Condition: bbb:true -19(20) WRITETYPE ACCESS: bbb +19(20) ASSERTTYPE ACCESS: bbb 20(21) element: PyAssignmentStatement 21(25) WRITE ACCESS: var 22(23) element: PyElsePart. Condition: aa == bb:false diff --git a/python/testData/codeInsight/controlflow/return.txt b/python/testData/codeInsight/controlflow/return.txt index 1d310e3b16b1..00235aed635c 100644 --- a/python/testData/codeInsight/controlflow/return.txt +++ b/python/testData/codeInsight/controlflow/return.txt @@ -5,7 +5,7 @@ 4(5) element: PyIfStatement 5(6,9) READ ACCESS: condition 6(7) element: PyStatementList. Condition: condition:true -7(8) WRITETYPE ACCESS: condition +7(8) ASSERTTYPE ACCESS: condition 8(10) element: PyReturnStatement 9(1) element: PyPrintStatement 10() element: null \ No newline at end of file diff --git a/python/testData/codeInsight/controlflow/sliceassignment.txt b/python/testData/codeInsight/controlflow/sliceassignment.txt index 4531c455bec4..a3f468d77dd4 100644 --- a/python/testData/codeInsight/controlflow/sliceassignment.txt +++ b/python/testData/codeInsight/controlflow/sliceassignment.txt @@ -4,7 +4,7 @@ 3(4) element: PyIfStatement 4(5,10) READ ACCESS: sibling 5(6) element: PyStatementList. Condition: sibling:true -6(7) WRITETYPE ACCESS: sibling +6(7) ASSERTTYPE ACCESS: sibling 7(8) element: PyAssignmentStatement 8(9) element: PySubscriptionExpression 9(10) READ ACCESS: sibling diff --git a/python/testData/codeInsight/controlflow/tryfinally.txt b/python/testData/codeInsight/controlflow/tryfinally.txt index c85cfbfe2a61..3409584f677d 100644 --- a/python/testData/codeInsight/controlflow/tryfinally.txt +++ b/python/testData/codeInsight/controlflow/tryfinally.txt @@ -12,7 +12,7 @@ 11(12) READ ACCESS: status 12(13,27) READ ACCESS: None 13(14) element: PyStatementList. Condition: status is not None:true -14(15) WRITETYPE ACCESS: status +14(15) ASSERTTYPE ACCESS: status 15(16) element: PyPrintStatement 16(27) READ ACCESS: status 17(18) element: PyFinallyPart @@ -20,7 +20,7 @@ 19(20) READ ACCESS: status 20(21,25) READ ACCESS: None 21(22) element: PyStatementList. Condition: status is not None:true -22(23) WRITETYPE ACCESS: status +22(23) ASSERTTYPE ACCESS: status 23(24) element: PyPrintStatement 24(25) READ ACCESS: status 25(26) element: PyExpressionStatement