Package org.netbeans.gradle.project.java.query

Source Code of org.netbeans.gradle.project.java.query.GradleSourceLevelQueryImplementation$EventSource

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

import javax.swing.event.ChangeListener;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.ProjectInitListener;
import org.netbeans.gradle.project.api.property.GradleProperty;
import org.netbeans.gradle.project.java.JavaExtension;
import org.netbeans.gradle.project.properties.AbstractProjectProperties;
import org.netbeans.spi.java.queries.SourceLevelQueryImplementation2;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.ChangeSupport;

public final class GradleSourceLevelQueryImplementation
implements
        SourceLevelQueryImplementation2,
        ProjectInitListener {

    private final JavaExtension javaExt;
    private final ChangeSupport changes;

    public GradleSourceLevelQueryImplementation(JavaExtension javaExt) {
        ExceptionHelper.checkNotNullArgument(javaExt, "javaExt");

        this.javaExt = javaExt;

        EventSource eventSource = new EventSource();
        this.changes = new ChangeSupport(eventSource);
        eventSource.init(this.changes);
    }

    @Override
    public void onInitProject() {
        javaExt.getOwnerProjectLookup().lookup(GradleProperty.SourceLevel.class).addChangeListener(new Runnable() {
            @Override
            public void run() {
                changes.fireChange();
            }
        });
    }

    @Override
    public Result getSourceLevel(FileObject javaFile) {
        // Assume that every source file must reside in the project directory.
        if (FileUtil.getRelativePath(javaExt.getProjectDirectory(), javaFile) == null) {
            return null;
        }

        final GradleProperty.SourceLevel sourceLevel
                = javaExt.getOwnerProjectLookup().lookup(GradleProperty.SourceLevel.class);

        return new Result() {
            @Override
            public String getSourceLevel() {
                return sourceLevel.getValue();
            }

            @Override
            public void addChangeListener(ChangeListener listener) {
                changes.addChangeListener(listener);
            }

            @Override
            public void removeChangeListener(ChangeListener listener) {
                changes.addChangeListener(listener);
            }
        };
    }

    private static final class EventSource implements Result {
        private volatile ChangeSupport changes;

        public void init(ChangeSupport changes) {
            assert changes != null;
            this.changes = changes;
        }

        @Override
        public String getSourceLevel() {
            return AbstractProjectProperties.DEFAULT_SOURCE_LEVEL;
        }

        @Override
        public void addChangeListener(ChangeListener l) {
            changes.addChangeListener(l);
        }

        @Override
        public void removeChangeListener(ChangeListener l) {
            changes.removeChangeListener(l);
        }
    }
}
TOP

Related Classes of org.netbeans.gradle.project.java.query.GradleSourceLevelQueryImplementation$EventSource

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.