Search in sources :

Example 6 with ByRef

use of sharpen.core.framework.ByRef in project XobotOS by xamarin.

the class TypeTemplate method findMemberTemplate.

public <T extends ASTNode, U extends CSNode, V extends AbstractMemberTemplate<T, U>> V findMemberTemplate(final T node, final V defaultValue, final Class<V> klass) {
    if (node instanceof AnonymousClassDeclaration) {
        ;
    } else if (node.getParent() instanceof AnonymousClassDeclaration) {
        ;
    } else if (!(node.getParent() instanceof TypeDeclaration))
        return null;
    final ByRef<V> result = new ByRef<V>();
    TemplateVisitor visitor = new TemplateVisitor() {

        @Override
        public void accept(AbstractTemplate template) {
            result.value = klass.cast(template);
        }
    };
    if (!visit(visitor, node, klass))
        return null;
    return result.value != null ? result.value : defaultValue;
}
Also used : TemplateVisitor(sharpen.xobotos.api.TemplateVisitor) ByRef(sharpen.core.framework.ByRef) CSTypeDeclaration(sharpen.core.csharp.ast.CSTypeDeclaration)

Example 7 with ByRef

use of sharpen.core.framework.ByRef in project XobotOS by xamarin.

the class APIDefinition method compilationUnitDefinesBindings.

public boolean compilationUnitDefinesBindings(String unitName) {
    final ByRef<Boolean> result = new ByRef<Boolean>(false);
    TemplateVisitor visitor = new TemplateVisitor() {

        @Override
        public void accept(AbstractTemplate template) {
            if (template instanceof IBindingProvider) {
                IBindingProvider provider = (IBindingProvider) template;
                if (provider.getBinding() != null)
                    result.value = true;
            }
            if (template instanceof TypeTemplate) {
                TypeTemplate type = (TypeTemplate) template;
                if (type.getNativeType() != null)
                    result.value = true;
                else if (type.getNativeStruct() != null)
                    result.value = true;
            }
        }
    };
    for (final NamespaceTemplate def : getNamespaces()) {
        def.visit(visitor, unitName, VisitMode.All);
    }
    return result.value;
}
Also used : ByRef(sharpen.core.framework.ByRef) AbstractTemplate(sharpen.xobotos.api.templates.AbstractTemplate) IBindingProvider(sharpen.xobotos.api.bindings.IBindingProvider) TypeTemplate(sharpen.xobotos.api.templates.TypeTemplate) NamespaceTemplate(sharpen.xobotos.api.templates.NamespaceTemplate)

Example 8 with ByRef

use of sharpen.core.framework.ByRef in project XobotOS by xamarin.

the class APIDefinition method findCompilationUnitTemplate.

public CompilationUnitTemplate findCompilationUnitTemplate(CompilationUnitPair pair) {
    final String fullName = getUnitName(pair.source);
    final ByRef<CompilationUnitTemplate> result = new ByRef<CompilationUnitTemplate>(null);
    TemplateVisitor visitor = new TemplateVisitor() {

        @Override
        public void accept(CompilationUnitTemplate template) {
            result.value = template;
        }
    };
    for (final NamespaceTemplate def : getNamespaces()) {
        if (def.visit(visitor, fullName, VisitMode.FirstMatch))
            break;
    }
    return result.value;
}
Also used : CompilationUnitTemplate(sharpen.xobotos.api.templates.CompilationUnitTemplate) ByRef(sharpen.core.framework.ByRef) NamespaceTemplate(sharpen.xobotos.api.templates.NamespaceTemplate)

Example 9 with ByRef

use of sharpen.core.framework.ByRef in project XobotOS by xamarin.

the class APIDefinition method preprocess.

public CompilationUnitBuilder preprocess(CompilationUnitPair pair) {
    final String fullName = getUnitName(pair.source);
    final ByRef<IOutputProvider> defaultOutput = new ByRef<IOutputProvider>(null);
    final ByRef<CompilationUnitTemplate> unitTemplate = new ByRef<CompilationUnitTemplate>(CompilationUnitTemplate.DEFAULT);
    TemplateVisitor visitor = new TemplateVisitor() {

        @Override
        public void accept(NamespaceTemplate template) {
            if (defaultOutput.value != null)
                return;
            if (template.getOutputType() != null)
                defaultOutput.value = template;
        }

        @Override
        public void accept(CompilationUnitTemplate template) {
            unitTemplate.value = template;
        }
    };
    for (final NamespaceTemplate def : getNamespaces()) {
        if (def.visit(visitor, fullName, VisitMode.FirstMatch))
            break;
    }
    return my(BindingManager.class).preprocess(pair, unitTemplate.value, fullName, defaultOutput.value);
}
Also used : BindingManager(sharpen.xobotos.api.bindings.BindingManager) CompilationUnitTemplate(sharpen.xobotos.api.templates.CompilationUnitTemplate) ByRef(sharpen.core.framework.ByRef) IOutputProvider(sharpen.xobotos.output.IOutputProvider) NamespaceTemplate(sharpen.xobotos.api.templates.NamespaceTemplate)

Aggregations

ByRef (sharpen.core.framework.ByRef)9 TemplateVisitor (sharpen.xobotos.api.TemplateVisitor)3 NamespaceTemplate (sharpen.xobotos.api.templates.NamespaceTemplate)3 ArrayList (java.util.ArrayList)2 CompilationUnit (org.eclipse.jdt.core.dom.CompilationUnit)2 BindingManager (sharpen.xobotos.api.bindings.BindingManager)2 CompilationUnitTemplate (sharpen.xobotos.api.templates.CompilationUnitTemplate)2 CoreException (org.eclipse.core.runtime.CoreException)1 ICompilationUnit (org.eclipse.jdt.core.ICompilationUnit)1 AST (org.eclipse.jdt.core.dom.AST)1 IVariableBinding (org.eclipse.jdt.core.dom.IVariableBinding)1 VariableDeclaration (org.eclipse.jdt.core.dom.VariableDeclaration)1 Configuration (sharpen.core.Configuration)1 NamingStrategy (sharpen.core.NamingStrategy)1 CSTypeDeclaration (sharpen.core.csharp.ast.CSTypeDeclaration)1 ASTResolver (sharpen.core.framework.ASTResolver)1 CompilationUnitPair (sharpen.core.framework.CompilationUnitPair)1 DefaultASTResolver (sharpen.core.framework.DefaultASTResolver)1 IBindingProvider (sharpen.xobotos.api.bindings.IBindingProvider)1 Kind (sharpen.xobotos.api.interop.NativeMethod.Kind)1