blob: 9c93b9d417db650ec212df0e3b99359457ebf00d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.netbeans.modules.beans;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.netbeans.api.java.source.CancellableTask;
import org.netbeans.api.java.source.CompilationInfo;
import org.netbeans.api.java.source.JavaSource.Phase;
import org.netbeans.api.java.source.JavaSource.Priority;
import org.netbeans.api.java.source.JavaSourceTaskFactory;
import org.netbeans.api.java.source.support.LookupBasedJavaSourceTaskFactory;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Lookup;
/**
*
* @author Jan Lahoda, Petr Hrebejk
*/
@org.openide.util.lookup.ServiceProvider(service=org.netbeans.api.java.source.JavaSourceTaskFactory.class)
public final class BeanNavigatorJavaSourceFactory extends LookupBasedJavaSourceTaskFactory {
private BeanPanelUI ui;
private static final CancellableTask<CompilationInfo> EMPTY_TASK = new CancellableTask<CompilationInfo>() {
public void cancel() {}
public void run(CompilationInfo parameter) throws Exception {}
};
static BeanNavigatorJavaSourceFactory getInstance() {
for (JavaSourceTaskFactory f : Lookup.getDefault().lookupAll(JavaSourceTaskFactory.class)) {
if (f instanceof BeanNavigatorJavaSourceFactory) {
return (BeanNavigatorJavaSourceFactory) f;
}
}
throw new IllegalStateException();
}
public BeanNavigatorJavaSourceFactory() {
super(Phase.ELEMENTS_RESOLVED, Priority.NORMAL);
}
public synchronized CancellableTask<CompilationInfo> createTask(FileObject file) {
// System.out.println("CREATE TASK FOR " + file.getNameExt() );
if ( ui == null) {
return EMPTY_TASK;
}
else {
return ui.getTask();
}
}
public List<FileObject> getFileObjects() {
List<FileObject> result = new ArrayList<FileObject>();
// Filter uninteresting files from the lookup
for( FileObject fileObject : super.getFileObjects() ) {
if (!"text/x-java".equals(FileUtil.getMIMEType(fileObject)) && !"java".equals(fileObject.getExt())) { //NOI18N
continue;
}
result.add(fileObject);
}
if (result.size() == 1)
return result;
return Collections.emptyList();
}
public synchronized void setLookup(Lookup l, BeanPanelUI ui) {
this.ui = ui;
super.setLookup(l);
}
@Override
protected void lookupContentChanged() {
// System.out.println("lookupContentChanged");
if ( ui != null ) {
ui.showWaitNode(); // Creating new task (file changed)
}
}
}