• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java LineNumber类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中org.apache.bcel.classfile.LineNumber的典型用法代码示例。如果您正苦于以下问题:Java LineNumber类的具体用法?Java LineNumber怎么用?Java LineNumber使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



LineNumber类属于org.apache.bcel.classfile包,在下文中一共展示了LineNumber类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: createMessage

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * Create message for storage at message key. The message includes the
 * provided message, the method name and, if obtainable, the line number.
 */
private String createMessage(Method method, String message) {
	StringBuilder result = new StringBuilder();

	result.append(method.getName());
	LineNumberTable table = method.getLineNumberTable();

	if (table != null) {
		LineNumber[] lineNumbers = table.getLineNumberTable();
		LineNumber linenumber = lineNumbers[0];
		int number = linenumber.getLineNumber();
		result.append(" [" + number + "]");
	}

	result.append(": ");
	result.append(message);

	return result.toString();
}
 
开发者ID:vimaier,项目名称:conqat,代码行数:23,代码来源:MethodAssessorBase.java


示例2: getSourceAnnotationForClass

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * @param className
 * @return
 */
static SourceLineAnnotation getSourceAnnotationForClass(String className, String sourceFileName) {

    int lastLine = -1;
    int firstLine = Integer.MAX_VALUE;

    try {
        JavaClass targetClass = AnalysisContext.currentAnalysisContext().lookupClass(className);
        for (Method m : targetClass.getMethods()) {
            Code c = m.getCode();
            if (c != null) {
                LineNumberTable table = c.getLineNumberTable();
                if (table != null)
                    for (LineNumber line : table.getLineNumberTable()) {
                        lastLine = Math.max(lastLine, line.getLineNumber());
                        firstLine = Math.min(firstLine, line.getLineNumber());
                    }
            }
        }
    } catch (ClassNotFoundException e) {
        AnalysisContext.reportMissingClass(e);
    }
    if (firstLine < Integer.MAX_VALUE)
        return new SourceLineAnnotation(className, sourceFileName, firstLine, lastLine, -1, -1);
    return SourceLineAnnotation.createUnknown(className, sourceFileName);
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:30,代码来源:SourceLineAnnotation.java


示例3: foundSwitchNoDefault

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
private void foundSwitchNoDefault(SourceLineAnnotation s) {
    LineNumberTable table = getCode().getLineNumberTable();

    if (table != null) {
        int startLine = s.getStartLine();
        int prev = Integer.MIN_VALUE;
        for (LineNumber ln : table.getLineNumberTable()) {
            int thisLineNumber = ln.getLineNumber();
            if (thisLineNumber < startLine && thisLineNumber > prev && ln.getStartPC() < s.getStartBytecode())
                prev = thisLineNumber;
        }
        int diff = startLine - prev;
        if (diff > 5)
            return;

        bugAccumulator.accumulateBug(new BugInstance(this, "SF_SWITCH_NO_DEFAULT", NORMAL_PRIORITY).addClassAndMethod(this),
                s);
    }

}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:21,代码来源:SwitchFallthrough.java


示例4: forEntireMethod

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
private static SourceLineAnnotation forEntireMethod(String className, String sourceFile,
                                                    LineNumberTable lineNumberTable, int codeSize) {
	LineNumber[] table = lineNumberTable.getLineNumberTable();
	if (table != null && table.length > 0) {
		LineNumber first = table[0];
		LineNumber last = table[table.length - 1];
		return new SourceLineAnnotation(className, sourceFile, first.getLineNumber(), last.getLineNumber(),
		        0, codeSize - 1);
	} else {
		return createUnknown(className, sourceFile, 0, codeSize - 1);
	}
}
 
开发者ID:parabuild-ci,项目名称:parabuild-ci,代码行数:13,代码来源:SourceLineAnnotation.java


示例5: checkTable

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
private void checkTable(LineNumberTable table) {
	if (DEBUG) System.out.println("line number table has length " + table.getTableLength());
	LineNumber[] entries = table.getLineNumberTable();
	int lastBytecode = -1;
	for (int i = 0; i < entries.length; ++i) {
		LineNumber ln = entries[i];
		if (DEBUG) System.out.println("Entry " + i + ": pc=" + ln.getStartPC() + ", line=" + ln.getLineNumber());
		int pc = ln.getStartPC();
		if (pc <= lastBytecode) throw new IllegalStateException("LineNumberTable is not sorted");
	}
}
 
开发者ID:parabuild-ci,项目名称:parabuild-ci,代码行数:12,代码来源:LineNumberMap.java


示例6: visitLineNumberTable

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
@Override
public void visitLineNumberTable(LineNumberTable obj) {
    super.visitLineNumberTable(obj);
    LineNumber[] line_number_table = obj.getLineNumberTable();
    for (LineNumber aLine_number_table : line_number_table)
        aLine_number_table.accept(this);
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:8,代码来源:PreorderVisitor.java


示例7: forFirstLineOfMethod

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * Make a best-effort attempt to create a SourceLineAnnotation for the first
 * line of a method.
 *
 * @param methodDescriptor
 *            a method
 * @return SourceLineAnnotation describing the first line of the method
 *         (insofar as we can actually figure that out from the bytecode)
 */
public static SourceLineAnnotation forFirstLineOfMethod(MethodDescriptor methodDescriptor) {
    SourceLineAnnotation result = null;

    try {
        Method m = Global.getAnalysisCache().getMethodAnalysis(Method.class, methodDescriptor);
        XClass xclass = Global.getAnalysisCache().getClassAnalysis(XClass.class, methodDescriptor.getClassDescriptor());
        LineNumberTable lnt = m.getLineNumberTable();
        String sourceFile = xclass.getSource();
        if (sourceFile != null && lnt != null) {
            int firstLine = Integer.MAX_VALUE;
            int bytecode = 0;
            LineNumber[] entries = lnt.getLineNumberTable();
            for (LineNumber entry : entries) {
                if (entry.getLineNumber() < firstLine) {
                    firstLine = entry.getLineNumber();
                    bytecode = entry.getStartPC();
                }
            }
            if (firstLine < Integer.MAX_VALUE) {

                result = new SourceLineAnnotation(methodDescriptor.getClassDescriptor().toDottedClassName(), sourceFile,
                        firstLine, firstLine, bytecode, bytecode);
            }
        }
    } catch (CheckedAnalysisException e) {
        // ignore
    }

    if (result == null) {
        result = createUnknown(methodDescriptor.getClassDescriptor().toDottedClassName());
    }
    return result;
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:43,代码来源:SourceLineAnnotation.java


示例8: getNextSourceLine

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
public static int getNextSourceLine(LineNumberTable lineNumbers, int sourceLine) {
    int result = Integer.MAX_VALUE;
    for (LineNumber ln : lineNumbers.getLineNumberTable()) {

        int thisLine = ln.getLineNumber();
        if (sourceLine < thisLine && thisLine < result)
            result = thisLine;
    }
    return result;

}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:12,代码来源:FindUselessControlFlow.java


示例9: checkTable

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
private void checkTable(LineNumberTable table) {
    if (DEBUG)
        System.out.println("line number table has length " + table.getTableLength());
    LineNumber[] entries = table.getLineNumberTable();
    int lastBytecode = -1;
    for (int i = 0; i < entries.length; ++i) {
        LineNumber ln = entries[i];
        if (DEBUG)
            System.out.println("Entry " + i + ": pc=" + ln.getStartPC() + ", line=" + ln.getLineNumber());
        int pc = ln.getStartPC();
        if (pc <= lastBytecode)
            throw new IllegalStateException("LineNumberTable is not sorted");
    }
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:15,代码来源:LineNumberMap.java


示例10: getLineNumberTable

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * @return `LineNumberTable' attribute of all the local variables of this method.
 */
public LineNumberTable getLineNumberTable( ConstantPoolGen cp ) {
    int size = line_number_vec.size();
    LineNumber[] ln = new LineNumber[size];
    try {
        for (int i = 0; i < size; i++) {
            ln[i] = ((LineNumberGen) line_number_vec.get(i)).getLineNumber();
        }
    } catch (ArrayIndexOutOfBoundsException e) {
    } // Never occurs
    return new LineNumberTable(cp.addUtf8("LineNumberTable"), 2 + ln.length * 4, ln, cp
            .getConstantPool());
}
 
开发者ID:Hu6,项目名称:VestaClient,代码行数:16,代码来源:MethodGen.java


示例11: LineNumberMap

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * Constructor.
 *
 * @param methodGen the method to summarize line numbers for
 */
public LineNumberMap(MethodGen methodGen) {
	this.methodGen = methodGen;
	lineNumberMap = new IdentityHashMap<InstructionHandle, LineNumber>();
	hasLineNumbers = false;
}
 
开发者ID:parabuild-ci,项目名称:parabuild-ci,代码行数:11,代码来源:LineNumberMap.java


示例12: build

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * Build the line number information.
 * Should be called before any other methods.
 */
public void build() {
	int numGood = 0, numBytecodes = 0;

	if (DEBUG) {
		System.out.println("Method: " + methodGen.getName() + " - " + methodGen.getSignature() +
		        "in class " + methodGen.getClassName());
	}

	// Associate line number information with each InstructionHandle
	LineNumberTable table = methodGen.getLineNumberTable(methodGen.getConstantPool());

	if (table != null && table.getTableLength() > 0) {
		checkTable(table);
		InstructionHandle handle = methodGen.getInstructionList().getStart();
		while (handle != null) {
			int bytecodeOffset = handle.getPosition();
			if (bytecodeOffset < 0)
				throw new IllegalStateException("Bad bytecode offset: " + bytecodeOffset);
			if (DEBUG) System.out.println("Looking for source line for bytecode offset " + bytecodeOffset);
			int sourceLine;
			try {
				sourceLine = table.getSourceLine(bytecodeOffset);
			} catch (ArrayIndexOutOfBoundsException e) {
				if (LINE_NUMBER_BUG)
					throw e;
				else
					sourceLine = -1;
			}
			if (sourceLine >= 0)
				++numGood;
			lineNumberMap.put(handle,
			        new LineNumber(bytecodeOffset, sourceLine));
			handle = handle.getNext();
			++numBytecodes;
		}
		hasLineNumbers = true;

		if (DEBUG) System.out.println("\t" + numGood + "/" + numBytecodes + " had valid line numbers");
	}
}
 
开发者ID:parabuild-ci,项目名称:parabuild-ci,代码行数:45,代码来源:LineNumberMap.java


示例13: visitLineNumber

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
@Override
public void visitLineNumber(LineNumber obj) {
	if (obj.getLineNumber() > this.jClass.getLineCount()) {
		this.jClass.setLineCount(obj.getLineNumber());
	}
}
 
开发者ID:jdepend,项目名称:cooper,代码行数:7,代码来源:SmallClassFileVisitor.java


示例14: visit

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
public void visit(LineNumber obj) {
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:3,代码来源:BetterVisitor.java


示例15: visitLineNumber

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
public void visitLineNumber(LineNumber obj) {
    visit(obj);
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:4,代码来源:BetterVisitor.java


示例16: getSizeOfSurroundingTryBlock

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
public static int getSizeOfSurroundingTryBlock(ConstantPool constantPool, Code code,
        @CheckForNull String vmNameOfExceptionClass, int pc) {
    int size = Integer.MAX_VALUE;
    int tightStartPC = 0;
    int tightEndPC = Integer.MAX_VALUE;
    if (code.getExceptionTable() == null)
        return size;
    for (CodeException catchBlock : code.getExceptionTable()) {
        if (vmNameOfExceptionClass != null) {
            Constant catchType = constantPool.getConstant(catchBlock.getCatchType());
            if (catchType == null || catchType instanceof ConstantClass
                    && !((ConstantClass) catchType).getBytes(constantPool).equals(vmNameOfExceptionClass))
                continue;
        }
        int startPC = catchBlock.getStartPC();
        int endPC = catchBlock.getEndPC();
        if (pc >= startPC && pc <= endPC) {
            int thisSize = endPC - startPC;
            if (size > thisSize) {
                size = thisSize;
                tightStartPC = startPC;
                tightEndPC = endPC;
            }
        }
    }
    if (size == Integer.MAX_VALUE)
        return size;

    // try to guestimate number of lines that correspond
    size = (size + 7) / 8;
    LineNumberTable lineNumberTable = code.getLineNumberTable();
    if (lineNumberTable == null)
        return size;

    int count = 0;
    for (LineNumber line : lineNumberTable.getLineNumberTable()) {
        if (line.getStartPC() > tightEndPC)
            break;
        if (line.getStartPC() >= tightStartPC)
            count++;
    }
    return count;

}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:45,代码来源:Util.java


示例17: visit

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
@Override
public void visit(LineNumber obj) {
    sawLineNumbers = true;
    int line = obj.getLineNumber();
    lines.set(line);
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:7,代码来源:FindBugsSummaryStats.java


示例18: build

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
/**
 * Build the line number information. Should be called before any other
 * methods.
 */
public void build() {
    int numGood = 0, numBytecodes = 0;

    if (DEBUG) {
        System.out.println("Method: " + methodGen.getName() + " - " + methodGen.getSignature() + "in class "
                + methodGen.getClassName());
    }

    // Associate line number information with each InstructionHandle
    LineNumberTable table = methodGen.getLineNumberTable(methodGen.getConstantPool());

    if (table != null && table.getTableLength() > 0) {
        checkTable(table);
        InstructionHandle handle = methodGen.getInstructionList().getStart();
        while (handle != null) {
            int bytecodeOffset = handle.getPosition();
            if (bytecodeOffset < 0)
                throw new IllegalStateException("Bad bytecode offset: " + bytecodeOffset);
            if (DEBUG)
                System.out.println("Looking for source line for bytecode offset " + bytecodeOffset);
            int sourceLine;
            try {
                sourceLine = table.getSourceLine(bytecodeOffset);
            } catch (ArrayIndexOutOfBoundsException e) {
                if (LINE_NUMBER_BUG)
                    throw e;
                else
                    sourceLine = -1;
            }
            if (sourceLine >= 0)
                ++numGood;
            lineNumberMap.put(handle, new LineNumber(bytecodeOffset, sourceLine));
            handle = handle.getNext();
            ++numBytecodes;
        }
        hasLineNumbers = true;

        if (DEBUG)
            System.out.println("\t" + numGood + "/" + numBytecodes + " had valid line numbers");
    }
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:46,代码来源:LineNumberMap.java


示例19: getSizeOfSurroundingTryBlock

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
public static int getSizeOfSurroundingTryBlock(ConstantPool constantPool, Code code,
        @CheckForNull @SlashedClassName String vmNameOfExceptionClass, int pc) {
    int size = Integer.MAX_VALUE;
    int tightStartPC = 0;
    int tightEndPC = Integer.MAX_VALUE;
    if (code.getExceptionTable() == null)
        return size;
    for (CodeException catchBlock : code.getExceptionTable()) {
        if (vmNameOfExceptionClass != null) {
            Constant catchType = constantPool.getConstant(catchBlock.getCatchType());
            if (catchType == null) continue;
            if (catchType instanceof ConstantClass) {
                String name = ((ConstantClass) catchType).getBytes(constantPool);
                   if (!name.equals(vmNameOfExceptionClass))
                       continue;
            }
        }
        int startPC = catchBlock.getStartPC();
        int endPC = catchBlock.getEndPC();
        if (pc >= startPC && pc <= endPC) {
            int thisSize = endPC - startPC;
            if (size > thisSize) {
                size = thisSize;
                tightStartPC = startPC;
                tightEndPC = endPC;
            }
        }
    }
    if (size == Integer.MAX_VALUE)
        return size;

    // try to guestimate number of lines that correspond
    size = (size + 7) / 8;
    LineNumberTable lineNumberTable = code.getLineNumberTable();
    if (lineNumberTable == null)
        return size;

    int count = 0;
    for (LineNumber line : lineNumberTable.getLineNumberTable()) {
        if (line.getStartPC() > tightEndPC)
            break;
        if (line.getStartPC() >= tightStartPC)
            count++;
    }
    return count;

}
 
开发者ID:OpenNTF,项目名称:FindBug-for-Domino-Designer,代码行数:48,代码来源:Util.java


示例20: visitLineNumber

import org.apache.bcel.classfile.LineNumber; //导入依赖的package包/类
public void visitLineNumber(LineNumber obj){
	// This does not represent an Attribute but is only
	// related to internal BCEL data representation.

	// see visitLineNumberTable(LineNumberTable)
}
 
开发者ID:Hu6,项目名称:VestaClient,代码行数:7,代码来源:Pass2Verifier.java



注:本文中的org.apache.bcel.classfile.LineNumber类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java Log4JLogChute类代码示例发布时间:2022-05-22
下一篇:
Java ModuleClassLoader类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap