Package org.netbeans.gradle.project.java.model

Source Code of org.netbeans.gradle.project.java.model.NbJavaModel$SerializedFormat

package org.netbeans.gradle.project.java.model;

import java.io.File;
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.model.java.JavaClassPaths;
import org.netbeans.gradle.model.java.JavaSourceSet;

public final class NbJavaModel implements Serializable {
    private static final long serialVersionUID = 1L;

    private final JavaModelSource modelSource;
    private final NbJavaModule mainModule;
    private final Map<File, JavaProjectDependency> projectDependencies;
    private final AtomicReference<Set<JavaProjectReference>> allDependenciesRef;

    private NbJavaModel(
            JavaModelSource modelSource,
            NbJavaModule mainModule,
            Map<File, JavaProjectDependency> projectDependencies) {

        this.modelSource = modelSource;
        this.mainModule = mainModule;
        this.projectDependencies = projectDependencies;
        this.allDependenciesRef = new AtomicReference<>(null);
    }

    private static void addAll(
            Collection<File> dependencies,
            Map<? extends File, ? extends JavaProjectDependency> possibleDependencies,
            Map<File, JavaProjectDependency> result) {

        for (File file: dependencies) {
            JavaProjectDependency dependency = possibleDependencies.get(file);
            if (dependency != null) {
                result.put(file, dependency);
            }
        }
    }

    public static NbJavaModel createModel(
            JavaModelSource modelSource,
            NbJavaModule mainModule,
            Map<? extends File, ? extends JavaProjectDependency> possibleDependencies) {

        ExceptionHelper.checkNotNullArgument(modelSource, "modelSource");
        ExceptionHelper.checkNotNullArgument(mainModule, "mainModule");
        ExceptionHelper.checkNotNullArgument(possibleDependencies, "possibleDependencies");

        Map<File, JavaProjectDependency> relevantDependencies
                = new HashMap<>();
        for (JavaSourceSet sourceSet: mainModule.getSources()) {
            JavaClassPaths classpaths = sourceSet.getClasspaths();

            addAll(classpaths.getCompileClasspaths(), possibleDependencies, relevantDependencies);
            addAll(classpaths.getRuntimeClasspaths(), possibleDependencies, relevantDependencies);
        }

        return new NbJavaModel(modelSource, mainModule, relevantDependencies);
    }

    public JavaProjectDependency tryGetDepedency(File outputDir) {
        return projectDependencies.get(outputDir);
    }

    public JavaModelSource getModelSource() {
        return modelSource;
    }

    public NbJavaModule getMainModule() {
        return mainModule;
    }

    private Set<JavaProjectReference> extractAllDependencies() {
        Set<JavaProjectReference> result = new HashSet<>();
        for (JavaProjectDependency dependency: projectDependencies.values()) {
            result.add(dependency.getProjectReference());
        }
        return Collections.unmodifiableSet(result);
    }

    public Set<JavaProjectReference> getAllDependencies() {
        Set<JavaProjectReference> result = allDependenciesRef.get();
        if (result == null) {
            allDependenciesRef.set(extractAllDependencies());
            result = allDependenciesRef.get();
        }
        return result;
    }

    private Object writeReplace() {
        return new SerializedFormat(this);
    }

    private void readObject(ObjectInputStream stream) throws InvalidObjectException {
        throw new InvalidObjectException("Use proxy.");
    }

    private static final class SerializedFormat implements Serializable {
        private static final long serialVersionUID = 1L;

        private final JavaModelSource modelSource;
        private final NbJavaModule mainModule;
        private final Map<File, JavaProjectDependency> projectDependencies;

        public SerializedFormat(NbJavaModel source) {
            this.modelSource = source.modelSource;
            this.mainModule = source.mainModule;
            this.projectDependencies = source.projectDependencies;
        }

        private Object readResolve() throws ObjectStreamException {
            return new NbJavaModel(modelSource, mainModule, projectDependencies);
        }
    }
}
TOP

Related Classes of org.netbeans.gradle.project.java.model.NbJavaModel$SerializedFormat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.