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

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


        }
        if (m instanceof Tree.BaseMemberExpression) {
            Tree.BaseMemberExpression bme = (Tree.BaseMemberExpression) m;
//            Declaration member = getTypedDeclaration(bme.getScope(),
//                    name(bme.getIdentifier()), null, false, bme.getUnit());
          Declaration member = bme.getDeclaration();
          if (member==declaration) {
            if ((declaration.isFormal() || declaration.isDefault()) &&
                    !isForwardReferenceable()) {
                //TODO: is this error correct?! look at the condition above
                bme.addError("member is formal and may not be specified: '" +
                  member.getName() + "' is declared formal");
            }
            if (that.getRefinement()) {
                declare();
            }
                Tree.SpecifierExpression se = that.getSpecifierExpression();
        boolean lazy = se instanceof Tree.LazySpecifierExpression;
              if (declaration instanceof Value) {
                Value value = (Value) declaration;
                  if (!value.isVariable() &&
                          lazy!=value.isTransient()) {
                  // check that all assignments to a non-variable, in
                    // different paths of execution, all use the same
                    // kind of specifier, all =>, or all =
                    // TODO: sometimes this error appears only because
                    //       of a later line which illegally reassigns
                  se.addError("value must be specified using => lazy specifier: '" +
                          member.getName() + "'");
                  }
                  if (lazy) {
                      if (value.isVariable()) {
                          se.addError("variable value may not be specified using => lazy specifier: '" +
                                  member.getName() + "'");
                      }
                      else if (value.isLate()) {
                          se.addError("late reference may not be specified using => lazy specifier: '" +
                                  member.getName() + "'");
                      }
                  }
              }
              if (!lazy || !parameterized) {
                se.visit(this);
              }
              boolean constant = !isVariable() && !isLate();
              if (constant && !declaration.isDefinedInScope(that.getScope())) {
                  //this error is added by ExpressionVisitor
//                    that.addError("inherited member is not variable and may not be specified here: '" +
//                            member.getName() + "'");
              }
              else if (!declared && constant) {
                    bme.addError(shortdesc() +
                            " is not yet declared: '" +
                            member.getName() + "'");
              }
              else if (inLoop && constant &&
                      !(endsInBreakReturnThrow && lastContinue==null)) {
                if (specified.definitely) {
                  bme.addError(longdesc() +
                          " is aready definitely specified: '" +
                      member.getName() + "'", 803);
                }
                else {
                    bme.addError(longdesc() +
                          " is not definitely unspecified in loop: '" +
                      member.getName() + "'", 803);
                }
              }
                else if (withinDeclaration && constant &&
                        !that.getRefinement()) {
                    Declaration dec = getContainingDeclarationOfScope(that.getScope());
                    if (dec!=null && dec.equals(member)) {
                        bme.addError("cannot specify " + shortdesc() +
                                " from within its own body: '" + member.getName() + "'");
                    }
                    else {
                        bme.addError("cannot specify " + shortdesc() +
View Full Code Here


   
    @Override
    public void visit(Tree.InitializerParameter that) {
        super.visit(that);
        Parameter d = that.getParameterModel();
        Declaration a = that.getScope().getDirectMember(d.getName(), null, false);
        if (a!=null && a==declaration) {
            specify();
            hasParameter = true;
        }
    }
View Full Code Here

    }
   
    @Override
    public void visit(Tree.Declaration that) {
        super.visit(that);
        Declaration dec = that.getDeclarationModel();
        if (dec.isClassOrInterfaceMember() && dec.isActual()) {
            checkForShortcutRefinement(that, dec);
        }
    }
View Full Code Here

    }

    @Override
    public void visit(Tree.BaseMemberExpression that) {
        super.visit(that);
        Declaration dec = that.getDeclaration();
        if (dec instanceof MethodOrValue &&
                ((MethodOrValue) dec).isShortcutRefinement()) {
            checkForShortcutRefinement(that, dec);
        }
    }
View Full Code Here

    }

    private boolean isMemberRefined(List<Type> orderedTypes, int index,
            String name, Type.Members currentTypeMembers) {
        int size = orderedTypes.size();
        Declaration declarationOfSupertypeMember =
                getMemberDeclaration(currentTypeMembers);
        for (int subIndex = size-1 ; subIndex>index;subIndex--) {
            Type type = orderedTypes.get(subIndex);
            //has a direct member and supertype as inherited members
            Declaration directMember =
                    type.declaration.getDirectMember(name, null, false);
            boolean isMemberRefined =
                    directMember!=null && directMember.isShared(); //&& !(directMember instanceof Parameter);
            isMemberRefined = isMemberRefined &&
                    type.declaration.getInheritedMembers(name)
                        .contains(declarationOfSupertypeMember);
            if (isMemberRefined) {
                return true;
View Full Code Here

        }
        return false;
    }

    private TypeDeclaration getTypeDeclarationFor(Type.Members aggregateMembers) {
        Declaration memberDeclaration =
                getMemberDeclaration(aggregateMembers);
        return memberDeclaration == null ? null :
            memberDeclaration.getDeclaringType(memberDeclaration).getDeclaration();
    }
View Full Code Here

            List<Type> orderedTypes, Class clazz) {
        Type aggregation = buildAggregatedType(orderedTypes);
        for (Type.Members members: aggregation.membersByName.values()) {
            if (!members.formals.isEmpty()) {
                if (members.actualsNonFormals.isEmpty()) {
                    Declaration example = members.formals.iterator().next();
                    Declaration declaringType = (Declaration) example.getContainer();
                    if (!clazz.equals(declaringType)) {
                        addUnimplementedFormal(clazz, example);
                        that.addError("formal member '" + example.getName() +
                                "' of '" + declaringType.getName() +
                                "' not implemented in class hierarchy", 300);
                        continue;
                    }
                }
                for (Declaration f: members.formals) {
                    if (isOverloadedVersion(f)) {
                        boolean found = false;
                        for (Declaration a: members.actualsNonFormals) {
                            if (a.getRefinedDeclaration().equals(f.getRefinedDeclaration())) {
                                found = true;
                                break;
                            }
                        }
                        if (!found) {
                            StringBuilder paramTypes = new StringBuilder();
                            List<ParameterList> parameterLists =
                                    ((Functional)f).getParameterLists();
                            if (!parameterLists.isEmpty()) {
                                for (Parameter p: parameterLists.get(0).getParameters()) {
                                    if (paramTypes.length()>0) {
                                        paramTypes.append(", ");
                                    }
                                    if (!isTypeUnknown(p.getType())) {
                                        paramTypes.append(p.getType().getProducedTypeName());
                                    }
                                }
                            }
                            Declaration declaringType = (Declaration) f.getContainer();
                            addUnimplementedFormal(clazz, f);
                            that.addError("overloaded formal member '" + f.getName() +
                                    "(" + paramTypes + ")' of '" + declaringType.getName() +
                                    "' not implemented in class hierarchy"/*, 300*/);
                        }
                    }
                }
            }
View Full Code Here

                    for (Declaration d: std.getMembers()) {
                        if (d.isShared() &&
                                !isOverloadedVersion(d) &&
                                isResolvable(d) &&
                                !errors.contains(d.getName())) {
                            Declaration r = td.getMember(d.getName(), null, false);
                            if (r==null || !r.refines(d) &&
                                    //squash bogus error when there is a dupe declaration
                                    !r.getContainer().equals(td)) {
                                //TODO: This seems to dupe some checks that are already
                                //      done in TypeHierarchyVisitor, resulting in
                                //      multiple errors
                                //TODO: figure out which other declaration causes the
                                //      problem and display it to the user!
                                if (r==null) {
                                    that.addError("member '" + d.getName() +
                                            "' is inherited ambiguously by '" + td.getName() +
                                            "' from '" + std.getName()
                                            "' and another unrelated supertype");
                                }
                                else {
                                    //TODO: I'm not really certain that the following
                                    //      condition is correct, we really should
                                    //      check that the other declaration is a Java
                                    //      interface member (see the TODO above)
                                    if (!(d.getUnit().getPackage().getModule().isJava() &&
                                            r.getUnit().getPackage().getModule().isJava() &&
                                            r.isInterfaceMember() &&
                                            d.isClassMember())) {
                                        that.addError("member '" + d.getName() +
                                                "' is inherited ambiguously by '" + td.getName() +
                                                "' from '" + std.getName()
                                                "' and another subtype of '" +
                                                ((TypeDeclaration) r.getContainer()).getName() +
                                                "' and so must be refined by '" + td.getName() + "'",
                                                350);
                                    }
                                }
                                errors.add(d.getName());
View Full Code Here

    private Map<String,Integer> localNames;
    private String prefix;
   
    private void visitLocalDecl(Tree.Declaration that) {
        Declaration model = that.getDeclarationModel();
        visitLocalDeclarationModel(model);
    }
View Full Code Here

        Declaration model = that.getDeclarationModel();
        visitLocalDeclarationModel(model);
    }

    private void visitLocalDecl(Tree.ObjectArgument that) {
        Declaration model = that.getDeclarationModel();
        visitLocalDeclarationModel(model);
    }
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.