public static XField createXField(FieldDescriptor desc) { XFactory xFactory = AnalysisContext.currentXFactory(); XField m = xFactory.fields.get(desc); if (m != null) { return m; } m = xFactory.resolveXField(desc); xFactory.fields.put(desc, m); return m; }
public static @Nonnull XField getExactXField(FieldDescriptor desc) { XFactory xFactory = AnalysisContext.currentXFactory(); XField f = xFactory.fields.get(desc); if (f == null) { return new UnresolvedXField(desc); } return f; }
public static void profile() { XFactory xFactory = AnalysisContext.currentXFactory(); int count = 0; for (XMethod m : xFactory.methods.values()) { if (m instanceof MethodInfo) { count++; } } System.out.printf("XFactory cached methods: %d/%d%n", count, xFactory.methods.size()); DescriptorFactory.instance().profile(); }
public static XMethod createXMethod(MethodDescriptor desc) { XFactory xFactory = AnalysisContext.currentXFactory(); XMethod m = xFactory.methods.get(desc); if (m != null) { return m; } m = xFactory.resolveXMethod(desc); if (m instanceof MethodDescriptor) { xFactory.methods.put((MethodDescriptor) m, m); DescriptorFactory.instance().canonicalize((MethodDescriptor) m); } else { xFactory.methods.put(desc, m); } return m; }
public ReflectiveClasses(BugReporter bugReporter) { AnalysisContext.currentXFactory().addReflectiveClasses(DescriptorFactory.createClassDescriptor(java.lang.System.class)); }
private void process(@SlashedClassName String className) { ClassDescriptor d = DescriptorFactory.createClassDescriptor(className); AnalysisContext.currentXFactory().addReflectiveClasses(d); } }
@Override public AnnotatedObject getContainingScope() { // TODO Auto-generated method stub return AnalysisContext.currentXFactory().getXClass( DescriptorFactory.createClassDescriptorFromDottedClassName(getClassName())); }
private ClassVertex optionallyResolveClassVertex(ClassDescriptor classDescriptor) { ClassVertex typeVertex = classDescriptorToVertexMap.get(classDescriptor); if (typeVertex == null) { // We have never tried to resolve this ClassVertex before. // Try to find the XClass for this class. XClass xclass = AnalysisContext.currentXFactory().getXClass(classDescriptor); if (xclass == null) { // Class we're trying to resolve doesn't exist. // XXX: unfortunately, we don't know if the missing class is a // class or interface typeVertex = addClassVertexForMissingClass(classDescriptor, false); } else { // Add the class and all its superclasses/superinterfaces to the // inheritance graph. // This will result in a resolved ClassVertex. typeVertex = addClassAndGetClassVertex(xclass); } } return typeVertex; }
Map.Entry<XField, OpcodeStack.Item> entry = i.next(); XField f = entry.getKey(); if ( AnalysisContext.currentXFactory().isReflectiveClass(f.getClassDescriptor())) { i.remove(); removed++;
private void addPropertiesForMethodContainingWarning(WarningPropertySet<WarningProperty> propertySet) { XMethod xMethod = XFactory.createXMethod(classContext.getJavaClass(), method); boolean uncallable = !AnalysisContext.currentXFactory().isCalledDirectlyOrIndirectly(xMethod) && xMethod.isPrivate(); if (uncallable) { propertySet.addProperty(GeneralWarningProperty.IN_UNCALLABLE_METHOD); } }
private void addPropertiesForMethodContainingWarning(WarningPropertySet<WarningProperty> propertySet) { XMethod xMethod = XFactory.createXMethod(classContext.getJavaClass(), method); boolean uncallable = !AnalysisContext.currentXFactory().isCalledDirectlyOrIndirectly(xMethod) && xMethod.isPrivate(); if (uncallable) { propertySet.addProperty(GeneralWarningProperty.IN_UNCALLABLE_METHOD); } }
public void setAppClassList(List<ClassDescriptor> appClassCollection) { // FIXME: we really should drive the progress callback here HashSet<ClassDescriptor> appSet = new HashSet<>(appClassCollection); Collection<ClassDescriptor> allClassDescriptors = new ArrayList<>(DescriptorFactory.instance() .getAllClassDescriptors()); for (ClassDescriptor appClass : allClassDescriptors) { try { XClass xclass = currentXFactory().getXClass(appClass); if (xclass == null) { continue; } // Add the application class to the database if (appSet.contains(appClass)) { getSubtypes2().addApplicationClass(xclass); } else if (xclass instanceof ClassInfo) { getSubtypes2().addClass(xclass); } } catch (Exception e) { AnalysisContext.logError("Unable to get XClass for " + appClass, e); } } if (true && Subtypes2.DEBUG) { System.out.println(getSubtypes2().getGraph().getNumVertices() + " vertices in inheritance graph"); } }
@Override public void report() { Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); for (XField f : AnalysisContext.currentXFactory().allFields()) { if (isVolatileArray(f) && subtypes2.isApplicationClass(f.getClassDescriptor())) { int priority = LOW_PRIORITY; if (initializationWrites.contains(f) && !otherWrites.contains(f)) { priority = NORMAL_PRIORITY; } bugReporter.reportBug(new BugInstance(this, "VO_VOLATILE_REFERENCE_TO_ARRAY", priority).addClass( f.getClassDescriptor()).addField(f)); } } }
XClass xClass = AnalysisContext.currentXFactory().getXClass(cd); if (xClass == null) { return Priorities.IGNORE_PRIORITY;
XClass superclassXClass = AnalysisContext.currentXFactory().getXClass(superclassDescriptor); if (superclassXClass == null) {
public boolean isSubtype(ClassDescriptor subDesc, ClassDescriptor... superDesc) throws ClassNotFoundException { for (ClassDescriptor s : superDesc) { if (subDesc.equals(s)) { return true; } } XClass xclass = AnalysisContext.currentXFactory().getXClass(subDesc); if (xclass != null) { ClassDescriptor xSuper = xclass.getSuperclassDescriptor(); for (ClassDescriptor s : superDesc) { if (s.equals(xSuper)) { return true; } } } SupertypeQueryResults supertypeQueryResults = getSupertypeQueryResults(subDesc); for (ClassDescriptor s : superDesc) { if (supertypeQueryResults.containsType(s)) { return true; } } return false; }
XClass xclass = AnalysisContext.currentXFactory().getXClass(subDesc); if (xclass != null) { ClassDescriptor xSuper = xclass.getSuperclassDescriptor();
XClass xClass = AnalysisContext.currentXFactory().getXClass(superDescriptor); if(xClass == null || (!xClass.isInterface() && !xClass.isAbstract())) { return false; continue; XClass xSubClass = AnalysisContext.currentXFactory().getXClass(subDescriptor); if (xSubClass == null || (!xSubClass.isAbstract() && !xSubClass.isInterface() && !subtypes2.isSubtype(subDescriptor,
XFactory factory = AnalysisContext.currentXFactory(); String key = obj.getName() + ":" + obj.getSignature(); if (!factory.isCalled(xmethod) && (obj.isStatic() || !definedInSuperClassOrInterface(clazz, key))) {
&& !AnalysisContext.currentXFactory().isEmptyArrayField(getXFieldOperand())) { fieldOnTOS = true; thisOnTOS = false; && !AnalysisContext.currentXFactory().isEmptyArrayField(getXFieldOperand())) { fieldOnTOS = true; thisOnTOS = false;