public String getShortClassName(AsmClass asmClass) { return StringUtils.substringAfterLast(asmClass.getInternalName(), "/"); }
public String getDisplayName() { return getInternalName().replace('/', '.'); }
public String getDisplayName() { return getInternalName().replace('/', '.'); }
private void decoracteAsmClassFromBytecode(AsmClass asmClass, DETAIL_LEVEL level) { InputStream input = null; try { AsmClassVisitor classVisitor = new AsmClassVisitor(this, asmClass, level); input = classLoader.getResourceAsStream(asmClass.getInternalName() + ".class"); ClassReader asmReader = new ClassReader(input); asmReader.accept(classVisitor, 0); } catch (IOException e) { LOG.warn("Class '" + asmClass.getInternalName() + "' is not accessible through the ClassLoader."); } catch (SecurityException e) { LOG.warn("Class '" + asmClass.getInternalName() + "' is not accessible through the ClassLoader. One signed jar seems to be corrupted."); } catch (Exception e) { LOG.error("Unable to process bytecode of class '" + asmClass.getInternalName() + "'", e); } finally { IOUtils.closeQuietly(input); } }
private static boolean isSubClassOfRuntimeException(AsmClass thrownClass) { for (AsmClass current = thrownClass; current != null; current = current.getSuperClass()) { if ("java/lang/RuntimeException".equals(current.getInternalName())) { return true; } } return false; }
private void decoracteAsmClassFromBytecode(AsmClass asmClass, DETAIL_LEVEL level) { InputStream input = null; try { AsmClassVisitor classVisitor = new AsmClassVisitor(this, asmClass, level); input = classLoader.getResourceAsStream(asmClass.getInternalName() + ".class"); ClassReader asmReader = new ClassReader(input); asmReader.accept(classVisitor, 0); } catch (IOException e) { LOG.warn("Class '" + asmClass.getInternalName() + "' is not accessible through the ClassLoader."); } catch (SecurityException e) { LOG.warn("Class '" + asmClass.getInternalName() + "' is not accessible through the ClassLoader. One signed jar seems to be corrupted."); } catch (Exception e) { LOG.error("Unable to process bytecode of class '" + asmClass.getInternalName() + "'", e); } finally { IOUtils.closeQuietly(input); } }
private Resource getResource(AsmClass asmClass) { return javaResourceLocator.findResourceByClassName(asmClass.getInternalName()); }
@Override public void visitClass(AsmClass asmClass) { String nameAsmClass = asmClass.getInternalName(); if (WildcardPattern.match(getFromPatterns(), nameAsmClass)) { this.asmClass = asmClass; this.internalNames = Maps.newHashMap(); } else { this.asmClass = null; } }
@Nullable protected final SourceFile getSourceFile(AsmClass asmClass) { String sourceFileKey = javaResourceLocator.findSourceFileKeyByClassName(asmClass.getInternalName()); if (sourceFileKey == null) { return null; } return (SourceFile) index.search(sourceFileKey); }
@Nullable protected final Resource getSourceFile(AsmClass asmClass) { return context.getJavaResourceLocator().findResourceByClassName(asmClass.getInternalName()); }
@Override public void visitEdge(AsmEdge edge) { if (asmClass != null && edge != null) { String internalNameTargetClass = edge.getTargetAsmClass().getInternalName(); if (!internalNames.containsKey(internalNameTargetClass)) { if (WildcardPattern.match(getToPatterns(), internalNameTargetClass)) { int sourceLineNumber = getSourceLineNumber(edge); logMessage(asmClass.getInternalName(), internalNameTargetClass, sourceLineNumber); } } else { int sourceLineNumber = getSourceLineNumber(edge); // we log only first occurrence with non-zero line number if exists Integer line = internalNames.get(internalNameTargetClass).getLine(); if ((line == null || line == 0) && sourceLineNumber != 0) { logMessage(asmClass.getInternalName(), internalNameTargetClass, sourceLineNumber); } } } }
private Resource getResource(AsmClass asmClass) { return getContext().getJavaResourceLocator().findResourceByClassName(asmClass.getInternalName()); }
protected final int getMethodLineNumber(AsmMethod asmMethod) { MethodSignature methodSignature = MethodSignatureScanner.scan(asmMethod.getGenericKey()); AsmClass asmClass = asmMethod.getParent(); Integer result = javaResourceLocator.getMethodStartLine(asmClass.getInternalName() + "#" + MethodSignaturePrinter.print(methodSignature)); if (result != null) { return result; } return -1; }
@Override public void visitEdge(AsmEdge edge) { if (edge.getTo() instanceof AsmMethod) { AsmMethod targetMethod = (AsmMethod) edge.getTo(); AsmClass targetClass = targetMethod.getParent(); if ("java/io/File".equals(targetClass.getInternalName()) && "deleteOnExit()V".equals(targetMethod.getKey())) { SourceFile sourceFile = getSourceFile(asmClass); CheckMessage message = new CheckMessage(this, "Do not use method 'File#deleteOnExit()'."); message.setLine(edge.getSourceLineNumber()); sourceFile.log(message); } } }
protected final int getMethodLineNumber(AsmMethod asmMethod) { MethodSignature methodSignature = MethodSignatureScanner.scan(asmMethod.getGenericKey()); AsmClass asmClass = asmMethod.getParent(); Integer result = context.getJavaResourceLocator().getMethodStartLine(asmClass.getInternalName() + "#" + MethodSignaturePrinter.print(methodSignature)); if (result != null) { return result; } return -1; }