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

sk.antons.sb.rest.doclet.cl.Cl Maven / Gradle / Ivy

/*
 * Copyright 2020 Anton Straka
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package sk.antons.sb.rest.doclet.cl;

import java.util.ArrayList;
import java.util.List;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import sk.antons.jaul.pojo.Messer;
import sk.antons.sb.rest.doclet.ClassResolver;
import sk.antons.sb.rest.doclet.wrap.TypeMirrorWrap;
import sk.antons.sb.rest.doclet.wrap.WrapEnv;

/**
 *
 * @author antons
 */
public class Cl {
    String classname;
    TypeElement element;
    List children = new ArrayList<>();;
    List parents = new ArrayList<>();;
   
    public Cl(String classes, TypeElement element) { 
        this.classname = classes; 
        this.element = element; 
    }
    public static Cl instance(String classname, TypeElement element) { return new Cl(classname, element); }

    public TypeElement element() { return element; }
    public List parents() { return parents; }
    public List children() { return children; }

    public void addChildren(Cl cl) { 
        if(!children.contains(cl)) children.add(cl); 
        if(!cl.parents.contains(this)) cl.parents.add(this); 
    }
    public List descendands() { 
        List list = new ArrayList<>();
        for(Cl cl : children) cl.descendands(list);
        return list;
    }

    protected void descendands(List list) { 
        list.add(this); 
        for(Cl cl : children) cl.descendands(list);
    }

    public boolean isAbstract() {
        if(element.getKind() == ElementKind.INTERFACE) return true;
        if(element.getModifiers().contains(Modifier.ABSTRACT)) return true;
        return false;
    }

    public Cl nonAbstractDescendand() {
        if(!isAbstract()) return this;
        for(Cl cl : children) if(!cl.isAbstract()) return cl;
        return null;
    }

    public void addMesserMapping(Messer messer, ClassResolver clresolver) {
        if(!isAbstract()) return;
        Cl cl = nonAbstractDescendand();
        if(cl == null) return;
        Class cls1 = clresolver.resolve(classname);
        if(cls1 == null) return;
        Class cls2 = clresolver.resolve(cl.classname);
        if(cls2 == null) return;
        messer.map(cls1, cls2);
    }
    
    public void closureparent(WrapEnv env) {
        //System.out.println(" clcl " + element);
        TypeMirrorWrap.instance(element.asType(), env).closure();
        for(Cl parent : parents) parent.closureparent(env);
    }
    public void closurechild(WrapEnv env) {
        //System.out.println(" clcl " + element);
        TypeMirrorWrap.instance(element.asType(), env).closure();
        for(Cl parent : children) parent.closurechild(env);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy