Package ro.redeul.google.go.lang.psi.resolve.refs

Source Code of ro.redeul.google.go.lang.psi.resolve.refs.PackageSolver

package ro.redeul.google.go.lang.psi.resolve.refs;

import ro.redeul.google.go.lang.psi.GoPackage;
import ro.redeul.google.go.lang.psi.GoPackageReference;
import ro.redeul.google.go.lang.psi.resolve.ReferenceSolvingVisitor;
import ro.redeul.google.go.lang.psi.resolve.VisitingReferenceSolver;
import ro.redeul.google.go.lang.psi.toplevel.GoImportDeclaration;

public class PackageSolver extends VisitingReferenceSolver<PackageReference, PackageSolver> {

    @Override
    public PackageSolver self() { return this; }

    public PackageSolver(final PackageReference reference) {
        solveWithVisitor(new ReferenceSolvingVisitor(this, reference) {
            public void visitImportDeclaration(GoImportDeclaration declaration) {
                if (isReferenceTo(declaration))
                    addTarget(declaration);
            }

            boolean isReferenceTo(GoImportDeclaration importDeclaration) {

                GoPackageReference packageReference = importDeclaration.getPackageReference();

                String packageName = null;
                if (packageReference != null && !(packageReference.isBlank() || packageReference.isLocal()))
                    packageName = packageReference.getString();
                else {
                    GoPackage goPackage = importDeclaration.getPackage();
                    packageName = goPackage != null ? goPackage.getName() : "";
                }

                return packageName != null && matchNames(reference.name(), packageName);
            }
        });
    }
}
TOP

Related Classes of ro.redeul.google.go.lang.psi.resolve.refs.PackageSolver

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.