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

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

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

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.types.GoPsiTypeStruct;
import ro.redeul.google.go.lang.psi.types.struct.GoTypeStructAnonymousField;
import ro.redeul.google.go.lang.psi.types.struct.GoTypeStructField;
import ro.redeul.google.go.lang.psi.types.struct.GoTypeStructPromotedFields;

public class StructFieldSolver extends VisitingReferenceSolver<StructFieldReference, StructFieldSolver> {

    public StructFieldSolver(final StructFieldReference reference) {
        solveWithVisitor(new ReferenceSolvingVisitor(this, reference) {
            @Override
            public void visitTypeStructField(GoTypeStructField field) {
                checkIdentifiers(reference.name(), field.getIdentifiers());
            }

            @Override
            public void visitTypeStructAnonymousField(GoTypeStructAnonymousField field) {
                if (reference.canSee(field, field.getFieldName()) && matchNames(reference.name(), field.getFieldName()))
                    addTarget(field);
            }

            @Override
            public void visitStructType(GoPsiTypeStruct type) {
                for (GoTypeStructField structField : type.getFields()) {
                    structField.accept(this);
                }

                for (GoTypeStructAnonymousField anonymousField : type.getAnonymousFields()) {
                    anonymousField.accept(this);
                }

                GoTypeStructPromotedFields promotedFields = type.getPromotedFields();
                checkIdentifiers(reference.name(), promotedFields.getNamedFields());

                for (GoTypeStructAnonymousField anonymousField : promotedFields.getAnonymousFields()) {
                    anonymousField.accept(this);
                }
            }
        });
    }


    @Override
    public StructFieldSolver self() { return this; }
}
TOP

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

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.