This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 111292
Collapse All | Expand All

(-)a/openide.util/src/org/netbeans/modules/openide/util/ServiceProviderProcessor.java (+75 lines)
Lines 49-59 Link Here
49
import java.io.PrintWriter;
49
import java.io.PrintWriter;
50
import java.lang.annotation.Annotation;
50
import java.lang.annotation.Annotation;
51
import java.util.ArrayList;
51
import java.util.ArrayList;
52
import java.util.Collection;
53
import java.util.Collections;
52
import java.util.HashMap;
54
import java.util.HashMap;
55
import java.util.LinkedList;
53
import java.util.List;
56
import java.util.List;
54
import java.util.Map;
57
import java.util.Map;
55
import java.util.Set;
58
import java.util.Set;
56
import javax.annotation.processing.AbstractProcessor;
59
import javax.annotation.processing.AbstractProcessor;
60
import javax.annotation.processing.Completion;
57
import javax.annotation.processing.RoundEnvironment;
61
import javax.annotation.processing.RoundEnvironment;
58
import javax.annotation.processing.SupportedAnnotationTypes;
62
import javax.annotation.processing.SupportedAnnotationTypes;
59
import javax.annotation.processing.SupportedSourceVersion;
63
import javax.annotation.processing.SupportedSourceVersion;
Lines 65-70 Link Here
65
import javax.lang.model.element.Modifier;
69
import javax.lang.model.element.Modifier;
66
import javax.lang.model.element.TypeElement;
70
import javax.lang.model.element.TypeElement;
67
import javax.lang.model.type.MirroredTypeException;
71
import javax.lang.model.type.MirroredTypeException;
72
import javax.lang.model.type.TypeKind;
68
import javax.lang.model.type.TypeMirror;
73
import javax.lang.model.type.TypeMirror;
69
import javax.lang.model.util.ElementFilter;
74
import javax.lang.model.util.ElementFilter;
70
import javax.tools.Diagnostic.Kind;
75
import javax.tools.Diagnostic.Kind;
Lines 270-273 Link Here
270
        return null;
275
        return null;
271
    }
276
    }
272
277
278
    @Override
279
    public Iterable<? extends Completion> getCompletions(Element annotated, AnnotationMirror annotation, ExecutableElement attr, String userText) {
280
        if (processingEnv == null || annotated == null || !annotated.getKind().isClass()) {
281
            return Collections.emptyList();
282
        }
283
284
        if (   annotation == null
285
            || !"org.openide.util.lookup.ServiceProvider".contentEquals(((TypeElement) annotation.getAnnotationType().asElement()).getQualifiedName())) {
286
            return Collections.emptyList();
287
        }
288
289
        if (!"service".contentEquals(attr.getSimpleName())) {
290
            return Collections.emptyList();
291
        }
292
293
        TypeElement jlObject = processingEnv.getElementUtils().getTypeElement("java.lang.Object");
294
295
        if (jlObject == null) {
296
            return Collections.emptyList();
297
        }
298
        
299
        Collection<Completion> result = new LinkedList<Completion>();
300
        List<TypeElement> toProcess = new LinkedList<TypeElement>();
301
302
        toProcess.add((TypeElement) annotated);
303
304
        while (!toProcess.isEmpty()) {
305
            TypeElement c = toProcess.remove(0);
306
307
            result.add(new TypeCompletion(c.getQualifiedName().toString()));
308
309
            List<TypeMirror> parents = new LinkedList<TypeMirror>();
310
311
            parents.add(c.getSuperclass());
312
            parents.addAll(c.getInterfaces());
313
314
            for (TypeMirror tm : parents) {
315
                if (tm == null || tm.getKind() != TypeKind.DECLARED) {
316
                    continue;
317
                }
318
319
                TypeElement type = (TypeElement) processingEnv.getTypeUtils().asElement(tm);
320
321
                if (!jlObject.equals(type)) {
322
                    toProcess.add(type);
323
                }
324
            }
325
        }
326
327
        return result;
328
    }
329
330
    private static final class TypeCompletion implements Completion {
331
332
        private final String fqn;
333
334
        public TypeCompletion(String fqn) {
335
            this.fqn = fqn;
336
        }
337
338
        public String getValue() {
339
            return fqn;
340
        }
341
342
        public String getMessage() {
343
            return null;
344
        }
345
        
346
    }
347
273
}
348
}

Return to bug 111292