@Override public ClassNameAndSuperclassInfo analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { // Get InputStream reading from class data ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); DataInputStream classDataIn = new DataInputStream(new ByteArrayInputStream(classData.getData())); // Read the class info ClassParserInterface parser = new ClassParser(classDataIn, descriptor, classData.getCodeBaseEntry()); ClassNameAndSuperclassInfo.Builder classInfoBuilder = new ClassNameAndSuperclassInfo.Builder(); parser.parse(classInfoBuilder); ClassNameAndSuperclassInfo classInfo = classInfoBuilder.build(); if (!classInfo.getClassDescriptor().equals(descriptor)) { throw new ClassNameMismatchException(descriptor, classInfo.getClassDescriptor(), classData.getCodeBaseEntry()); } return classInfo; }
@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 FBClassReader analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); FBClassReader classReader = new FBClassReader(classData.getData()); return classReader; }
@Override public ClassInfo analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { if (descriptor instanceof ClassInfo) { return (ClassInfo) descriptor; } ClassData classData; try { classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); } catch (edu.umd.cs.findbugs.classfile.MissingClassException e) { if (!"package-info".equals(descriptor.getSimpleName())) { throw e; } ClassInfo.Builder builder = new ClassInfo.Builder(); builder.setClassDescriptor(descriptor); builder.setAccessFlags(1536); return builder.build(); } // Read the class info FBClassReader reader = analysisCache.getClassAnalysis(FBClassReader.class, descriptor); ClassParserInterface parser = new ClassParserUsingASM(reader, descriptor, classData.getCodeBaseEntry()); ClassInfo.Builder classInfoBuilder = new ClassInfo.Builder(); parser.parse(classInfoBuilder); ClassInfo classInfo = classInfoBuilder.build(); if (!classInfo.getClassDescriptor().equals(descriptor)) { throw new ClassNameMismatchException(descriptor, classInfo.getClassDescriptor(), classData.getCodeBaseEntry()); } return classInfo; }
return new ClassData(descriptor, codeBaseEntry, data);
static byte[] loadClassData(String name) throws CheckedAnalysisException { ClassDescriptor d = DescriptorFactory.createClassDescriptorFromDottedClassName(name); ClassData data = Global.getAnalysisCache().getClassAnalysis(ClassData.class, d); return data.getData(); } static class Data {
@Override public ClassInfo analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { if (descriptor instanceof ClassInfo) { return (ClassInfo) descriptor; } ClassData classData; try { classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); } catch (edu.umd.cs.findbugs.classfile.MissingClassException e) { if (!"package-info".equals(descriptor.getSimpleName())) { throw e; } ClassInfo.Builder builder = new ClassInfo.Builder(); builder.setClassDescriptor(descriptor); builder.setAccessFlags(1536); return builder.build(); } // Read the class info FBClassReader reader = analysisCache.getClassAnalysis(FBClassReader.class, descriptor); ClassParserInterface parser = new ClassParserUsingASM(reader, descriptor, classData.getCodeBaseEntry()); ClassInfo.Builder classInfoBuilder = new ClassInfo.Builder(); parser.parse(classInfoBuilder); ClassInfo classInfo = classInfoBuilder.build(); if (!classInfo.getClassDescriptor().equals(descriptor)) { throw new ClassNameMismatchException(descriptor, classInfo.getClassDescriptor(), classData.getCodeBaseEntry()); } return classInfo; }
return new ClassData(descriptor, codeBaseEntry, data);
public boolean isTooBig(ClassDescriptor desc) { IAnalysisCache analysisCache = Global.getAnalysisCache(); try { ClassContext classContext = analysisCache.getClassAnalysis(ClassContext.class, desc); ClassData classData = analysisCache.getClassAnalysis(ClassData.class, desc); if (classData.getData().length > 1000000) { return true; } try { JavaClass javaClass = classContext.getJavaClass(); if (javaClass.getMethods().length > 1000) { return true; } } catch (RuntimeException e) { AnalysisContext.logError("Error parsing class " + desc + " from " + classData.getCodeBaseEntry().getCodeBase(), e); return true; } } catch (RuntimeException e) { AnalysisContext.logError("Error getting class data for " + desc, e); return true; } catch (CheckedAnalysisException e) { AnalysisContext.logError("Could not get class context for " + desc, e); return true; } return false; }
public int getClassSize(ClassDescriptor desc) { IAnalysisCache analysisCache = Global.getAnalysisCache(); try { /* ClassContext classContext =*/ analysisCache.getClassAnalysis(ClassContext.class, desc); ClassData classData = analysisCache.getClassAnalysis(ClassData.class, desc); return classData.getData().length; } catch (RuntimeException e) { AnalysisContext.logError("Error getting class data for " + desc, e); return 10000; } catch (CheckedAnalysisException e) { AnalysisContext.logError("Could not get class context for " + desc, e); return 10000; } }
@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 ClassNameAndSuperclassInfo analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { // Get InputStream reading from class data ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); DataInputStream classDataIn = new DataInputStream(new ByteArrayInputStream(classData.getData())); // Read the class info ClassParserInterface parser = new ClassParser(classDataIn, descriptor, classData.getCodeBaseEntry()); ClassNameAndSuperclassInfo.Builder classInfoBuilder = new ClassNameAndSuperclassInfo.Builder(); parser.parse(classInfoBuilder); ClassNameAndSuperclassInfo classInfo = classInfoBuilder.build(); if (!classInfo.getClassDescriptor().equals(descriptor)) { throw new ClassNameMismatchException(descriptor, classInfo.getClassDescriptor(), classData.getCodeBaseEntry()); } return classInfo; }
@Override public FBClassReader analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { ClassData classData = analysisCache.getClassAnalysis(ClassData.class, descriptor); FBClassReader classReader = new FBClassReader(classData.getData()); return classReader; }
public boolean isTooBig(ClassDescriptor desc) { IAnalysisCache analysisCache = Global.getAnalysisCache(); try { ClassContext classContext = analysisCache.getClassAnalysis(ClassContext.class, desc); ClassData classData = analysisCache.getClassAnalysis(ClassData.class, desc); if (classData.getData().length > 1000000) { return true; } try { JavaClass javaClass = classContext.getJavaClass(); if (javaClass.getMethods().length > 1000) { return true; } } catch (RuntimeException e) { AnalysisContext.logError("Error parsing class " + desc + " from " + classData.getCodeBaseEntry().getCodeBase(), e); return true; } } catch (RuntimeException e) { AnalysisContext.logError("Error getting class data for " + desc, e); return true; } catch (CheckedAnalysisException e) { AnalysisContext.logError("Could not get class context for " + desc, e); return true; } return false; }
static byte[] loadClassData(String name) throws CheckedAnalysisException { ClassDescriptor d = DescriptorFactory.createClassDescriptorFromDottedClassName(name); ClassData data = Global.getAnalysisCache().getClassAnalysis(ClassData.class, d); return data.getData(); } static class Data {
public int getClassSize(ClassDescriptor desc) { IAnalysisCache analysisCache = Global.getAnalysisCache(); try { /* ClassContext classContext =*/ analysisCache.getClassAnalysis(ClassContext.class, desc); ClassData classData = analysisCache.getClassAnalysis(ClassData.class, desc); return classData.getData().length; } catch (RuntimeException e) { AnalysisContext.logError("Error getting class data for " + desc, e); return 10000; } catch (CheckedAnalysisException e) { AnalysisContext.logError("Could not get class context for " + desc, e); return 10000; } }