01: package org.jicengine.element;
02:
03: import org.jicengine.expression.Utils;
04:
05: /**
06: *
07: * <p>
08: * Copyright (C) 2004 Timo Laitinen
09: * </p>
10: * @author Timo Laitinen
11: * @created 2004-09-20
12: * @since JICE-0.10
13: */
14:
15: public abstract class Type {
16:
17: String name;
18: String[] parameters;
19: String signature;
20:
21: protected Type(String name, String[] parameters) {
22: this .name = name;
23: this .parameters = parameters;
24: this .signature = name + "/" + parameters.length;
25: }
26:
27: public String getName() {
28: return this .name;
29: }
30:
31: public String getSignature() {
32: return this .signature;
33: }
34:
35: public String[] getParameters() {
36: return this .parameters;
37: }
38:
39: public static Type parse(String typeExpression) {
40: char[] chars = typeExpression.toCharArray();
41: char character;
42: int paramStart = -1;
43:
44: // find first '('
45: for (int i = 0; i < chars.length; i++) {
46: character = chars[i];
47: if (character == Utils.METHOD_ARGS_START) {
48: paramStart = i;
49: break;
50: }
51: }
52:
53: String typeName;
54: String[] parameters;
55:
56: if (paramStart < 0) {
57: typeName = typeExpression;
58: parameters = new String[0];
59: } else {
60: typeName = typeExpression.substring(0, paramStart);
61: parameters = Utils.extractArguments(typeExpression,
62: paramStart, typeExpression.length());
63: }
64:
65: return new SimpleType(typeName, parameters);
66: }
67:
68: public String toString() {
69: return this.signature;
70: }
71: }
|