mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't count type assertion CFG vertices in DFA (PY-4609)
Also renamed WRITETYPE vertices to ASSERTTYPE for clarity.
This commit is contained in:
@@ -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<TypeEvalContext, PyType> getType) {
|
||||
return new ReadWriteInstruction(builder, element, name, ACCESS.WRITETYPE, getType);
|
||||
return new ReadWriteInstruction(builder, element, name, ACCESS.ASSERTTYPE, getType);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user