/** * Constructor. * * @param classDescriptor * missing class * @param cause * underlying cause */ public MissingClassException(ClassDescriptor classDescriptor, Throwable cause) { super(classDescriptor.toResourceName(), cause); this.classDescriptor = classDescriptor; }
/** * Constructor. * * @param classDescriptor * missing class */ public MissingClassException(ClassDescriptor classDescriptor) { super(classDescriptor.toResourceName()); this.classDescriptor = classDescriptor; }
@Override public String getResourceName() { return descriptor.toResourceName(); }
@Override public InputStream openResource() throws IOException { InputStream stream = getClass().getClassLoader().getResourceAsStream(descriptor.toResourceName()); if(stream == null){ throw new IOException("Can not load '" + descriptor.toResourceName() + "' from SpotBugs classpath."); } return stream; }
/** * Get the resource name of the single file. We have to open the file and * parse the constant pool in order to find this out. * * @return the resource name (e.g., "java/lang/String.class" if the class is * java.lang.String) */ String getResourceName() { if (!resourceNameKnown) { // The resource name of a classfile can only be determined by // reading // the file and parsing the constant pool. // If we can't do this for some reason, then we just // make the resource name equal to the filename. try { resourceName = getClassDescriptor().toResourceName(); } catch (Exception e) { resourceName = fileName; } resourceNameKnown = true; } return resourceName; }
@Override public JavaClass analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { try { ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); JavaClass javaClass = new ClassParser(classData.getInputStream(), descriptor.toResourceName()).parse(); // Make sure that the JavaClass object knows the repository // it was loaded from. javaClass.setRepository(Repository.getRepository()); if (DEBUG_MISSING_CLASSES && !(javaClass.getRepository() instanceof AnalysisCacheToRepositoryAdapter)) { throw new IllegalStateException("this should not happen"); } return javaClass; } catch (RuntimeException e) { throw new RuntimeException("Unable to parse classfile for " + descriptor, e); } catch (IOException e) { throw new ResourceNotFoundException(descriptor.toResourceName(), e); } }
@Override public ClassNode analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { ClassReader classReader = analysisCache.getClassAnalysis(ClassReader.class, descriptor); ICodeBaseEntry entry = analysisCache.getClassPath().lookupResource(descriptor.toResourceName()); // One of the less-than-ideal features of ASM is that // invalid classfile format is indicated by a // random runtime exception rather than something // indicative of the real problem. try { ClassNode cn = new ClassNode(); classReader.accept(cn, 0); return cn; } catch (RuntimeException e) { throw new InvalidClassFileFormatException(descriptor, entry, e); } }
private String findFullyQualifiedSourceFileName(IClassPath classPath, ClassDescriptor classDesc) throws IOException, CheckedAnalysisException { try { // Open and parse the class file to attempt // to discover the source file name. ICodeBaseEntry codeBaseEntry = classPath.lookupResource(classDesc.toResourceName()); ClassParserUsingASM classParser = new ClassParserUsingASM(new ClassReader(codeBaseEntry.openResource()), classDesc, codeBaseEntry); ClassInfo.Builder classInfoBuilder = new ClassInfo.Builder(); classParser.parse(classInfoBuilder); ClassInfo classInfo = classInfoBuilder.build(); // Construct the fully-qualified source file name // based on the package name and source file name. String packageName = classDesc.getPackageName(); String sourceFile = classInfo.getSource(); if (!"".equals(packageName)) { packageName = packageName.replace('.', '/'); packageName += "/"; } String fullyQualifiedSourceFile = packageName + sourceFile; return fullyQualifiedSourceFile; } catch (CheckedAnalysisException e) { errorLogger.logError("Could scan class " + classDesc.toDottedClassName(), e); throw e; } finally { progress.finishClass(); } }
/** * Attempt to parse data of given resource in order to divine the real name * of the class contained in the resource. * * @param entry * the resource */ private void parseClassName(ICodeBaseEntry entry) { DataInputStream in = null; try { InputStream resourceIn = entry.openResource(); if (resourceIn == null) { throw new NullPointerException("Got null resource"); } in = new DataInputStream(resourceIn); ClassParserInterface parser = new ClassParser(in, null, entry); ClassNameAndSuperclassInfo.Builder builder = new ClassNameAndSuperclassInfo.Builder(); parser.parse(builder); String trueResourceName = builder.build().getClassDescriptor().toResourceName(); if (!trueResourceName.equals(entry.getResourceName())) { entry.overrideResourceName(trueResourceName); } } catch (IOException e) { errorLogger.logError("Invalid class resource " + entry.getResourceName() + " in " + entry, e); } catch (InvalidClassFileFormatException e) { errorLogger.logError("Invalid class resource " + entry.getResourceName() + " in " + entry, e); } finally { IO.close(in); } }
&& !classScreener.matches(classDescriptor.toResourceName())) { if (DEBUG) { System.out.println("*** Excluded by class screener");
String resourceName = descriptor.toResourceName();
/** * Constructor. * * @param classDescriptor * missing class */ public MissingClassException(ClassDescriptor classDescriptor) { super(classDescriptor.toResourceName()); this.classDescriptor = classDescriptor; }
@Override public String getResourceName() { return descriptor.toResourceName(); }
/** * Constructor. * * @param classDescriptor * missing class * @param cause * underlying cause */ public MissingClassException(ClassDescriptor classDescriptor, Throwable cause) { super(classDescriptor.toResourceName(), cause); this.classDescriptor = classDescriptor; }
@Override public InputStream openResource() throws IOException { InputStream stream = getClass().getClassLoader().getResourceAsStream(descriptor.toResourceName()); if(stream == null){ throw new IOException("Can not load '" + descriptor.toResourceName() + "' from FindBugs classpath."); } return stream; }
/** * Get the resource name of the single file. We have to open the file and * parse the constant pool in order to find this out. * * @return the resource name (e.g., "java/lang/String.class" if the class is * java.lang.String) */ String getResourceName() { if (!resourceNameKnown) { // The resource name of a classfile can only be determined by // reading // the file and parsing the constant pool. // If we can't do this for some reason, then we just // make the resource name equal to the filename. try { resourceName = getClassDescriptor().toResourceName(); } catch (Exception e) { resourceName = fileName; } resourceNameKnown = true; } return resourceName; }
@Override public JavaClass analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { try { ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); JavaClass javaClass = new ClassParser(classData.getInputStream(), descriptor.toResourceName()).parse(); // Make sure that the JavaClass object knows the repository // it was loaded from. javaClass.setRepository(Repository.getRepository()); if (DEBUG_MISSING_CLASSES && !(javaClass.getRepository() instanceof AnalysisCacheToRepositoryAdapter)) { throw new IllegalStateException("this should not happen"); } return javaClass; } catch (RuntimeException e) { throw new RuntimeException("Unable to parse classfile for " + descriptor, e); } catch (IOException e) { throw new ResourceNotFoundException(descriptor.toResourceName(), e); } }
@Override public ClassNode analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { ClassReader classReader = analysisCache.getClassAnalysis(ClassReader.class, descriptor); ICodeBaseEntry entry = analysisCache.getClassPath().lookupResource(descriptor.toResourceName()); // One of the less-than-ideal features of ASM is that // invalid classfile format is indicated by a // random runtime exception rather than something // indicative of the real problem. try { ClassNode cn = new ClassNode(); classReader.accept(cn, 0); return cn; } catch (RuntimeException e) { throw new InvalidClassFileFormatException(descriptor, entry, e); } }
private String findFullyQualifiedSourceFileName(IClassPath classPath, ClassDescriptor classDesc) throws IOException, CheckedAnalysisException { try { // Open and parse the class file to attempt // to discover the source file name. ICodeBaseEntry codeBaseEntry = classPath.lookupResource(classDesc.toResourceName()); ClassParserUsingASM classParser = new ClassParserUsingASM(new ClassReader(codeBaseEntry.openResource()), classDesc, codeBaseEntry); ClassInfo.Builder classInfoBuilder = new ClassInfo.Builder(); classParser.parse(classInfoBuilder); ClassInfo classInfo = classInfoBuilder.build(); // Construct the fully-qualified source file name // based on the package name and source file name. String packageName = classDesc.getPackageName(); String sourceFile = classInfo.getSource(); if (!"".equals(packageName)) { packageName = packageName.replace('.', '/'); packageName += "/"; } String fullyQualifiedSourceFile = packageName + sourceFile; return fullyQualifiedSourceFile; } catch (CheckedAnalysisException e) { errorLogger.logError("Could scan class " + classDesc.toDottedClassName(), e); throw e; } finally { progress.finishClass(); } }
/** * Attempt to parse data of given resource in order to divine the real name * of the class contained in the resource. * * @param entry * the resource */ private void parseClassName(ICodeBaseEntry entry) { DataInputStream in = null; try { InputStream resourceIn = entry.openResource(); if (resourceIn == null) { throw new NullPointerException("Got null resource"); } in = new DataInputStream(resourceIn); ClassParserInterface parser = new ClassParser(in, null, entry); ClassNameAndSuperclassInfo.Builder builder = new ClassNameAndSuperclassInfo.Builder(); parser.parse(builder); String trueResourceName = builder.build().getClassDescriptor().toResourceName(); if (!trueResourceName.equals(entry.getResourceName())) { entry.overrideResourceName(trueResourceName); } } catch (IOException e) { errorLogger.logError("Invalid class resource " + entry.getResourceName() + " in " + entry, e); } catch (InvalidClassFileFormatException e) { errorLogger.logError("Invalid class resource " + entry.getResourceName() + " in " + entry, e); } finally { IO.close(in); } }