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.netui.compiler.genmodel;
20:
21: import org.apache.beehive.netui.compiler.model.ActionOutputModel;
22: import org.apache.beehive.netui.compiler.JpfLanguageConstants;
23: import org.apache.beehive.netui.compiler.CompilerUtils;
24: import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
25: import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
26: import org.apache.beehive.netui.compiler.typesystem.type.ArrayType;
27: import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
28: import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
29: import org.apache.beehive.netui.compiler.typesystem.type.PrimitiveType;
30:
31: public class GenActionOutputModel extends ActionOutputModel implements
32: JpfLanguageConstants {
33: public GenActionOutputModel(AnnotationInstance annotation,
34: ClassDeclaration jclass) {
35: setName(CompilerUtils.getString(annotation, NAME_ATTR, true));
36:
37: Boolean required = CompilerUtils.getBoolean(annotation,
38: REQUIRED_ATTR, false);
39: boolean nullable = !required.booleanValue();
40: setNullable(nullable);
41:
42: //
43: // Get the base type, and add "[]" to it for arrays.
44: //
45: TypeInstance baseType = CompilerUtils.getReferenceType(
46: annotation, TYPE_ATTR, true);
47: StringBuffer arrayDimensions = new StringBuffer();
48: while (baseType instanceof ArrayType) {
49: arrayDimensions.append(ARRAY_TYPE_SUFFIX);
50: baseType = ((ArrayType) baseType).getComponentType();
51: }
52:
53: String baseTypeName;
54: if (baseType instanceof PrimitiveType) {
55: baseTypeName = ((PrimitiveType) baseType).getKind()
56: .toString().toLowerCase();
57: } else {
58: assert baseType instanceof DeclaredType : baseType
59: .getClass().getName(); // checker should enforce this
60: baseTypeName = CompilerUtils
61: .getLoadableName((DeclaredType) baseType);
62: }
63:
64: setType(baseTypeName + arrayDimensions.toString());
65: }
66: }
|