class DangerousPermissionCombination extends OpcodeStackDetector {

    private BugReporter bugReporter;

    public DangerousPermissionCombination(BugReporter bugReporter) {
        this.bugReporter = bugReporter;
    }

    private void reportBug(String permission, String target) {<FILL_FUNCTION_BODY>}

    @Override
    public void sawOpcode(int seen) {
        if (seen == Const.INVOKESPECIAL && Const.CONSTRUCTOR_NAME.equals(getNameConstantOperand())) {
            ClassDescriptor cd = getClassDescriptorOperand();
            if (cd != null && "Ljava/lang/reflect/ReflectPermission;".equals(cd.getSignature())) {
                String stringParam = (String) stack.getStackItem(0).getConstant();
                if (stringParam != null && "suppressAccessChecks".equals(stringParam)) {
                    reportBug("ReflectPermission", "suppressAccessChecks");
                }
            } else if (cd != null && "Ljava/lang/RuntimePermission;".equals(cd.getSignature())) {
                String stringParam = (String) stack.getStackItem(0).getConstant();
                if (stringParam != null && "createClassLoader".equals(stringParam)) {
                    reportBug("RuntimePermission", "createClassLoader");
                }
            }
        }
    }
}

        BugInstance bug = new BugInstance(this, "DANGEROUS_PERMISSION_COMBINATION", NORMAL_PRIORITY)
                .addClassAndMethod(this).addString(permission).addString(target).addSourceLine(this);
        bugReporter.reportBug(bug);
    
<no_super_class>