1.1 --- a/javap/src/main/java/org/apidesign/javap/TypeSignature.java Wed Dec 12 12:37:41 2012 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,295 +0,0 @@
1.4 -/*
1.5 - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
1.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1.7 - *
1.8 - * This code is free software; you can redistribute it and/or modify it
1.9 - * under the terms of the GNU General Public License version 2 only, as
1.10 - * published by the Free Software Foundation. Oracle designates this
1.11 - * particular file as subject to the "Classpath" exception as provided
1.12 - * by Oracle in the LICENSE file that accompanied this code.
1.13 - *
1.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
1.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1.16 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1.17 - * version 2 for more details (a copy is included in the LICENSE file that
1.18 - * accompanied this code).
1.19 - *
1.20 - * You should have received a copy of the GNU General Public License version
1.21 - * 2 along with this work; if not, write to the Free Software Foundation,
1.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1.23 - *
1.24 - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1.25 - * or visit www.oracle.com if you need additional information or have any
1.26 - * questions.
1.27 - */
1.28 -
1.29 -
1.30 -package org.apidesign.javap;
1.31 -
1.32 -import java.util.*;
1.33 -import java.io.*;
1.34 -
1.35 -/**
1.36 - * Returns java type signature.
1.37 - *
1.38 - * @author Sucheta Dambalkar
1.39 - */
1.40 -public class TypeSignature {
1.41 -
1.42 - String parameters = null;
1.43 - String returntype = null;
1.44 - String fieldtype = null;
1.45 - int argumentlength = 0;
1.46 -
1.47 - public TypeSignature(String JVMSignature){
1.48 -
1.49 - if(JVMSignature != null){
1.50 - if(JVMSignature.indexOf("(") == -1){
1.51 - //This is a field type.
1.52 - this.fieldtype = getFieldTypeSignature(JVMSignature);
1.53 - }else {
1.54 - String parameterdes = null;
1.55 - if((JVMSignature.indexOf(")")-1) > (JVMSignature.indexOf("("))){
1.56 - //Get parameter signature.
1.57 - parameterdes =
1.58 - JVMSignature.substring(JVMSignature.indexOf("(")+1,
1.59 - JVMSignature.indexOf(")"));
1.60 - this.parameters = getParametersHelper(parameterdes);
1.61 - }else this.parameters = "()";
1.62 - //Get return type signature.
1.63 - String returndes = JVMSignature.substring(JVMSignature.lastIndexOf(")")+1);
1.64 - this.returntype = getReturnTypeHelper(returndes);
1.65 - }
1.66 - }
1.67 - }
1.68 -
1.69 - /**
1.70 - * Returns java type signature of a field.
1.71 - */
1.72 - public String getFieldTypeSignature(String fielddes){
1.73 - if(fielddes.startsWith("L")){
1.74 - return(getObjectType(fielddes));
1.75 - }else if(fielddes.startsWith("[")){
1.76 - return(getArrayType(fielddes));
1.77 - }else
1.78 - return(getBaseType(fielddes));
1.79 - }
1.80 -
1.81 - /**
1.82 - * Returns java type signature of a parameter.
1.83 - */
1.84 - public String getParametersHelper(String parameterdes){
1.85 - Vector parameters = new Vector();
1.86 - int startindex = -1;
1.87 - int endindex = -1;
1.88 - String param = "";
1.89 -
1.90 - while(parameterdes != null){
1.91 -
1.92 - if(parameterdes.startsWith("L")){
1.93 - //parameter is a object.
1.94 - startindex = parameterdes.indexOf("L");
1.95 - endindex = parameterdes.indexOf(";");
1.96 - if(startindex < parameterdes.length()) {
1.97 - if(endindex == parameterdes.length()-1) {
1.98 - //last parameter
1.99 - param = parameterdes.substring(startindex);
1.100 - parameterdes = null;
1.101 - }else if(endindex+1 < parameterdes.length()){
1.102 - //rest parameters
1.103 - param = parameterdes.substring(startindex, endindex+1);
1.104 - parameterdes = parameterdes.substring(endindex+1);
1.105 -
1.106 - }
1.107 - parameters.add(getObjectType(param));
1.108 - }
1.109 - }else if(parameterdes.startsWith("[")){
1.110 - //parameter is an array.
1.111 - String componentType = "";
1.112 - int enddim = -1;
1.113 - int st = 0;
1.114 - while(true){
1.115 - if(st < parameterdes.length()){
1.116 - if(parameterdes.charAt(st) == '['){
1.117 -
1.118 - enddim = st;
1.119 - st++;
1.120 - }
1.121 - else break;
1.122 - }
1.123 - else break;
1.124 - }
1.125 -
1.126 - if(enddim+1 < parameterdes.length()){
1.127 - /* Array dimension.*/
1.128 - param = parameterdes.substring(0,enddim+1);
1.129 -
1.130 - }
1.131 -
1.132 - int stotherparam = param.lastIndexOf("[")+1;
1.133 -
1.134 - if(stotherparam < parameterdes.length()){
1.135 - componentType = parameterdes.substring(stotherparam);
1.136 - }
1.137 -
1.138 - if(componentType.startsWith("L")){
1.139 - //parameter is array of objects.
1.140 - startindex = parameterdes.indexOf("L");
1.141 - endindex = parameterdes.indexOf(";");
1.142 -
1.143 - if(endindex == parameterdes.length()-1){
1.144 - //last parameter
1.145 - param += parameterdes.substring(startindex);
1.146 - parameterdes = null;
1.147 - }else if(endindex+1 < parameterdes.length()){
1.148 - //rest parameters
1.149 - param += parameterdes.substring(startindex, endindex+1);
1.150 - parameterdes = parameterdes.substring(endindex+1);
1.151 - }
1.152 - }else{
1.153 - //parameter is array of base type.
1.154 - if(componentType.length() == 1){
1.155 - //last parameter.
1.156 - param += componentType;
1.157 - parameterdes = null;
1.158 - }
1.159 - else if (componentType.length() > 1) {
1.160 - //rest parameters.
1.161 - param += componentType.substring(0,1);
1.162 - parameterdes = componentType.substring(1);
1.163 - }
1.164 - }
1.165 - parameters.add(getArrayType(param));
1.166 -
1.167 -
1.168 - }else {
1.169 -
1.170 - //parameter is of base type.
1.171 - if(parameterdes.length() == 1){
1.172 - //last parameter
1.173 - param = parameterdes;
1.174 - parameterdes = null;
1.175 - }
1.176 - else if (parameterdes.length() > 1) {
1.177 - //rest parameters.
1.178 - param = parameterdes.substring(0,1);
1.179 - parameterdes = parameterdes.substring(1);
1.180 - }
1.181 - parameters.add(getBaseType(param));
1.182 - }
1.183 - }
1.184 -
1.185 - /* number of arguments of a method.*/
1.186 - argumentlength = parameters.size();
1.187 -
1.188 - /* java type signature.*/
1.189 - String parametersignature = "(";
1.190 - int i;
1.191 -
1.192 - for(i = 0; i < parameters.size(); i++){
1.193 - parametersignature += (String)parameters.elementAt(i);
1.194 - if(i != parameters.size()-1){
1.195 - parametersignature += ", ";
1.196 - }
1.197 - }
1.198 - parametersignature += ")";
1.199 - return parametersignature;
1.200 - }
1.201 -
1.202 - /**
1.203 - * Returns java type signature for a return type.
1.204 - */
1.205 - public String getReturnTypeHelper(String returndes){
1.206 - return getFieldTypeSignature(returndes);
1.207 - }
1.208 -
1.209 - /**
1.210 - * Returns java type signature for a base type.
1.211 - */
1.212 - public String getBaseType(String baseType){
1.213 - if(baseType != null){
1.214 - if(baseType.equals("B")) return "byte";
1.215 - else if(baseType.equals("C")) return "char";
1.216 - else if(baseType.equals("D")) return "double";
1.217 - else if(baseType.equals("F")) return "float";
1.218 - else if(baseType.equals("I")) return "int";
1.219 - else if(baseType.equals("J")) return "long";
1.220 - else if(baseType.equals("S")) return "short";
1.221 - else if(baseType.equals("Z")) return "boolean";
1.222 - else if(baseType.equals("V")) return "void";
1.223 - }
1.224 - return null;
1.225 - }
1.226 -
1.227 - /**
1.228 - * Returns java type signature for a object type.
1.229 - */
1.230 - public String getObjectType(String JVMobjectType) {
1.231 - String objectType = "";
1.232 - int startindex = JVMobjectType.indexOf("L")+1;
1.233 - int endindex = JVMobjectType.indexOf(";");
1.234 - if((startindex != -1) && (endindex != -1)){
1.235 - if((startindex < JVMobjectType.length()) && (endindex < JVMobjectType.length())){
1.236 - objectType = JVMobjectType.substring(startindex, endindex);
1.237 - }
1.238 - objectType = objectType.replace('/','.');
1.239 - return objectType;
1.240 - }
1.241 - return null;
1.242 - }
1.243 -
1.244 - /**
1.245 - * Returns java type signature for array type.
1.246 - */
1.247 - public String getArrayType(String arrayType) {
1.248 - if(arrayType != null){
1.249 - String dimention = "";
1.250 -
1.251 - while(arrayType.indexOf("[") != -1){
1.252 - dimention += "[]";
1.253 -
1.254 - int startindex = arrayType.indexOf("[")+1;
1.255 - if(startindex <= arrayType.length()){
1.256 - arrayType = arrayType.substring(startindex);
1.257 - }
1.258 - }
1.259 -
1.260 - String componentType = "";
1.261 - if(arrayType.startsWith("L")){
1.262 - componentType = getObjectType(arrayType);
1.263 - }else {
1.264 - componentType = getBaseType(arrayType);
1.265 - }
1.266 - return componentType+dimention;
1.267 - }
1.268 - return null;
1.269 - }
1.270 -
1.271 - /**
1.272 - * Returns java type signature for parameters.
1.273 - */
1.274 - public String getParameters(){
1.275 - return parameters;
1.276 - }
1.277 -
1.278 - /**
1.279 - * Returns java type signature for return type.
1.280 - */
1.281 - public String getReturnType(){
1.282 - return returntype;
1.283 - }
1.284 -
1.285 - /**
1.286 - * Returns java type signature for field type.
1.287 - */
1.288 - public String getFieldType(){
1.289 - return fieldtype;
1.290 - }
1.291 -
1.292 - /**
1.293 - * Return number of arguments of a method.
1.294 - */
1.295 - public int getArgumentlength(){
1.296 - return argumentlength;
1.297 - }
1.298 -}