Package com.mebigfatguy.fbcontrib.detect
Class OverlyConcreteParameter
- java.lang.Object
-
- edu.umd.cs.findbugs.visitclass.BetterVisitor
-
- edu.umd.cs.findbugs.visitclass.PreorderVisitor
-
- edu.umd.cs.findbugs.visitclass.AnnotationVisitor
-
- edu.umd.cs.findbugs.visitclass.DismantleBytecode
-
- edu.umd.cs.findbugs.BytecodeScanningDetector
-
- com.mebigfatguy.fbcontrib.detect.OverlyConcreteParameter
-
- All Implemented Interfaces:
edu.umd.cs.findbugs.Detector
,edu.umd.cs.findbugs.Priorities
,edu.umd.cs.findbugs.visitclass.Constants2
,org.apache.bcel.classfile.Visitor
,org.apache.bcel.Constants
public class OverlyConcreteParameter extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for parameters that are defined by classes, but only use methods defined by an implemented interface or super class. Relying on concrete classes in public signatures causes cohesion, and makes low impact changes more difficult.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
OverlyConcreteParameter.MethodInfo
an inner helper class that holds basic information about a method
-
Field Summary
Fields Modifier and Type Field Description private edu.umd.cs.findbugs.BugReporter
bugReporter
private org.apache.bcel.classfile.JavaClass
cls
private org.apache.bcel.classfile.JavaClass[]
constrainingClasses
private static java.util.Set<java.lang.String>
CONVERSION_ANNOTATIONS
private static java.util.Set<java.lang.String>
CONVERSION_SUPER_CLASSES
private boolean
methodIsStatic
private boolean
methodSignatureIsConstrained
private org.apache.bcel.classfile.JavaClass
objectClass
private static java.util.Set<java.lang.String>
OVERLY_CONCRETE_INTERFACES
private java.util.Map<java.lang.Integer,java.util.Map<org.apache.bcel.classfile.JavaClass,java.util.List<OverlyConcreteParameter.MethodInfo>>>
parameterDefiners
private int
parmCount
private edu.umd.cs.findbugs.OpcodeStack
stack
private edu.umd.cs.findbugs.OpcodeStack.Item
ternary1Value
private edu.umd.cs.findbugs.OpcodeStack.Item
ternary2Value
private int
ternaryTarget
private java.util.BitSet
usedParameters
-
Fields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT
-
Fields inherited from interface org.apache.bcel.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_SYPER, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, APPEND_FRAME, APPEND_FRAME_MAX, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_ENCLOSING_METHOD, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_LOCAL_VARIABLE_TYPE_TABLE, ATTR_PMG, ATTR_RUNTIME_VISIBLE_ANNOTATIONS, ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEIN_VISIBLE_ANNOTATIONS, ATTR_RUNTIMEIN_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_STACK_MAP_TABLE, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CHOP_FRAME, CHOP_FRAME_MAX, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_Methodref, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, FULL_FRAME, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAJOR_1_6, MAJOR_1_7, MAJOR_1_8, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MINOR_1_6, MINOR_1_7, MINOR_1_8, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SAME_FRAME, SAME_FRAME_EXTENDED, SAME_FRAME_MAX, SAME_LOCALS_1_STACK_ITEM_FRAME, SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED, SAME_LOCALS_1_STACK_ITEM_FRAME_MAX, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE
-
-
Constructor Summary
Constructors Constructor Description OverlyConcreteParameter(edu.umd.cs.findbugs.BugReporter bugReporter)
constructs a OCP detector given the reporter to report bugs on
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
buildParameterDefiners()
builds a map of method information for each method of each interface that each parameter implements of this methodprivate static java.lang.String
getCardinality(int num)
returns a string defining what parameter in the signature a certain one is, for the bug reportprivate static java.util.Map<org.apache.bcel.classfile.JavaClass,java.util.List<OverlyConcreteParameter.MethodInfo>>
getClassDefiners(org.apache.bcel.classfile.JavaClass cls)
returns a map of method information for each public method for each interface this class implementsprivate static java.util.List<OverlyConcreteParameter.MethodInfo>
getPublicMethodInfos(org.apache.bcel.classfile.JavaClass cls)
returns a list of method information of all public or protected methods in this classprivate boolean
hasOverloadedMethod()
looks to see if this method has an overloaded method in actuality, this isn't precise and returns true for methods that are named the same, and have same number of args This will miss some cases, but in practicality doesn't matter.private boolean
isaConversionClass(org.apache.bcel.classfile.JavaClass conversionCls)
returns whether this class is used to convert types of some sort, such that you don't want to suggest reducing the class specified to be more genericprivate boolean
isExceptionHandled(java.lang.String ex)
returns whether this exception is handled either in a try/catch or throws clause at this pcprivate boolean
methodHasSyntheticTwin(java.lang.String methodName, java.lang.String methodSig)
returns whether this method has an equivalent method that is synthetic, which implies this method is constrained by some Generified interface.private static boolean
methodIsSpecial(java.lang.String methodName, java.lang.String methodSig)
determines whether the method is a baked in special method of the jdkprivate void
removeInheritedInterfaces(java.util.Map<org.apache.bcel.classfile.JavaClass,java.util.List<OverlyConcreteParameter.MethodInfo>> definers)
private void
removeParmDefiner(edu.umd.cs.findbugs.OpcodeStack.Item itm)
removes a parameter from the definer list, if the item is in fact a parameterprivate void
removeUselessDefiners(int reg)
parses through the interface that 'may' define a parameter defined by reg, and look to see if we can rule it out, because a method is called on the object that can't be satisfied by the interface, if so remove that candidate interface.private void
removeUselessDefiners(java.lang.String parmSig, int reg)
private void
reportBugs()
implements the post processing steps to report the remaining unremoved parameter definers, ie those, that can be defined more abstractly.void
sawOpcode(int seen)
implements the visitor to filter out parameter use where the actual defined type of the method declaration is needed.void
visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
implements the visitor to collect classes that constrains this class (super classes/interfaces) and to reset the opcode stackvoid
visitCode(org.apache.bcel.classfile.Code obj)
implements the visitor to collect information about the parameters of a this methodvoid
visitMethod(org.apache.bcel.classfile.Method obj)
implements the visitor to look to see if this method is constrained by a superclass or interface.-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCode
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
afterOpcode, areOppositeBranches, atCatchBlock, beforeOpcode, getBranchFallThrough, getBranchOffset, getBranchTarget, getClassConstantOperand, getClassDescriptorOperand, getCodeByte, getConstantRefOperand, getDefaultSwitchOffset, getDottedClassConstantOperand, getFieldDescriptorOperand, getIntConstant, getLongConstant, getMaxPC, getMethodDescriptorOperand, getNameConstantOperand, getNextCodeByte, getNextOpcode, getNextPC, getOpcode, getPC, getPrevOpcode, getRefConstantOperand, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString, visit
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor
amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitStackMapTable, visitStackMapTableEntry
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor
clone, report, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitSignature, visitSourceFile, visitStackMap, visitStackMapEntry, visitSynthetic, visitUnknown
-
-
-
-
Field Detail
-
CONVERSION_ANNOTATIONS
private static final java.util.Set<java.lang.String> CONVERSION_ANNOTATIONS
-
CONVERSION_SUPER_CLASSES
private static final java.util.Set<java.lang.String> CONVERSION_SUPER_CLASSES
-
OVERLY_CONCRETE_INTERFACES
private static final java.util.Set<java.lang.String> OVERLY_CONCRETE_INTERFACES
-
bugReporter
private final edu.umd.cs.findbugs.BugReporter bugReporter
-
constrainingClasses
private org.apache.bcel.classfile.JavaClass[] constrainingClasses
-
parameterDefiners
private java.util.Map<java.lang.Integer,java.util.Map<org.apache.bcel.classfile.JavaClass,java.util.List<OverlyConcreteParameter.MethodInfo>>> parameterDefiners
-
usedParameters
private java.util.BitSet usedParameters
-
objectClass
private org.apache.bcel.classfile.JavaClass objectClass
-
cls
private org.apache.bcel.classfile.JavaClass cls
-
stack
private edu.umd.cs.findbugs.OpcodeStack stack
-
parmCount
private int parmCount
-
methodSignatureIsConstrained
private boolean methodSignatureIsConstrained
-
methodIsStatic
private boolean methodIsStatic
-
ternary1Value
private edu.umd.cs.findbugs.OpcodeStack.Item ternary1Value
-
ternary2Value
private edu.umd.cs.findbugs.OpcodeStack.Item ternary2Value
-
ternaryTarget
private int ternaryTarget
-
-
Method Detail
-
visitClassContext
public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
implements the visitor to collect classes that constrains this class (super classes/interfaces) and to reset the opcode stack- Specified by:
visitClassContext
in interfaceedu.umd.cs.findbugs.Detector
- Overrides:
visitClassContext
in classedu.umd.cs.findbugs.BytecodeScanningDetector
- Parameters:
classContext
- the currently parse class
-
visitMethod
public void visitMethod(org.apache.bcel.classfile.Method obj)
implements the visitor to look to see if this method is constrained by a superclass or interface.- Specified by:
visitMethod
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitMethod
in classedu.umd.cs.findbugs.visitclass.BetterVisitor
- Parameters:
obj
- the currently parsed method
-
visitCode
public void visitCode(org.apache.bcel.classfile.Code obj)
implements the visitor to collect information about the parameters of a this method- Specified by:
visitCode
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitCode
in classedu.umd.cs.findbugs.visitclass.PreorderVisitor
- Parameters:
obj
- the currently parsed code block
-
sawOpcode
public void sawOpcode(int seen)
implements the visitor to filter out parameter use where the actual defined type of the method declaration is needed. What remains could be more abstractly defined.- Overrides:
sawOpcode
in classedu.umd.cs.findbugs.visitclass.DismantleBytecode
- Parameters:
seen
- the currently parsed opcode
-
removeParmDefiner
private void removeParmDefiner(edu.umd.cs.findbugs.OpcodeStack.Item itm)
removes a parameter from the definer list, if the item is in fact a parameter- Parameters:
itm
- the possible parameter
-
methodIsSpecial
private static boolean methodIsSpecial(java.lang.String methodName, java.lang.String methodSig)
determines whether the method is a baked in special method of the jdk- Parameters:
methodName
- the method name to checkmethodSig
- the parameter signature of the method to check- Returns:
- if it is a well known baked in method
-
methodHasSyntheticTwin
private boolean methodHasSyntheticTwin(java.lang.String methodName, java.lang.String methodSig)
returns whether this method has an equivalent method that is synthetic, which implies this method is constrained by some Generified interface. We could compare parameters but that is a bunch of work that probably doesn't make this test any more precise, so just return true if method name and synthetic is found.- Parameters:
methodName
- the method name to look for a synthetic twin ofmethodSig
- the method signature to lookfor a synthetic twin of- Returns:
- if a synthetic twin is found
-
reportBugs
private void reportBugs()
implements the post processing steps to report the remaining unremoved parameter definers, ie those, that can be defined more abstractly.
-
hasOverloadedMethod
private boolean hasOverloadedMethod()
looks to see if this method has an overloaded method in actuality, this isn't precise and returns true for methods that are named the same, and have same number of args This will miss some cases, but in practicality doesn't matter.- Returns:
- whether there is a method in this class that overrides the given method
-
removeInheritedInterfaces
private void removeInheritedInterfaces(java.util.Map<org.apache.bcel.classfile.JavaClass,java.util.List<OverlyConcreteParameter.MethodInfo>> definers) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
getCardinality
private static java.lang.String getCardinality(int num)
returns a string defining what parameter in the signature a certain one is, for the bug report- Parameters:
num
- the parameter number- Returns:
- a string describing in english the parameter position
-
buildParameterDefiners
private boolean buildParameterDefiners() throws java.lang.ClassNotFoundException
builds a map of method information for each method of each interface that each parameter implements of this method- Returns:
- a map by parameter id of all the method signatures that interfaces of that parameter implements
- Throws:
java.lang.ClassNotFoundException
- if the class can't be loaded
-
getClassDefiners
private static java.util.Map<org.apache.bcel.classfile.JavaClass,java.util.List<OverlyConcreteParameter.MethodInfo>> getClassDefiners(org.apache.bcel.classfile.JavaClass cls) throws java.lang.ClassNotFoundException
returns a map of method information for each public method for each interface this class implements- Parameters:
cls
- the class whose interfaces to record- Returns:
- a map of (method name)(method sig) by interface
- Throws:
java.lang.ClassNotFoundException
- if unable to load the class
-
getPublicMethodInfos
private static java.util.List<OverlyConcreteParameter.MethodInfo> getPublicMethodInfos(org.apache.bcel.classfile.JavaClass cls)
returns a list of method information of all public or protected methods in this class- Parameters:
cls
- the class to look for methods- Returns:
- a map of (method name)(method signature)
-
removeUselessDefiners
private void removeUselessDefiners(int reg)
parses through the interface that 'may' define a parameter defined by reg, and look to see if we can rule it out, because a method is called on the object that can't be satisfied by the interface, if so remove that candidate interface.- Parameters:
reg
- the parameter register number to look at
-
isExceptionHandled
private boolean isExceptionHandled(java.lang.String ex)
returns whether this exception is handled either in a try/catch or throws clause at this pc- Parameters:
ex
- the name of the exception- Returns:
- whether the exception is handled
-
removeUselessDefiners
private void removeUselessDefiners(java.lang.String parmSig, int reg)
-
isaConversionClass
private boolean isaConversionClass(org.apache.bcel.classfile.JavaClass conversionCls)
returns whether this class is used to convert types of some sort, such that you don't want to suggest reducing the class specified to be more generic- Parameters:
conversionCls
- the class to check- Returns:
- whether this class is used in conversions
-
-