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

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


                qn = qn.substring(p0+2);
            }
            p0 = qn.indexOf('.');
            if (p0 >= 0) {
                StringBuilder nestedName = new StringBuilder(TypeUtils.modelName(d));
                Declaration pd = Util.getContainingDeclaration(d);
                while (pd != null) {
                    nestedName.insert(0, '.');
                    nestedName.insert(0, TypeUtils.modelName(pd));
                    pd = Util.getContainingDeclaration(pd);
                }
View Full Code Here


        }
        return name;
    }
   
    private Declaration originalDeclaration(Declaration decl) {
        Declaration refinedDecl = decl;
        while (true) {
            Declaration d = refinedDecl.getRefinedDeclaration();
            if ((d == null) || (d == refinedDecl)) { break; }
            refinedDecl = d;
        }
        return refinedDecl;
    }
View Full Code Here

    public SelfReferenceVisitor(TypeDeclaration td) {
        typeDeclaration = td;
    }
   
    private void visitExtendedType(Tree.ExtendedTypeExpression that) {
        Declaration member = that.getDeclaration();
        if (member!=null && !typeDeclaration.isAlias()) {
            if ( !declarationSection && isInherited(that, member) ) {
                that.addError("inherited member class may not be extended in initializer of '" +
                        typeDeclaration.getName() + "': '" + member.getName() +
                        "' is inherited from '" +
                        ((Declaration) member.getContainer()).getName() + "'");
            }
        }
    }
View Full Code Here

        }
    }

    private void visitReference(Tree.Primary that) {
        if (that instanceof Tree.MemberOrTypeExpression) {
            Declaration member = ((Tree.MemberOrTypeExpression) that).getDeclaration();
            if (member!=null) {
                if (!declarationSection && isInherited(that, member)) {
                    that.addError("inherited member may not be used in initializer of '" +
                        typeDeclaration.getName() + "': '" + member.getName() +
                        "' is inherited from '" +
                        ((Declaration) member.getContainer()).getName() + "'");
                }
            }
        }
    }
View Full Code Here

            that.addError("leaks outer reference in initializer: '" +
                    typeDeclaration.getName() + "'");
        }
        if (typeDeclaration.isAnonymous() && mayNotLeakAnonymousClass() &&
            t instanceof Tree.BaseMemberExpression) {
          Declaration declaration = ((Tree.BaseMemberExpression)t).getDeclaration();
          if (declaration instanceof TypedDeclaration) {
            if (((TypedDeclaration) declaration).getTypeDeclaration()==typeDeclaration) {
                    that.addError("object leaks self reference in initializer: '" +
                            typeDeclaration.getName() + "'");
            }
          }
        }
        if (typeDeclaration.isAnonymous() && mayNotLeakAnonymousClass() && t
            instanceof Tree.QualifiedMemberExpression) {
          Tree.QualifiedMemberExpression qme = (Tree.QualifiedMemberExpression) t;
          if (qme.getPrimary() instanceof Tree.Outer) {
            Declaration declaration = qme.getDeclaration();
            if (declaration instanceof TypedDeclaration) {
              if (((TypedDeclaration) declaration).getTypeDeclaration()==typeDeclaration) {
                that.addError("object leaks self reference in initializer: '" +
                    typeDeclaration.getName() + "'");
              }
View Full Code Here

      Tree.SpecifierExpression se = that.getSpecifierExpression();
        if (lt instanceof Tree.MemberOrTypeExpression && se!=null) {
          Tree.Expression e = se.getExpression();
          if (e!=null) {
            if (e.getTerm() instanceof Tree.This) {
              Declaration d = ((Tree.MemberOrTypeExpression) lt).getDeclaration();
              if (d instanceof MethodOrValue) {
                if (((MethodOrValue) d).isLate()) {
                  lt.visit(this);
                  return; //NOTE: EARLY EXIT!!
                }
View Full Code Here

        super.visit(that);
        if ( inBody() ) {
          Tree.Term lt = that.getLeftTerm();
      if (lt instanceof Tree.MemberOrTypeExpression &&
          that.getRightTerm() instanceof Tree.This) {
            Declaration d = ((Tree.MemberOrTypeExpression) lt).getDeclaration();
            if (d instanceof MethodOrValue) {
              if (((MethodOrValue) d).isLate()) {
                return; //NOTE: EARLY EXIT!!
              }
            }
View Full Code Here

            visitReference(that);
        }
    }

    private void visitReference(Tree.Primary that) {
        Declaration member;
        boolean assigned;
        boolean metamodel;
        if (that instanceof Tree.MemberOrTypeExpression) {
            Tree.MemberOrTypeExpression mte =
                    (Tree.MemberOrTypeExpression) that;
            member = mte.getDeclaration();
            assigned = mte.getAssigned();
            metamodel = false;
        }
        else if (that instanceof Tree.MetaLiteral) {
            Tree.MetaLiteral ml = (Tree.MetaLiteral) that;
            member = ml.getDeclaration();
            assigned = false;
            metamodel = true;
        }
        else {
            return;
        }
        //Declaration member = getDeclaration(that.getScope(), that.getUnit(), id, context);
        //TODO: check superclass members are not in declaration section!
        if (member==declaration &&
                member.isDefinedInScope(that.getScope())) {
            if (!declared) {
                //you are allowed to refer to later
                //declarations in a class declaration
                //section or interface
                if (withinAttributeInitializer &&
                    member instanceof Value &&
                    !(((Value) member).isTransient())) {
                  that.addError("reference to value within its initializer: '" +
                            member.getName() + "'", 1460);
                }
                else if (!metamodel && !isForwardReferenceable() && !hasParameter) {
                    if (declaration.getContainer() instanceof Class) {
                        that.addError("forward reference to class member in initializer: '" +
                                member.getName() +
                                "' is not yet declared (forward references must occur in declaration section)");
                    }
                    else {
                        that.addError("forward reference to local declaration: '" +
                                member.getName() + "' is not yet declared");
                    }
                }
            }
            else if (!specified.definitely ||
                    declaration.isFormal()) {
                //you are allowed to refer to formal
                //declarations in a class declaration
                //section or interface
                if (declaration.isFormal()) {
                    if (!isForwardReferenceable()) {
                        that.addError("formal member may not be used in initializer: '" +
                                member.getName() + "'");                   
                    }
                }
                else if (!declaration.isNative() && !metamodel) {
                    if (!isLate() || !isForwardReferenceable()) {
                        if (isVariable()) {
                            that.addError("not definitely initialized: '" +
                                    member.getName() + "'");                   
                        }
                        else {
                            that.addError("not definitely specified: '" +
                                    member.getName() + "'");
                        }
                    }
                }
            }
            if (!assigned && member.isDefault() &&
                    !isForwardReferenceable()) {
                that.addError("default member may not be used in initializer: '" +
                        member.getName() + "'");
            }
            if (inAnonFunctionOrComprehension &&
                specified.definitely &&
                isVariable()) {
                that.addError("variable member may not be captured by comprehension or function in extends clause: '"+
                        member.getName() + "'");
            }
        }
    }
View Full Code Here

        if (isEffectivelyBaseMemberExpression(lt)) {
            Tree.StaticMemberOrTypeExpression m =
                    (Tree.StaticMemberOrTypeExpression) lt;
//            Declaration member = getTypedDeclaration(m.getScope(),
//                    name(m.getIdentifier()), null, false, m.getUnit());
            Declaration member = m.getDeclaration();
            if (member==declaration) {
                if (that.getRightTerm()!=null) {
                    that.getRightTerm().visit(this);
                }
                checkVariable(lt, that);
View Full Code Here

   
    private void checkVariable(Tree.Term term, Node node) {
        if (isEffectivelyBaseMemberExpression(term)) {  //Note: other cases handled in ExpressionVisitor
            Tree.StaticMemberOrTypeExpression mte =
                    (Tree.StaticMemberOrTypeExpression) term;
            Declaration member = mte.getDeclaration();
            if (member==declaration) {
              if ((declaration.isFormal() || declaration.isDefault()) &&
                      !isForwardReferenceable()) {
                  term.addError("member is formal or default and may not be assigned here: '" +
                  member.getName() + "'");
              }
              else if (!isVariable() && !isLate()) {
                    if (member instanceof Value) {
                        if (node instanceof Tree.AssignOp) {
                            term.addError("value is not a variable and may not be assigned here: '" +
                                    member.getName() + "'", 803);
                        }
                        else {
                            term.addError("value is not a variable: '" +
                                    member.getName() + "'", 800);
                        }
                    }
                    else {
                        term.addError("not a variable value: '" +
                                member.getName() + "'");
                    }
                }
            }
        }
    }
View Full Code Here

TOP

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

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.