@Override public Void visitMethodDeclaration(MethodDeclaration node) { ElementHolder holder = new ElementHolder(); visitChildren(holder, node); Token property = node.getPropertyKeyword(); if (property == null) { MethodElementImpl element = new MethodElementImpl(node.getName()); Token keyword = node.getModifierKeyword(); element.setAbstract(matches(keyword, Keyword.ABSTRACT)); element.setFunctions(holder.getFunctions()); element.setLabels(holder.getLabels()); element.setLocalVariables(holder.getVariables()); if (holder.getParameters() != null) { element.setParameters(holder.getParameters()); } element.setStatic(matches(keyword, Keyword.STATIC)); currentHolder.addMethod(element); } else { Identifier propertyNameNode = node.getName(); String propertyName = propertyNameNode.getName(); FieldElementImpl field = (FieldElementImpl) currentHolder.getField(propertyName); if (field == null) { field = new FieldElementImpl(node.getName().getName()); field.setFinal(true); field.setStatic(matches(node.getModifierKeyword(), Keyword.STATIC)); currentHolder.addField(field); } if (matches(property, Keyword.GET)) { PropertyAccessorElementImpl getter = new PropertyAccessorElementImpl(propertyNameNode); getter.setField(field); getter.setGetter(true); field.setGetter(getter); } else { PropertyAccessorElementImpl setter = new PropertyAccessorElementImpl(propertyNameNode); setter.setField(field); setter.setSetter(true); field.setSetter(setter); field.setFinal(false); } } return null; }
@Override public Void visitConstructorDeclaration(ConstructorDeclaration node) { isValidMixin = false; ElementHolder holder = new ElementHolder(); boolean wasInFunction = inFunction; inFunction = true; try { visitChildren(holder, node); } finally { inFunction = wasInFunction; } SimpleIdentifier constructorName = node.getName(); ConstructorElementImpl element = new ConstructorElementImpl(constructorName); if (node.getFactoryKeyword() != null) { element.setFactory(true); } element.setFunctions(holder.getFunctions()); element.setLabels(holder.getLabels()); element.setLocalVariables(holder.getLocalVariables()); element.setParameters(holder.getParameters()); element.setConst(node.getConstKeyword() != null); currentHolder.addConstructor(element); node.setElement(element); if (constructorName == null) { Identifier returnType = node.getReturnType(); if (returnType != null) { element.setNameOffset(returnType.getOffset()); } } else { constructorName.setStaticElement(element); } holder.validate(); return null; }
@Override protected Element internalLookup( Identifier identifier, String name, LibraryElement referencingLibrary) { Element element = localLookup(name, referencingLibrary); if (element != null) { return element; } // May be there is a hidden Element. if (hasHiddenName) { Element hiddenElement = hiddenElements.get(name); if (hiddenElement != null) { getErrorListener() .onError( new AnalysisError( getSource(identifier), identifier.getOffset(), identifier.getLength(), CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION)); return hiddenElement; } } // Check enclosing scope. return enclosingScope.internalLookup(identifier, name, referencingLibrary); }