public void setLocalTypeTable(LocalVariableTypeTable localTypeTable) { this.localTypeTable = localTypeTable; if (localTypeTable == null) { genericLocalVariables = null; } else { genericLocalVariables = new BitSet(); for(LocalVariable lv : localTypeTable.getLocalVariableTypeTable()) { if (lv.getSignature().indexOf('<') > 0) { genericLocalVariables.set(lv.getIndex()); } } } }
private void printLocal(Writer out, Writer fout, LocalVariable l, int[] v, List<String> defs, List<String> refs) throws IOException { v[l.getIndex()] = 1; v[l.getNameIndex()] = 1; v[l.getSignatureIndex()] = 1; if (!THIS.equals(l.getName())) { out.write(TAB);out.write(TAB); fout.write(TAB);fout.write(TAB); String sig=Utility.signatureToString(l.getSignature()); out.write(sig); fout.write(sig); out.write(SPACE); fout.write(SPACE); String t; out.write(t = l.getName()); defs.add(t); refs.add(t); fout.write(t); out.write(EOL); fout.write(EOL); } }
/** * returns the local variable at an index int the scope of PC * * @param lvt * the local variable table * @param index * the variable index * @param pc * the PC where the variable is used */ public static LocalVariable getLocalVariableAtPC(@Nonnull LocalVariableTable lvt, int index, int pc) { int length = lvt.getTableLength(); LocalVariable[] lvs = lvt.getLocalVariableTable(); for (int i = 0; i < length; i++) { if (lvs[i].getIndex() == index) { int startPC = lvs[i].getStartPC(); if ((pc >= startPC) && (pc < (startPC + lvs[i].getLength()))) { return lvs[i]; } } } return null; } }
@CheckForNull GenericObjectType getLocalVariable(int index, int pos) { if (genericLocalVariables == null || !genericLocalVariables.get(index)) { return null; } for (LocalVariable local : localTypeTable.getLocalVariableTypeTable()) { if (local.getIndex() == index && local.getStartPC() <= pos && pos < +local.getStartPC() + local.getLength()) { String signature = local.getSignature(); if (signature.indexOf('<') < 0) { continue; } Type t; try { t = GenericUtilities.getType(signature); if (t instanceof GenericObjectType) { return (GenericObjectType) t; } } catch (RuntimeException e) { AnalysisContext.logError("Bad signature " + signature + " for " + local.getName(), e); } return null; } } return null; }
if (var.getIndex() < numParms) { continue;
@Override public void visit(LocalVariable obj) { if (isReservedName(obj.getName())) { LocalVariableAnnotation var = new LocalVariableAnnotation(obj.getName(), obj.getIndex(), obj.getStartPC()); SourceLineAnnotation source = SourceLineAnnotation.fromVisitedInstruction(getClassContext(), this, obj.getStartPC()); BugInstance bug = new BugInstance(this, "NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER", NORMAL_PRIORITY) .addClassAndMethod(this).add(var).add(source); bugReporter.reportBug(bug); } }
public final LocalVariable getLocalVariable(final int index) { for (final LocalVariable variable : local_variable_type_table) { if (variable.getIndex() == index) { return variable; } } return null; }
/** @return first matching variable using index */ public final LocalVariable getLocalVariable(int index) { for(int i=0; i < local_variable_table_length; i++) if(local_variable_table[i].getIndex() == index) return local_variable_table[i]; return null; }
/** * * @param index the variable slot * * @return the first LocalVariable that matches the slot or null if not found * * @deprecated since 5.2 because multiple variables can share the * same slot, use getLocalVariable(int index, int pc) instead. */ @java.lang.Deprecated public final LocalVariable getLocalVariable( final int index ) { for (final LocalVariable variable : local_variable_table) { if (variable.getIndex() == index) { return variable; } } return null; }
public void setLocalTypeTable(LocalVariableTypeTable localTypeTable) { this.localTypeTable = localTypeTable; if (localTypeTable == null) { genericLocalVariables = null; } else { genericLocalVariables = new BitSet(); for(LocalVariable lv : localTypeTable.getLocalVariableTypeTable()) { if (lv.getSignature().indexOf('<') > 0) { genericLocalVariables.set(lv.getIndex()); } } } }
/** * * @param index the variable slot * @param pc the current pc that this variable is alive * * @return the LocalVariable that matches or null if not found */ public final LocalVariable getLocalVariable( final int index, final int pc ) { for (final LocalVariable variable : local_variable_table) { if (variable.getIndex() == index) { final int start_pc = variable.getStartPC(); final int end_pc = start_pc + variable.getLength(); if ((pc >= start_pc) && (pc <= end_pc)) { return variable; } } } return null; }
private void buildVariableEndScopeMap() { endOfScopes = new HashMap<>(); LocalVariableTable lvt = getMethod().getLocalVariableTable(); if (lvt != null) { int len = lvt.getLength(); for (int i = 0; i < len; i++) { @SuppressWarnings("deprecation") LocalVariable lv = lvt.getLocalVariable(i); if (lv != null) { Integer endPC = Integer.valueOf(lv.getStartPC() + lv.getLength()); BitSet vars = endOfScopes.get(endPC); if (vars == null) { vars = new BitSet(); endOfScopes.put(endPC, vars); } vars.set(lv.getIndex()); } } } }
private void buildVariableEndScopeMap() { LocalVariableTable lvt = getMethod().getLocalVariableTable(); if ((lvt == null) || (lvt.getLength() == 0)) { endOfScopes = Collections.emptyMap(); } else { int len = lvt.getLength(); endOfScopes = new HashMap<>((int) (len * 1.6)); for (int i = 0; i < len; i++) { @SuppressWarnings("deprecation") LocalVariable lv = lvt.getLocalVariable(i); if (lv != null) { Integer endPC = Integer.valueOf(lv.getStartPC() + lv.getLength()); BitSet vars = endOfScopes.get(endPC); if (vars == null) { vars = new BitSet(); endOfScopes.put(endPC, vars); } vars.set(lv.getIndex()); } } } }
public RealLocalVariableTableEntry(LocalVariable []locals, int _nameIndex, int _length) { super(_nameIndex, _length); for (LocalVariable i : locals) { getPool().add(new RealLocalVariableInfo(i.getStartPC(), i.getLength(), i.getNameIndex(), i.getSignatureIndex(), i.getIndex())); } }
private void adjustLocalVariableTypeTable(final LocalVariableTable lvt) { final LocalVariable[] lv = lvt.getLocalVariableTable(); final LocalVariable[] lvg = local_variable_type_table.getLocalVariableTypeTable(); for (final LocalVariable element : lvg) { for (final LocalVariable l : lv) { if (element.getName().equals(l.getName()) && element.getIndex() == l.getOrigIndex()) { element.setLength(l.getLength()); element.setStartPC(l.getStartPC()); element.setIndex(l.getIndex()); break; } } } }
/** * Initialize from another object. Note that both objects use the same * references (shallow copy). Use copy() for a physical copy. */ public LocalVariable(LocalVariable c) { this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(), c.getConstantPool()); }
/** * Initialize from another object. Note that both objects use the same * references (shallow copy). Use copy() for a physical copy. */ public LocalVariable(final LocalVariable c) { this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(), c.getConstantPool()); this.orig_index = c.getOrigIndex(); }
public static String getLocalVariableName(Method method, int slot, int pc) { if (method.getLocalVariableTable() != null) { LocalVariable[] table= method.getLocalVariableTable().getLocalVariableTable(); LocalVariable lvar= null; for (int i= 0; i < table.length; i++) { lvar= table[i]; if (lvar.getIndex() == slot && lvar.getStartPC() <= pc && pc <= lvar.getStartPC() + lvar.getLength()) { String name2= lvar.getName(); if (name2.equals("in")) name2= "in_"; if (isSuperpositionDetected(table, lvar)) throw new UnhandledCompilerProblemException(); return name2; } } } return "l" + slot; }
@Override public void visit(LocalVariable obj) { if (isReservedName(obj.getName())) { LocalVariableAnnotation var = new LocalVariableAnnotation(obj.getName(), obj.getIndex(), obj.getStartPC()); SourceLineAnnotation source = SourceLineAnnotation.fromVisitedInstruction(getClassContext(), this, obj.getStartPC()); BugInstance bug = new BugInstance(this, "NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER", NORMAL_PRIORITY) .addClassAndMethod(this).add(var).add(source); bugReporter.reportBug(bug); } }
private void updateLocalVariableTable(final LocalVariableTable a) { final LocalVariable[] lv = a.getLocalVariableTable(); removeLocalVariables(); for (final LocalVariable l : lv) { InstructionHandle start = il.findHandle(l.getStartPC()); final InstructionHandle end = il.findHandle(l.getStartPC() + l.getLength()); // Repair malformed handles if (null == start) { start = il.getStart(); } // end == null => live to end of method // Since we are recreating the LocalVaraible, we must // propagate the orig_index to new copy. addLocalVariable(l.getName(), Type.getType(l.getSignature()), l .getIndex(), start, end, l.getOrigIndex()); } }