package org.netbeans.gradle.project.java.model; import java.io.InvalidObjectException; import java.io.ObjectInputStream; import java.io.ObjectStreamException; import java.io.Serializable; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.project.api.modelquery.GradleTarget; import org.netbeans.gradle.project.util.GradleVersions; public final class NbJavaModel implements Serializable { private static final long serialVersionUID = 1L; private final GradleTarget evaluationEnvironment; private final JavaModelSource modelSource; private final NbJavaModule mainModule; private NbJavaModel( GradleTarget evaluationEnvironment, JavaModelSource modelSource, NbJavaModule mainModule) { this.evaluationEnvironment = evaluationEnvironment; this.modelSource = modelSource; this.mainModule = mainModule; } public static NbJavaModel createModel( GradleTarget evaluationEnvironment, JavaModelSource modelSource, NbJavaModule mainModule) { ExceptionHelper.checkNotNullArgument(evaluationEnvironment, "evaluationEnvironment"); ExceptionHelper.checkNotNullArgument(modelSource, "modelSource"); ExceptionHelper.checkNotNullArgument(mainModule, "mainModule"); return new NbJavaModel(evaluationEnvironment, modelSource, mainModule); } public GradleTarget getEvaluationEnvironment() { return evaluationEnvironment; } public JavaModelSource getModelSource() { return modelSource; } public NbJavaModule getMainModule() { return mainModule; } 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 GradleTarget evaluationEnvironment; private final JavaModelSource modelSource; private final NbJavaModule mainModule; public SerializedFormat(NbJavaModel source) { this.evaluationEnvironment = source.evaluationEnvironment; this.modelSource = source.modelSource; this.mainModule = source.mainModule; } public GradleTarget getEvaluationEnvironment() { return evaluationEnvironment != null ? evaluationEnvironment : GradleVersions.DEFAULT_TARGET; } private Object readResolve() throws ObjectStreamException { return new NbJavaModel(evaluationEnvironment, modelSource, mainModule); } } }