@Override public Void visitClassDeclaration(ClassDeclaration node) { ElementHolder holder = new ElementHolder(); visitChildren(holder, node); SimpleIdentifier className = node.getName(); ClassElementImpl element = new ClassElementImpl(className); MethodElement[] methods = holder.getMethods(); element.setAbstract(node.getAbstractKeyword() != null); element.setAccessors(holder.getAccessors()); element.setConstructors(holder.getConstructors()); element.setFields(holder.getFields()); element.setMethods(methods); TypeVariableElement[] typeVariables = holder.getTypeVariables(); element.setTypeVariables(typeVariables); InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); int typeVariableCount = typeVariables.length; Type[] typeArguments = new Type[typeVariableCount]; for (int i = 0; i < typeVariableCount; i++) { TypeVariableElementImpl typeVariable = (TypeVariableElementImpl) typeVariables[i]; TypeVariableTypeImpl typeArgument = new TypeVariableTypeImpl(typeVariable); typeVariable.setType(typeArgument); typeArguments[i] = typeArgument; } interfaceType.setTypeArguments(typeArguments); element.setType(interfaceType); currentHolder.addType(element); className.setElement(element); return null; }
public void test_visitMethodDeclaration_static() { ElementHolder holder = new ElementHolder(); ElementBuilder builder = new ElementBuilder(holder); String methodName = "m"; MethodDeclaration methodDeclaration = methodDeclaration( Keyword.STATIC, null, null, null, identifier(methodName), formalParameterList(), blockFunctionBody()); methodDeclaration.accept(builder); MethodElement[] methods = holder.getMethods(); assertLength(1, methods); MethodElement method = methods[0]; assertNotNull(method); assertEquals(methodName, method.getName()); assertLength(0, method.getFunctions()); assertLength(0, method.getLabels()); assertLength(0, method.getLocalVariables()); assertLength(0, method.getParameters()); assertFalse(method.isAbstract()); assertTrue(method.isStatic()); assertFalse(method.isSynthetic()); }
public void test_visitMethodDeclaration_withMembers() { ElementHolder holder = new ElementHolder(); ElementBuilder builder = new ElementBuilder(holder); String methodName = "m"; String parameterName = "p"; String localVariableName = "v"; String labelName = "l"; String exceptionParameterName = "e"; MethodDeclaration methodDeclaration = methodDeclaration( null, null, null, null, identifier(methodName), formalParameterList(simpleFormalParameter(parameterName)), blockFunctionBody( variableDeclarationStatement(Keyword.VAR, variableDeclaration(localVariableName)), tryStatement( block(labeledStatement(list(label(labelName)), returnStatement())), catchClause(exceptionParameterName)))); methodDeclaration.accept(builder); MethodElement[] methods = holder.getMethods(); assertLength(1, methods); MethodElement method = methods[0]; assertNotNull(method); assertEquals(methodName, method.getName()); assertFalse(method.isAbstract()); assertFalse(method.isStatic()); assertFalse(method.isSynthetic()); VariableElement[] parameters = method.getParameters(); assertLength(1, parameters); VariableElement parameter = parameters[0]; assertNotNull(parameter); assertEquals(parameterName, parameter.getName()); VariableElement[] localVariables = method.getLocalVariables(); assertLength(2, localVariables); VariableElement firstVariable = localVariables[0]; VariableElement secondVariable = localVariables[1]; assertNotNull(firstVariable); assertNotNull(secondVariable); assertTrue( (firstVariable.getName().equals(localVariableName) && secondVariable.getName().equals(exceptionParameterName)) || (firstVariable.getName().equals(exceptionParameterName) && secondVariable.getName().equals(localVariableName))); LabelElement[] labels = method.getLabels(); assertLength(1, labels); LabelElement label = labels[0]; assertNotNull(label); assertEquals(labelName, label.getName()); }
@Override public Void visitClassDeclaration(ClassDeclaration node) { ElementHolder holder = new ElementHolder(); visitChildren(holder, node); TypeElementImpl element = new TypeElementImpl(node.getName()); MethodElement[] methods = holder.getMethods(); element.setAbstract(node.getAbstractKeyword() != null || hasAbstractMethod(methods)); element.setAccessors(holder.getAccessors()); element.setConstructors(holder.getConstructors()); element.setFields(holder.getFields()); element.setMethods(methods); element.setTypeVariables(holder.getTypeVariables()); currentHolder.addType(element); return null; }
@Override public Void visitClassDeclaration(ClassDeclaration node) { ElementHolder holder = new ElementHolder(); isValidMixin = true; functionTypesToFix = new ArrayList<FunctionTypeImpl>(); visitChildren(holder, node); SimpleIdentifier className = node.getName(); ClassElementImpl element = new ClassElementImpl(className); TypeParameterElement[] typeParameters = holder.getTypeParameters(); Type[] typeArguments = createTypeParameterTypes(typeParameters); InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); interfaceType.setTypeArguments(typeArguments); element.setType(interfaceType); ConstructorElement[] constructors = holder.getConstructors(); if (constructors.length == 0) { // // Create the default constructor. // constructors = createDefaultConstructors(interfaceType); } element.setAbstract(node.getAbstractKeyword() != null); element.setAccessors(holder.getAccessors()); element.setConstructors(constructors); element.setFields(holder.getFields()); element.setMethods(holder.getMethods()); element.setTypeParameters(typeParameters); element.setValidMixin(isValidMixin); int functionTypeCount = functionTypesToFix.size(); for (int i = 0; i < functionTypeCount; i++) { functionTypesToFix.get(i).setTypeArguments(typeArguments); } functionTypesToFix = null; currentHolder.addType(element); className.setStaticElement(element); holder.validate(); return null; }