comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ParameterSpec.java @ 16759:23415229349b

Truffle-DSL: new package structure.
author Christian Humer <christian.humer@gmail.com>
date Mon, 11 Aug 2014 15:57:14 +0200
parents graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/template/ParameterSpec.java@dbc17f07cec6
children 0370880ac9ce
comparison
equal deleted inserted replaced
16758:c5f8eeb3cbc8 16759:23415229349b
1 /*
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package com.oracle.truffle.dsl.processor.model;
24
25 import java.util.*;
26
27 import javax.lang.model.type.*;
28
29 import com.oracle.truffle.dsl.processor.java.*;
30 import com.oracle.truffle.dsl.processor.model.MethodSpec.TypeDef;
31 import com.oracle.truffle.dsl.processor.parser.*;
32
33 public class ParameterSpec {
34
35 private final String name;
36 private final List<TypeMirror> allowedTypes;
37
38 /** Type is bound to local final variable. */
39 private boolean local;
40 private boolean signature;
41
42 /** Optional bound execution of node. */
43 private NodeExecutionData execution;
44 private TypeDef typeDefinition;
45
46 public ParameterSpec(String name, List<TypeMirror> allowedTypes) {
47 this.name = name;
48 this.allowedTypes = allowedTypes;
49 }
50
51 public ParameterSpec(String name, TypeMirror type) {
52 this(name, Arrays.asList(type));
53 }
54
55 public ParameterSpec(ParameterSpec o, List<TypeMirror> allowedTypes) {
56 this.name = o.name;
57 this.local = o.local;
58 this.typeDefinition = o.typeDefinition;
59 this.execution = o.execution;
60 this.signature = o.signature;
61 this.allowedTypes = allowedTypes;
62 }
63
64 public NodeExecutionData getExecution() {
65 return execution;
66 }
67
68 public void setExecution(NodeExecutionData executionData) {
69 this.execution = executionData;
70 this.signature = execution != null;
71 }
72
73 public void setSignature(boolean signature) {
74 this.signature = signature;
75 }
76
77 void setTypeDefinition(TypeDef typeDefinition) {
78 this.typeDefinition = typeDefinition;
79 }
80
81 TypeDef getTypeDefinition() {
82 return typeDefinition;
83 }
84
85 public void setLocal(boolean local) {
86 this.local = local;
87 }
88
89 public boolean isSignature() {
90 return signature;
91 }
92
93 public boolean isLocal() {
94 return local;
95 }
96
97 public String getName() {
98 return name;
99 }
100
101 public List<TypeMirror> getAllowedTypes() {
102 return allowedTypes;
103 }
104
105 public boolean matches(TypeMirror actualType) {
106 for (TypeMirror mirror : allowedTypes) {
107 if (ElementUtils.typeEquals(actualType, mirror)) {
108 return true;
109 }
110 }
111 return false;
112 }
113
114 @Override
115 public String toString() {
116 return toSignatureString(false);
117 }
118
119 public String toSignatureString(boolean typeOnly) {
120 StringBuilder builder = new StringBuilder();
121 if (typeDefinition != null) {
122 builder.append("<" + typeDefinition.getName() + ">");
123 } else if (getAllowedTypes().size() >= 1) {
124 builder.append(ElementUtils.getSimpleName(getAllowedTypes().get(0)));
125 } else {
126 builder.append("void");
127 }
128 if (!typeOnly) {
129 builder.append(" ");
130 builder.append(getName());
131 }
132 return builder.toString();
133 }
134
135 }