01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: *
17: * $Header:$
18: */
19: package org.apache.beehive.controls.runtime.generator;
20:
21: import com.sun.mirror.declaration.FieldDeclaration;
22: import com.sun.mirror.type.InterfaceType;
23: import com.sun.mirror.type.TypeMirror;
24: import org.apache.beehive.controls.runtime.generator.apt.TwoPhaseAnnotationProcessor;
25:
26: /**
27: * The AptContextField class contains information about a field referring to a contextual
28: * service with an AptControlImplementation class.
29: */
30: public class AptContextField extends AptEventField {
31: /**
32: * Base constructor, protected so only a custom subclass can invoke
33: * @param controlImpl the declaring ControlImplementation
34: */
35: public AptContextField(AptControlImplementation controlImpl,
36: FieldDeclaration fieldDecl, TwoPhaseAnnotationProcessor ap) {
37: super (fieldDecl);
38: _controlImpl = controlImpl;
39: _ap = ap;
40: };
41:
42: /**
43: * Initializes a ControlInterface associated with this context field. Because
44: * contextual services can expose both APIs and events, they are similar to controls.
45: */
46: protected AptControlInterface initControlInterface() {
47: TypeMirror fieldType = _fieldDecl.getType();
48: if (!(fieldType instanceof InterfaceType)) {
49: _ap.printError(_fieldDecl, "context.field.badinterface");
50: return null;
51: }
52:
53: //
54: // For contextual services, the declared type of the field is always the public
55: // interface for the contextual service.
56: //
57: return new AptControlInterface(((InterfaceType) _fieldDecl
58: .getType()).getDeclaration(), _ap);
59: }
60:
61: private AptControlImplementation _controlImpl;
62: private TwoPhaseAnnotationProcessor _ap;
63: }
|