Home | History | Annotate | Download | only in type
      1 /*
      2  * Copyright (C) 2007-2010 Jlio Vilmar Gesser.
      3  * Copyright (C) 2011, 2013-2016 The JavaParser Team.
      4  *
      5  * This file is part of JavaParser.
      6  *
      7  * JavaParser can be used either under the terms of
      8  * a) the GNU Lesser General Public License as published by
      9  *     the Free Software Foundation, either version 3 of the License, or
     10  *     (at your option) any later version.
     11  * b) the terms of the Apache License
     12  *
     13  * You should have received a copy of both licenses in LICENCE.LGPL and
     14  * LICENCE.APACHE. Please refer to those files for details.
     15  *
     16  * JavaParser is distributed in the hope that it will be useful,
     17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19  * GNU Lesser General Public License for more details.
     20  */
     21 package com.github.javaparser.ast.type;
     22 
     23 import com.github.javaparser.ast.AllFieldsConstructor;
     24 import com.github.javaparser.ast.NodeList;
     25 import com.github.javaparser.ast.expr.AnnotationExpr;
     26 import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
     27 import com.github.javaparser.ast.visitor.GenericVisitor;
     28 import com.github.javaparser.ast.visitor.VoidVisitor;
     29 import java.util.Arrays;
     30 import java.util.List;
     31 import com.github.javaparser.ast.Node;
     32 import com.github.javaparser.ast.visitor.CloneVisitor;
     33 import com.github.javaparser.metamodel.VoidTypeMetaModel;
     34 import com.github.javaparser.metamodel.JavaParserMetaModel;
     35 import javax.annotation.Generated;
     36 import com.github.javaparser.TokenRange;
     37 import com.github.javaparser.resolution.types.ResolvedUnionType;
     38 import com.github.javaparser.resolution.types.ResolvedVoidType;
     39 import java.util.function.Consumer;
     40 import java.util.Optional;
     41 
     42 /**
     43  * The return type of a {@link com.github.javaparser.ast.body.MethodDeclaration}
     44  * when it returns void.
     45  * <br/><code><b>void</b> helloWorld() { ... }</code>
     46  *
     47  * @author Julio Vilmar Gesser
     48  */
     49 public final class VoidType extends Type implements NodeWithAnnotations<VoidType> {
     50 
     51     @AllFieldsConstructor
     52     public VoidType() {
     53         this(null);
     54     }
     55 
     56     /**
     57      * This constructor is used by the parser and is considered private.
     58      */
     59     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
     60     public VoidType(TokenRange tokenRange) {
     61         super(tokenRange);
     62         customInitialization();
     63     }
     64 
     65     @Override
     66     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     67     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
     68         return v.visit(this, arg);
     69     }
     70 
     71     @Override
     72     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     73     public <A> void accept(final VoidVisitor<A> v, final A arg) {
     74         v.visit(this, arg);
     75     }
     76 
     77     @Override
     78     public VoidType setAnnotations(NodeList<AnnotationExpr> annotations) {
     79         return (VoidType) super.setAnnotations(annotations);
     80     }
     81 
     82     @Override
     83     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
     84     public boolean remove(Node node) {
     85         if (node == null)
     86             return false;
     87         return super.remove(node);
     88     }
     89 
     90     @Override
     91     public String asString() {
     92         return "void";
     93     }
     94 
     95     @Override
     96     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
     97     public VoidType clone() {
     98         return (VoidType) accept(new CloneVisitor(), null);
     99     }
    100 
    101     @Override
    102     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
    103     public VoidTypeMetaModel getMetaModel() {
    104         return JavaParserMetaModel.voidTypeMetaModel;
    105     }
    106 
    107     @Override
    108     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
    109     public boolean replace(Node node, Node replacementNode) {
    110         if (node == null)
    111             return false;
    112         return super.replace(node, replacementNode);
    113     }
    114 
    115     @Override
    116     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    117     public boolean isVoidType() {
    118         return true;
    119     }
    120 
    121     @Override
    122     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    123     public VoidType asVoidType() {
    124         return this;
    125     }
    126 
    127     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    128     public void ifVoidType(Consumer<VoidType> action) {
    129         action.accept(this);
    130     }
    131 
    132     @Override
    133     public ResolvedVoidType resolve() {
    134         return getSymbolResolver().toResolvedType(this, ResolvedVoidType.class);
    135     }
    136 
    137     @Override
    138     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    139     public Optional<VoidType> toVoidType() {
    140         return Optional.of(this);
    141     }
    142 }
    143