@Override public void visitGet(SSAGetInstruction instruction) { result.add(instruction.getDeclaredField()); } };
@Override public void visitGet(SSAGetInstruction instruction) { result.add(instruction.getDeclaredField()); } };
@Override public void visitGet(SSAGetInstruction instruction) { FieldReference field = instruction.getDeclaredField(); if (!field.getFieldType().isPrimitiveType()) { bingo = true; } }
@Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { if (isStatic()) return insts.GetInstruction(iindex, defs == null || defs.length == 0 ? result : defs[0], getDeclaredField()); else return insts.GetInstruction(iindex, defs == null || defs.length == 0 ? result : defs[0], uses == null ? getRef() : uses[0], getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { FieldReference field = instruction.getDeclaredField(); if (!field.getFieldType().isPrimitiveType()) { bingo = true; } }
@Override public SSAInstruction copyForSSA(SSAInstructionFactory insts, int[] defs, int[] uses) { if (isStatic()) return insts.GetInstruction(iindex, defs == null || defs.length == 0 ? result : defs[0], getDeclaredField()); else return insts.GetInstruction(iindex, defs == null || defs.length == 0 ? result : defs[0], uses == null ? getRef() : uses[0], getDeclaredField()); }
@Override public String toString(SymbolTable symbolTable) { if (isStatic()) { return getValueString(symbolTable, result) + " = getstatic " + getDeclaredField(); } else { return getValueString(symbolTable, result) + " = getfield " + getDeclaredField() + ' ' + getValueString(symbolTable, getRef()); } }
@Override public String toString(SymbolTable symbolTable) { if (isStatic()) { return getValueString(symbolTable, result) + " = getstatic " + getDeclaredField(); } else { return getValueString(symbolTable, result) + " = getfield " + getDeclaredField() + ' ' + getValueString(symbolTable, getRef()); } }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction get) { String propName = get.getDeclaredField().getName().toString(); if(propName.startsWith("global ")) propName = propName.substring("global ".length()); Vertex v = factory.makePropVertex(propName), w = factory.makeVarVertex(func, get.getDef()); flowgraph.addEdge(v, w); handleLexicalDef(get.getDef()); }
@Override public void visitGet(SSAGetInstruction get) { String propName = get.getDeclaredField().getName().toString(); if(propName.startsWith("global ")) propName = propName.substring("global ".length()); Vertex v = factory.makePropVertex(propName), w = factory.makeVarVertex(func, get.getDef()); flowgraph.addEdge(v, w); handleLexicalDef(get.getDef()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.getRef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.getRef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.getRef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.getRef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.getRef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public void visitGet(SSAGetInstruction instruction) { visitGetInternal(instruction.getDef(), instruction.getRef(), instruction.isStatic(), instruction.getDeclaredField()); }
@Override public IntSet getTargets(int d1) { // first, gen this statement int factNum = domain.getMappedIndex(cha.lookupClass(getInstr.getDeclaredField().getDeclaringClass())); assert factNum != -1; MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); result.add(factNum); // if incoming statement is some different statement that defs the same static field, kill it; otherwise, keep it if (d1 != factNum) { result.add(d1); } return result; }
@Test public void testQualifiedStatic() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Collections.singletonList( cg -> { MethodReference mref = descriptorToMethodRef("Source#QualifiedStatic#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); CGNode node = cg.getNodes(mref).iterator().next(); SSAInstruction s = node.getIR().getInstructions()[4]; Assert.assertTrue("Did not find a getstatic instruction.", s instanceof SSAGetInstruction && ((SSAGetInstruction) s).isStatic()); final FieldReference field = ((SSAGetInstruction) s).getDeclaredField(); Assert.assertEquals("Expected a getstatic for 'value'.", field.getName().toString(), "value"); Assert.assertEquals("Expected a getstatic for 'value'.", field.getDeclaringClass().getName().toString(), "LFooQ"); }), true, null); }