Package com.redhat.ceylon.compiler.typechecker.model

Examples of com.redhat.ceylon.compiler.typechecker.model.ClassOrInterface


        super.visit(that);
    }

    @Override
    public void visit(Tree.ClassOrInterface that) {
        ClassOrInterface model = that.getDeclarationModel();
        visitLocalDecl(that);

        Map<String,Integer> oldLocalNames = null;
        if(model != null && !model.isAlias()){
            oldLocalNames = localNames;
            localNames = new HashMap<String,Integer>();
        }
        super.visit(that);
        if(model != null && !model.isAlias()){
            localNames = oldLocalNames;
        }
    }
View Full Code Here


        if (dec instanceof Setter) {
            Value getter = ((Setter) dec).getGetter();
            dec.setRefinedDeclaration(getter.getRefinedDeclaration());
            return;
        }
        ClassOrInterface type = (ClassOrInterface) dec.getContainer();
        if (dec.isFormal() && type instanceof Class) {
            Class c = (Class) type;
            if (!c.isAbstract() && !c.isFormal()) {
                that.addError("formal member belongs to non-abstract, non-formal class", 1100);
            }
        }
        if (!dec.isFormal() && type.isDynamic()) {
            that.addError("non-formal member belongs to dynamic interface");
        }
        List<ProducedType> signature = getSignature(dec);
        Declaration root =
                type.getRefinedMember(dec.getName(), signature, false);
        boolean legallyOverloaded = !isOverloadedVersion(dec);
        if (root == null || root.equals(dec)) {
            dec.setRefinedDeclaration(dec);
            if (dec.isActual()) {
                that.addError("actual member does not refine any inherited member: " +
                        dec.getName(), 1300);
            }
            else if (!legallyOverloaded) {
                if (dec.isActual()) {
                    that.addError("overloaded member does not refine an inherited overloaded member: " +
                            dec.getName());
                }
                else {
                    that.addError("duplicate or overloaded member name: " + dec.getName());
                }
            }
        }
        else {
            dec.setRefinedDeclaration(root);
            if (root.isPackageVisibility() &&
                    !declaredInPackage(root, that.getUnit())) {
                that.addError("refined declaration is not visible: " +
                        message(root));
            }
            boolean found = false;
            TypeDeclaration rootType = (TypeDeclaration) root.getContainer();
            for (Declaration refined:
                    getInterveningRefinements(dec.getName(),
                            signature, root, type, rootType)) {
                if (isOverloadedVersion(refined)) {
                    //if this member is overloaded, the
                    //inherited member it refines must
                    //also be overloaded
                    legallyOverloaded = true;
                }
                found = true;
                if (dec instanceof Method) {
                    if (!(refined instanceof Method)) {
                        that.addError("refined declaration is not a method: " +
                                message(refined));
                    }
                }
                else if (dec instanceof Class) {
                    if (!(refined instanceof Class)) {
                        that.addError("refined declaration is not a class: " +
                                message(refined));
                    }
                }
                else if (dec instanceof TypedDeclaration) {
                    if (refined instanceof Class ||
                        refined instanceof Method) {
                        that.addError("refined declaration is not an attribute: " +
                                message(refined));
                    }
                    else if (refined instanceof TypedDeclaration) {
                        if ( ((TypedDeclaration) refined).isVariable() &&
                                !((TypedDeclaration) dec).isVariable()) {
                            if (dec instanceof Value) {
                                that.addError("non-variable attribute refines a variable attribute: " +
                                        message(refined), 804);
                            }
                            else {
                                that.addError("non-variable attribute refines a variable attribute: " +
                                        message(refined));
                            }
                        }
                    }
                }
                if (!dec.isActual()) {
                    that.addError("non-actual member refines an inherited member: " +
                            message(refined), 600);
                }
                if (!refined.isDefault() && !refined.isFormal()) {
                    that.addError("member refines a non-default, non-formal member: " +
                            message(refined), 500);
                }
                if (!type.isInconsistentType()) {
                    checkRefinedTypeAndParameterTypes(that, dec, type, refined);
                }
            }
            if (!found) {
                that.addError("actual member does not exactly refine any overloaded inherited member");
View Full Code Here

    }
   
    private void refineValue(Tree.SpecifierStatement that) {
        Value refinedValue = (Value) that.getRefined();
        Value value = (Value) that.getDeclaration();
        ClassOrInterface ci = (ClassOrInterface) value.getContainer();
        ProducedReference refinedProducedReference =
                getRefinedMember(refinedValue, ci);
        value.setType(refinedProducedReference.getType());
    }
View Full Code Here

    }

    private void refineMethod(Tree.SpecifierStatement that) {
        Method refinedMethod = (Method) that.getRefined();
        Method method = (Method) that.getDeclaration();
        ClassOrInterface ci = (ClassOrInterface) method.getContainer();
        Declaration root = refinedMethod.getRefinedDeclaration();
        method.setRefinedDeclaration(root);
        if (getInterveningRefinements(method.getName(),
                getSignature(method), root,
                ci, (TypeDeclaration) root.getContainer())
                .isEmpty()) {
            that.getBaseMemberExpression()
                .addError("shortcut refinement does not exactly refine any overloaded inherited member");
        }
        else {
            ProducedReference refinedProducedReference =
                    getRefinedMember(refinedMethod, ci);
            method.setType(refinedProducedReference.getType());
            List<Tree.ParameterList> parameterLists;
            Tree.Term me = that.getBaseMemberExpression();
            if (me instanceof Tree.ParameterizedExpression) {
                parameterLists =
                        ((Tree.ParameterizedExpression) me).getParameterLists();
            }
            else {
                parameterLists = emptyList();
            }
            for (int i=0; i<refinedMethod.getParameterLists().size(); i++) {
                ParameterList refinedParameters =
                        refinedMethod.getParameterLists().get(i);
                ParameterList parameters =
                        method.getParameterLists().get(i);
                Tree.ParameterList parameterList =
                        parameterLists.size()<=i ?
                                null : parameterLists.get(i);
                for (int j=0; j<refinedParameters.getParameters().size(); j++) {
                    Parameter refinedParameter =
                            refinedParameters.getParameters().get(j);
                    ProducedType refinedParameterType =
                            refinedProducedReference
                            .getTypedParameter(refinedParameter)
                            .getFullType();
                    if (parameterList==null ||
                            parameterList.getParameters().size()<=j) {
                        Parameter p = parameters.getParameters().get(j);
                        p.getModel().setType(refinedParameterType);
                    }
                    else {
                        Tree.Parameter parameter =
                                parameterList.getParameters().get(j);
                        Parameter p = parameter.getParameterModel();
                        ProducedType parameterType =
                                p.getModel().getTypedReference().getFullType();
                        Node typeNode = parameter;
                        if (parameter instanceof Tree.ParameterDeclaration) {
                            Tree.Type type =
                                    ((Tree.ParameterDeclaration) parameter)
                                    .getTypedDeclaration().getType();
                            if (type!=null) {
                                typeNode = type;
                            }
                        }
                        checkIsExactlyForInterop(that.getUnit(),
                                refinedParameters.isNamedParametersSupported(),
                                parameterType, refinedParameterType, typeNode,
                                "type of parameter '" + p.getName() +
                                "' of '" + method.getName() +
                                "' declared by '" + ci.getName() +
                                "' is different to type of corresponding parameter '" +
                                refinedParameter.getName() + "' of refined method '" +
                                refinedMethod.getName() + "' of '" +
                                ((Declaration) refinedMethod.getContainer()).getName() +
                                "'");
View Full Code Here

            if (member.isFormal() && !inExtendsClause) {
                qmte.addError("supertype member is declared formal: '" + member.getName() +
                        "' of '" + ((TypeDeclaration) member.getContainer()).getName() + "'");
            }
            else {
                ClassOrInterface ci = getContainingClassOrInterface(qmte.getScope());
                if (ci!=null) {
                    Declaration etm = ci.getExtendedTypeDeclaration()
                            .getMember(member.getName(), null, false);
                    if (etm!=null && !etm.equals(member) && etm.refines(member)) {
                        qmte.addError("inherited member is refined by intervening superclass: '" +
                                ((TypeDeclaration) etm.getContainer()).getName() +
                                "' refines '" + member.getName() + "' declared by '" +
                                ((TypeDeclaration) member.getContainer()).getName() + "'");
                    }
                    for (TypeDeclaration td: ci.getSatisfiedTypeDeclarations()) {
                        Declaration stm = td.getMember(member.getName(), null, false);
                        if (stm!=null && !stm.equals(member) && stm.refines(member)) {
                            qmte.addError("inherited member is refined by intervening superinterface: '" +
                                    ((TypeDeclaration) stm.getContainer()).getName() +
                                    "' refines '" + member.getName() + "' declared by '" +
View Full Code Here

            }
            else {
                pt = pt.resolveAliases(); //needed for aliases like "alias Id<T> => T"
                TypeDeclaration d = getDeclaration(that, pt);
                container = "type '" + d.getName(unit) + "'";
                ClassOrInterface ci =
                        getContainingClassOrInterface(that.getScope());
                if (ci!=null && d.inherits(ci) && !(d instanceof NothingType)) {
                    Declaration direct =
                            ci.getDirectMember(name, signature, ellipsis);
                    if (direct instanceof TypedDeclaration) {
                        member = (TypedDeclaration) direct;
                    }
                    else {
                        member = getTypedMember(d, name, signature, ellipsis, unit);
View Full Code Here

            }
            else {
                pt = pt.resolveAliases(); //needed for aliases like "alias Id<T> => T"
                TypeDeclaration d = getDeclaration(that, pt);
                container = "type '" + d.getName(unit) + "'";
                ClassOrInterface ci =
                        getContainingClassOrInterface(that.getScope());
                if (ci!=null && d.inherits(ci) && !(d instanceof NothingType)) {
                    Declaration direct =
                            ci.getDirectMember(name, signature, ellipsis);
                    if (direct instanceof TypeDeclaration) {
                        type = (TypeDeclaration) direct;
                    }
                    else {
                        type = getTypeMember(d, name, signature, ellipsis, unit);
View Full Code Here

            that.addError("reference to outer from default argument expression");
        }*/
    }

    @Override public void visit(Tree.Super that) {
        ClassOrInterface ci = getContainingClassOrInterface(that.getScope());
        if (inExtendsClause) {
            if (ci!=null) {
                if (ci.isClassOrInterfaceMember()) {
                    ClassOrInterface oci = (ClassOrInterface) ci.getContainer();
                    that.setTypeModel(intersectionOfSupertypes(oci));
                }
            }
        }
        else {
View Full Code Here

            }
        }
    }

    @Override public void visit(Tree.This that) {
        ClassOrInterface ci = getContainingClassOrInterface(that.getScope());
        if (inExtendsClause) {
            if (ci!=null) {
                if (ci.isClassOrInterfaceMember()) {
                    ClassOrInterface s = (ClassOrInterface) ci.getContainer();
                    that.setTypeModel(s.getType());
                }
            }
        }
        else {
            if (ci==null) {
View Full Code Here

          }
          errorNode = oe;
        }
    else {
        errorNode = that;
            ClassOrInterface classOrInterface =
                    getContainingClassOrInterface(that.getScope());
        if (that instanceof Tree.ClassLiteral ||
            that instanceof Tree.InterfaceLiteral) {
            d = classOrInterface;
            if (d==null) {
                errorNode.addError("no containing type");
                return; //EARLY EXIT!!
            }
            else {
                t = classOrInterface.getType();
            }
        }
        else {
            errorNode.addError("missing type reference");
            return; //EARLY EXIT!!
View Full Code Here

TOP

Related Classes of com.redhat.ceylon.compiler.typechecker.model.ClassOrInterface

Copyright © 2018 www.massapicom. 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.