Пример #1
0
void CppGenerator::writeFunctionArguments(QTextStream &s,
                                          const AbstractMetaArgumentList &arguments,
                                          Option option,
                                          int numArguments)
{
    if (numArguments < 0) numArguments = arguments.size();

    for (int i=0; i<numArguments; ++i) {
        if (i != 0)
            s << ", ";
        AbstractMetaArgument *arg = arguments.at(i);
        writeTypeInfo(s, arg->type(), option);
        if (!(option & SkipName))
            s << " " << arg->indexedName();
        if ((option & IncludeDefaultExpression) && !arg->originalDefaultValueExpression().isEmpty()) {
            s << " = ";

            QString expr = arg->originalDefaultValueExpression();
            if (arg->type()->typeEntry()->isEnum() && expr.indexOf("::") < 0)
                s << ((EnumTypeEntry *)arg->type()->typeEntry())->qualifier() << "::";

            s << expr;
        }
    }
}
Пример #2
0
void QDocGenerator::write(QTextStream &s, const AbstractMetaFunction *java_function) {
    AbstractMetaArgumentList arguments = java_function->arguments();
    int argument_count = arguments.size();

    int overload_count = 0;

    for (int i = 0; i < argument_count; ++i) {
        if (!arguments.at(i)->defaultValueExpression().isEmpty())
            ++overload_count;
    }

    for (int i = 0; i <= overload_count; ++i) {
        writeOverload(s, java_function, argument_count - i);
    }
}
Пример #3
0
void MetaInfoGenerator::writeSignalsAndSlots(QTextStream &s, const QString &package)
{
    AbstractMetaClassList classes = this->classes();

    QList<QString> strs;
    foreach (AbstractMetaClass *cls, classes) {
        if (cls->package() == package) {
            AbstractMetaFunctionList functions = cls->functions();
            foreach (AbstractMetaFunction *f, functions) {
                if (f->implementingClass() == cls && (f->isSignal() || f->isSlot())) {

                    AbstractMetaArgumentList arguments = f->arguments();
                    int numOverloads = arguments.size();
                    for (int i=arguments.size()-1; i>=0; --i) {
                        if (arguments.at(i)->defaultValueExpression().isEmpty()) {
                            numOverloads = arguments.size() - i - 1;
                            break;
                        }
                    }

                    for (int i=0; i<=numOverloads; ++i) {
                        Option option = Option(SkipAttributes | SkipReturnType | SkipName);
                        QString qtName;
                        {

                            QTextStream qtNameStream(&qtName);
                            CppGenerator::writeFunctionSignature(qtNameStream, f, 0, QString(),
                                Option(option | OriginalName | NormalizeAndFixTypeSignature | OriginalTypeDescription),
                                QString(), QStringList(), arguments.size() - i);
                        }
                        qtName = f->implementingClass()->qualifiedCppName() + "::" + qtName;
                        qtName = QMetaObject::normalizedSignature(qtName.toLatin1().constData());

                        QString javaFunctionName = functionSignature(f, 0, 0, option, arguments.size() - (f->isSignal() ? 0 : i));
                        QString javaObjectName = f->isSignal()
                                                ? f->name()
                                                : javaFunctionName;

                        javaFunctionName = f->implementingClass()->fullName() + "." + javaFunctionName;
                        javaObjectName   = f->implementingClass()->fullName() + "." + javaObjectName;

                        QString javaSignature = "(";
                        for (int j=0; j < (arguments.size() - (f->isSignal() ? 0 : i)); ++j)  {
                            AbstractMetaArgument *arg = arguments.at(j);
                            javaSignature += jni_signature(arg->type(), SlashesAndStuff);
                        }
                        javaSignature += ")" + jni_signature(f->type(), SlashesAndStuff);

                        strs.append(qtName);
                        strs.append(javaFunctionName);
                        strs.append(javaObjectName);
                        strs.append(javaSignature);
                    }
                }
            }
        }
    }
Пример #4
0
void ShellGenerator::writeFunctionArguments(QTextStream &s, const AbstractMetaClass* owner,
        const AbstractMetaArgumentList &arguments,
        Option option,
        int numArguments)
{
    if (numArguments < 0) numArguments = arguments.size();

    for (int i=0; i<numArguments; ++i) {
        if (i != 0)
            s << ", ";
        AbstractMetaArgument *arg = arguments.at(i);
        writeTypeInfo(s, arg->type(), option);
        if (!(option & SkipName)) {
            if (option & UseIndexedName) {
                s << " " << arg->indexedName();
            }
            else {
                s << " " << arg->argumentName();
            }
        }
        if ((option & IncludeDefaultExpression) && !arg->defaultValueExpression().isEmpty()) {
            s << " = ";

            QString expr = arg->defaultValueExpression();
            if (expr != "0") {
                QString qualifier;
                if (arg->type()->typeEntry()->isEnum() && expr.indexOf("::") < 0) {
                    qualifier =  ((EnumTypeEntry *)arg->type()->typeEntry())->qualifier();
                } else if (arg->type()->typeEntry()->isFlags() && expr.indexOf("::") < 0) {
                    qualifier = ((FlagsTypeEntry *)arg->type()->typeEntry())->originator()->qualifier();
                }
                if (!qualifier.isEmpty()) {
                    s << qualifier << "::";
                }
            }

            s << expr;
        }
    }
}
Пример #5
0
    \
    void func(C c);\
    ";
    const char* xmlCode = "<typesystem package=\"Foo\">\
    <container-type name='A' type='list'/>\
    <value-type name='B' />\
    <function signature='func(A&lt;B&gt;)' />\
    </typesystem>";
    TestUtil t(cppCode, xmlCode);

    AbstractMetaClassList classes = t.builder()->classes();
    QCOMPARE(classes.size(), 1);
    AbstractMetaFunctionList functions = t.builder()->globalFunctions();
    QCOMPARE(functions.count(), 1);
    AbstractMetaFunction* function = functions.first();
    AbstractMetaArgumentList args = function->arguments();
    QCOMPARE(args.count(), 1);
    AbstractMetaArgument* arg = args.first();
    AbstractMetaType* metaType = arg->type();
    QCOMPARE(metaType->cppSignature(), QString("A<B >"));
}


void TestAbstractMetaType::testObjectTypeUsedAsValue()
{
    const char* cppCode ="\
    class A {\
        void method(A);\
    };\
    ";
    const char* xmlCode = "<typesystem package='Foo'>\
Пример #6
0
void CppGenerator::writeFunctionSignature(QTextStream &s,
                                          const AbstractMetaFunction *java_function,
                                          const AbstractMetaClass *implementor,
                                          const QString &name_prefix,
                                          Option option,
                                          const QString &classname_prefix,
                                          const QStringList &extra_arguments,
                                          int numArguments)
{
// ### remove the implementor
    AbstractMetaType *function_type = java_function->type();

    if (java_function->isStatic() && (option & ShowStatic))
        s << "static ";

    if ((option & SkipReturnType) == 0) {
        if (function_type) {
            writeTypeInfo(s, function_type, option);
            s << " ";
        } else if (!java_function->isConstructor()) {
            s << "void ";
        }
    }

    if (implementor) {
        if (classname_prefix.isEmpty())
            s << shellClassName(implementor) << "::";
        else
            s << classname_prefix << implementor->name() << "::";
    }


    QString function_name;
    if (option & OriginalName)
        function_name = java_function->originalName();
    else
        function_name = java_function->name();

    if (option & UnderscoreSpaces)
        function_name = function_name.replace(' ', '_');

    if (java_function->isConstructor())
        function_name = shellClassName(java_function->ownerClass());

    s << name_prefix << function_name;

    if (java_function->attributes() & AbstractMetaAttributes::SetterFunction)
        s << "_setter";
    else if (java_function->attributes() & AbstractMetaAttributes::GetterFunction)
        s << "_getter";

    s << "(";
    const AbstractMetaClass *owner = java_function->ownerClass();

    bool has_d_ptr = java_function->isConstructor() && owner && (owner->isPolymorphic()/* || owner->typeEntry()->isObject()*/ );
    const AbstractMetaArgumentList arg_list = java_function->arguments();
    if (has_d_ptr) {
        s << "void *d_ptr";
        if (arg_list.size() > 0)
            s << ", ";
    }
    writeFunctionArguments(s, arg_list, option, numArguments);

    // The extra arguments...
    for (int i=0; i<extra_arguments.size(); ++i) {
        if (i > 0 || java_function->arguments().size() != 0)
            s << ", ";
        s << extra_arguments.at(i);
    }

    s << ")";
    if (java_function->isConstant())
        s << " const";
}