All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.walkmod.javalang.ast.expr.ArrayCreationExpr Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2013 Raquel Pau and Albert Coroleu.
 * 
 * Walkmod is free software: you can redistribute it and/or modify it under the terms of the GNU
 * Lesser General Public License as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 * 
 * Walkmod is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License along with Walkmod. If
 * not, see .
 */
package org.walkmod.javalang.ast.expr;

import java.util.LinkedList;
import java.util.List;

import org.walkmod.javalang.ast.Node;
import org.walkmod.javalang.ast.type.Type;
import org.walkmod.javalang.visitors.GenericVisitor;
import org.walkmod.javalang.visitors.VoidVisitor;

/**
 * @author Julio Vilmar Gesser
 */
public final class ArrayCreationExpr extends Expression {

    private Type type;

    private int arrayCount;

    private ArrayInitializerExpr initializer;

    private List dimensions;

    private List> arraysAnnotations;

    public ArrayCreationExpr() {}

    public ArrayCreationExpr(Type type, int arrayCount, ArrayInitializerExpr initializer) {
        setType(type);
        this.arrayCount = arrayCount;
        setInitializer(initializer);
        this.dimensions = null;
    }

    public ArrayCreationExpr(Type type, int arrayCount, ArrayInitializerExpr initializer,
            List> arraysAnnotations) {
        setType(type);
        this.arrayCount = arrayCount;
        setInitializer(initializer);
        this.dimensions = null;
        setArraysAnnotations(arraysAnnotations);
    }

    public ArrayCreationExpr(int beginLine, int beginColumn, int endLine, int endColumn, Type type, int arrayCount,
            ArrayInitializerExpr initializer) {
        super(beginLine, beginColumn, endLine, endColumn);
        setType(type);
        this.arrayCount = arrayCount;
        setInitializer(initializer);
        this.dimensions = null;
    }

    public ArrayCreationExpr(Type type, List dimensions, int arrayCount) {
        setType(type);
        this.arrayCount = arrayCount;
        setDimensions(dimensions);
        this.initializer = null;
    }

    public ArrayCreationExpr(Type type, List dimensions, int arrayCount,
            List> arraysAnnotations) {
        setType(type);
        this.arrayCount = arrayCount;
        setDimensions(dimensions);
        this.initializer = null;
        setArraysAnnotations(arraysAnnotations);
    }

    public ArrayCreationExpr(int beginLine, int beginColumn, int endLine, int endColumn, Type type,
            List dimensions, int arrayCount) {
        super(beginLine, beginColumn, endLine, endColumn);
        setType(type);
        this.arrayCount = arrayCount;
        setDimensions(dimensions);
        this.initializer = null;
    }

    public ArrayCreationExpr(int beginLine, int beginColumn, int endLine, int endColumn, Type type,
            List dimensions, int arrayCount, List> arraysAnnotations) {
        super(beginLine, beginColumn, endLine, endColumn);
        setType(type);
        this.arrayCount = arrayCount;
        setDimensions(dimensions);
        this.initializer = null;
        setArraysAnnotations(arraysAnnotations);
    }

    @Override
    public boolean removeChild(Node child) {
        boolean result = false;
        if (child != null) {
            if (type == child) {
                type = null;
                result = true;
            }
        }
        if (result) {
            updateReferences(child);
        }
        return result;
    }

    @Override
    public List getChildren() {
        List children = new LinkedList();
        if (type != null) {
            children.add(type);
        }
        if (initializer != null) {
            children.add(initializer);
        }
        if (dimensions != null) {
            children.addAll(dimensions);
        }
        if (arraysAnnotations != null) {
            for (List l : arraysAnnotations) {
                children.addAll(l);
            }
        }
        return children;
    }

    @Override
    public  R accept(GenericVisitor v, A arg) {
        if (!check()) {
            return null;
        }
        return v.visit(this, arg);
    }

    @Override
    public  void accept(VoidVisitor v, A arg) {
        if (check()) {
            v.visit(this, arg);
        }
    }

    public int getArrayCount() {
        return arrayCount;
    }

    public List getDimensions() {
        return dimensions;
    }

    public ArrayInitializerExpr getInitializer() {
        return initializer;
    }

    public Type getType() {
        return type;
    }

    public void setArrayCount(int arrayCount) {
        this.arrayCount = arrayCount;
    }

    public void setDimensions(List dimensions) {
        this.dimensions = dimensions;
        setAsParentNodeOf(dimensions);
    }

    public void setInitializer(ArrayInitializerExpr initializer) {
        if (this.initializer != null) {
            updateReferences(this.initializer);
        }
        this.initializer = initializer;
        setAsParentNodeOf(initializer);
    }

    public void setType(Type type) {
        if (this.type != null) {
            updateReferences(this.type);
        }
        this.type = type;
    }

    public List> getArraysAnnotations() {
        return arraysAnnotations;
    }

    public void setArraysAnnotations(List> arraysAnnotations) {
        this.arraysAnnotations = arraysAnnotations;
        if (arraysAnnotations != null) {
            for (List ann : arraysAnnotations) {
                setAsParentNodeOf(ann);
            }
        }
    }

    @Override
    public boolean replaceChildNode(Node oldChild, Node newChild) {
        boolean updated = false;

        if (type == oldChild) {
            setType((Type) newChild);
            updated = true;
        }
        if (!updated) {
            if (initializer == oldChild) {
                setInitializer((ArrayInitializerExpr) newChild);
                updated = true;
            }
        }
        if (!updated && dimensions != null) {
            List auxDimensions = new LinkedList(dimensions);
            updated = this.replaceChildNodeInList(oldChild, newChild, auxDimensions);
            if (updated) {
                dimensions = auxDimensions;
            }
        }
        if (!updated && arraysAnnotations != null) {
            List> auxArraysAnn = new LinkedList>(arraysAnnotations);
            updated = replaceChildNodeInList(oldChild, newChild, auxArraysAnn);
            if (updated) {
                arraysAnnotations = auxArraysAnn;
            }
        }
        return updated;
    }

    @Override
    public ArrayCreationExpr clone() throws CloneNotSupportedException {
        List> copy = null;
        if (arraysAnnotations != null) {
            copy = new LinkedList>();
            for (List item : arraysAnnotations) {
                copy.add(clone(item));
            }
        }
        return new ArrayCreationExpr(clone(getType()), clone(dimensions), arrayCount, copy);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy