Package com.dubture.symfony.core.compiler

Source Code of com.dubture.symfony.core.compiler.SourceElementRequestor

/*******************************************************************************
* This file is part of the Symfony eclipse plugin.
*
* (c) Robert Gruendler <r.gruendler@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
******************************************************************************/
package com.dubture.symfony.core.compiler;


import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.dltk.ast.declarations.MethodDeclaration;
import org.eclipse.dltk.ast.declarations.TypeDeclaration;
import org.eclipse.dltk.ast.expressions.Expression;
import org.eclipse.dltk.ast.expressions.StringLiteral;
import org.eclipse.dltk.ast.statements.Statement;
import org.eclipse.dltk.compiler.env.IModuleSource;
import org.eclipse.php.core.compiler.PHPSourceElementRequestorExtension;
import org.eclipse.php.internal.core.Logger;
import org.eclipse.php.internal.core.compiler.ast.nodes.ClassDeclaration;
import org.eclipse.php.internal.core.compiler.ast.nodes.FullyQualifiedReference;
import org.eclipse.php.internal.core.compiler.ast.nodes.PHPMethodDeclaration;

import com.dubture.symfony.core.builder.SymfonyNature;
import com.dubture.symfony.core.model.Service;
import com.dubture.symfony.core.model.SymfonyModelAccess;
import com.dubture.symfony.core.preferences.SymfonyCoreConstants;
import com.dubture.symfony.core.util.PathUtils;


/**
*
*
*
*
* @author Robert Gruendler <r.gruendler@gmail.com>
*
*/
@SuppressWarnings("restriction")
public class SourceElementRequestor extends PHPSourceElementRequestorExtension {

    private ClassDeclaration currentClass;
    private boolean inController;

    private SymfonyModelAccess model = SymfonyModelAccess.getDefault();
    private boolean isSymfonySource;


    @Override
    public void setSourceModule(IModuleSource sourceModule) {

        super.setSourceModule(sourceModule);

        try {
            isSymfonySource = sourceModule.getModelElement().getScriptProject().getProject().exists() && sourceModule.getModelElement().getScriptProject().getProject().getNature(SymfonyNature.NATURE_ID) != null;
        } catch (CoreException e) {
            isSymfonySource = false;
            Logger.logException(e);
        }
    }

    public boolean isInController() {
        return inController;
    }

    @Override
    public boolean visit(TypeDeclaration s) throws Exception {


        if (!isSymfonySource)
            return false;

        if (s instanceof ClassDeclaration) {
            currentClass = (ClassDeclaration) s;
            for (Object o : currentClass.getSuperClasses().getChilds()) {

                if (o instanceof FullyQualifiedReference) {

                    FullyQualifiedReference superReference = (FullyQualifiedReference) o;

                    //TODO: find a way to check against the FQCN
                    // via the UseStatement
                    if (/*superReference.getNamespace().equals(SymfonyCoreConstants.CONTROLLER_NS)
                            && */superReference.getName().equals(SymfonyCoreConstants.CONTROLLER_CLASS)) {

                        // the ControllerIndexer does the actual work of parsing the
                        // the relevant elements inside the controller
                        // which are then being collected in the endVisit() method
                        inController = true;

                    }
                }
            }
        }

        return true;
    }

    @Override
    public boolean visit(Statement st) throws Exception {

        return true;
    }


    @Override
    public boolean visit(Expression st) throws Exception {

        if (!isSymfonySource)
            return false;


        if (st instanceof StringLiteral) {

            StringLiteral literal = (StringLiteral) st;
            String literalValue = literal.getValue().replaceAll("['\"]", "");

            if (PathUtils.isViewPath(literalValue)) {
                //TODO: report viewpath reference
            }

            IPath path = getSourceModule().getModelElement().getScriptProject().getPath();
            Service service = model.findService(literalValue, path);

            if (service != null) {
                fRequestor.acceptTypeReference(service.getFullyQualifiedName(), literal.sourceStart());
            }
        }

        return true;
    }


    @Override
    public boolean visit(MethodDeclaration s) throws Exception {



        if (s instanceof PHPMethodDeclaration) {




        }


        return true;
    }




    @Override
    public boolean endvisit(TypeDeclaration s) throws Exception {

        if (currentClass != null) {


        }

        inController = false;

        currentClass = null;
        return true;
    }
}
TOP

Related Classes of com.dubture.symfony.core.compiler.SourceElementRequestor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.