List of usage examples for org.eclipse.jdt.core Signature C_GENERIC_END
char C_GENERIC_END
To view the source code for org.eclipse.jdt.core Signature C_GENERIC_END.
Click Source Link
From source file:at.bestsolution.fxide.jdt.editor.internal.SignatureUtil.java
License:Open Source License
private static int typeEnd(char[] signature, int pos) { int depth = 0; while (pos < signature.length) { switch (signature[pos]) { case Signature.C_GENERIC_START: depth++;//from w w w.j a va2s .c om break; case Signature.C_GENERIC_END: if (depth == 0) return pos; depth--; break; case Signature.C_SEMICOLON: if (depth == 0) return pos + 1; break; } pos++; } return pos + 1; }
From source file:com.codenvy.ide.ext.java.server.internal.core.SourceMapper.java
License:Open Source License
private int findMatchingGenericEnd(char[] sig, int start) { int nesting = 0; int length = sig.length; for (int i = start; i < length; i++) { switch (sig[i]) { case Signature.C_GENERIC_START: nesting++;/*from www .j a va 2 s .c o m*/ break; case Signature.C_GENERIC_END: if (nesting == 0) return i; nesting--; break; } } return -1; }
From source file:com.codenvy.ide.ext.java.server.internal.core.SourceMapper.java
License:Open Source License
private int getUnqualifiedTypeSignature(String qualifiedTypeSig, int start, int length, StringBuffer unqualifiedTypeSig, boolean noDollar) { char firstChar = qualifiedTypeSig.charAt(start); int end = start + 1; boolean sigStart = false; firstPass: for (int i = start; i < length; i++) { char current = qualifiedTypeSig.charAt(i); switch (current) { case Signature.C_ARRAY: case Signature.C_SUPER: case Signature.C_EXTENDS: unqualifiedTypeSig.append(current); start = i + 1;// w ww .j a v a 2s . co m end = start + 1; firstChar = qualifiedTypeSig.charAt(start); break; case Signature.C_RESOLVED: case Signature.C_UNRESOLVED: case Signature.C_TYPE_VARIABLE: if (!sigStart) { start = ++i; sigStart = true; } break; case Signature.C_NAME_END: case Signature.C_GENERIC_START: end = i; break firstPass; case Signature.C_STAR: unqualifiedTypeSig.append(current); start = i + 1; end = start + 1; firstChar = qualifiedTypeSig.charAt(start); break; case Signature.C_GENERIC_END: return i; case Signature.C_DOT: start = ++i; break; case Signature.C_BOOLEAN: case Signature.C_BYTE: case Signature.C_CHAR: case Signature.C_DOUBLE: case Signature.C_FLOAT: case Signature.C_INT: case Signature.C_LONG: case Signature.C_SHORT: if (!sigStart) { unqualifiedTypeSig.append(current); return i + 1; } } } switch (firstChar) { case Signature.C_RESOLVED: case Signature.C_UNRESOLVED: case Signature.C_TYPE_VARIABLE: unqualifiedTypeSig.append(Signature.C_UNRESOLVED); if (noDollar) { int lastDollar = qualifiedTypeSig.lastIndexOf('$', end); if (lastDollar > start) start = lastDollar + 1; } for (int i = start; i < length; i++) { char current = qualifiedTypeSig.charAt(i); switch (current) { case Signature.C_GENERIC_START: unqualifiedTypeSig.append(current); i++; do { i = getUnqualifiedTypeSignature(qualifiedTypeSig, i, length, unqualifiedTypeSig, noDollar); } while (qualifiedTypeSig.charAt(i) != Signature.C_GENERIC_END); unqualifiedTypeSig.append(Signature.C_GENERIC_END); break; case Signature.C_NAME_END: unqualifiedTypeSig.append(current); return i + 1; default: unqualifiedTypeSig.append(current); break; } } return length; default: // primitive type or wildcard unqualifiedTypeSig.append(qualifiedTypeSig.substring(start, end)); return end; } }
From source file:com.codenvy.ide.ext.java.server.internal.core.util.Util.java
License:Open Source License
private static int scanGenericEnd(char[] string, int start) { if (string[start] == Signature.C_GENERIC_END) { return start; }/*from w ww. ja v a2s. c o m*/ int length = string.length; int balance = 1; start++; while (start <= length) { switch (string[start]) { case Signature.C_GENERIC_END: balance--; if (balance == 0) { return start; } break; case Signature.C_GENERIC_START: balance++; break; } start++; } return start; }
From source file:de.gebit.integrity.ui.utils.IntegrityDSLUIUtil.java
License:Open Source License
/** * Determines the fully qualified class name from a type signature and a type where that type signature is declared. * //from w w w .j a va2s . co m * @param aTypeSignature * the type signature * @param aDeclaringType * the type in which the type signature was found * @return the fully qualified class name, packaged up with generics parameter information * @throws JavaModelException */ public static ResolvedTypeName getResolvedTypeName(String aTypeSignature, IType aDeclaringType) throws JavaModelException { int tempArrayCount = Signature.getArrayCount(aTypeSignature); char tempType = aTypeSignature.charAt(tempArrayCount); if (tempType == Signature.C_UNRESOLVED) { String tempName = ""; int tempBracketOpenPosition = aTypeSignature.indexOf(Signature.C_GENERIC_START, tempArrayCount + 1); if (tempBracketOpenPosition > 0) { tempName = aTypeSignature.substring(tempArrayCount + 1, tempBracketOpenPosition); } else { int tempSemicolonPosition = aTypeSignature.indexOf(Signature.C_SEMICOLON, tempArrayCount + 1); if (tempSemicolonPosition == -1) { throw new IllegalArgumentException(); } tempName = aTypeSignature.substring(tempArrayCount + 1, tempSemicolonPosition); } String[][] tempResolvedNames = aDeclaringType.resolveType(tempName); if (tempResolvedNames != null && tempResolvedNames.length > 0) { StringBuffer tempBuffer = new StringBuffer(); if (tempResolvedNames[0][0] != null && tempResolvedNames[0][0].length() > 0) { tempBuffer.append(tempResolvedNames[0][0]); } if (tempResolvedNames[0][1] != null && tempResolvedNames[0][1].length() > 0) { if (tempBuffer.length() > 0) { tempBuffer.append('.'); } tempBuffer.append(tempResolvedNames[0][1]); } String tempRawTypeName = tempBuffer.toString(); // Now on to the generic parameters if (tempBracketOpenPosition > 0) { int tempBracketClosePosition = aTypeSignature.lastIndexOf(Signature.C_GENERIC_END); if (tempBracketClosePosition == -1) { throw new IllegalArgumentException(); } String tempParameterNamesSignature = aTypeSignature.substring(tempBracketOpenPosition + 1, tempBracketClosePosition); // This one must be splitted now List<String> tempParameterNameSignatures = new ArrayList<String>(); int tempGenericStackSize = 0; int tempStart = 0; for (int i = 0; i < tempParameterNamesSignature.length(); i++) { char tempChar = tempParameterNamesSignature.charAt(i); if (tempChar == Signature.C_GENERIC_START) { tempGenericStackSize++; } else if (tempChar == Signature.C_GENERIC_END) { tempGenericStackSize--; } else if (tempChar == Signature.C_SEMICOLON) { if (tempGenericStackSize == 0) { // this is a valid splitting point tempParameterNameSignatures .add(tempParameterNamesSignature.substring(tempStart, i + 1)); tempStart = i + 1; } } } ResolvedTypeName[] tempGenericParameterTypes = new ResolvedTypeName[tempParameterNameSignatures .size()]; for (int i = 0; i < tempParameterNameSignatures.size(); i++) { tempGenericParameterTypes[i] = getResolvedTypeName(tempParameterNameSignatures.get(i), aDeclaringType); } return new ResolvedTypeName(tempRawTypeName, tempGenericParameterTypes); } else { return new ResolvedTypeName(tempRawTypeName); } } return null; } else { return new ResolvedTypeName( Signature.toString(aTypeSignature.substring(tempArrayCount)).replace('/', '.')); } }
From source file:dynamicrefactoring.integration.TypeConversor.java
License:Open Source License
/** * Realiza la conversin entre la convencin utilizada por Eclipse para la * representacin de las signaturas de los tipos y la utilizada por el modelo * MOON./*from w w w . j a va2s .c om*/ * * @param type la cadena de caracteres con el tipo representado segn la * convencin utilizada por Eclipse. * * @return la cadena de caracteres con la representacin del tipo segn la * convencin utilizada en MOON. * * @see org.eclipse.jdt.core.Signature */ public String convertType(String type) { if (primitiveConversionTable.containsKey(type)) return primitiveConversionTable.get(type); if (type.startsWith(Character.valueOf(Signature.C_ARRAY).toString())) return convertType(type.substring(1)) + "[]"; //$NON-NLS-1$ if (type.contains(Character.valueOf(Signature.C_GENERIC_START).toString()) && type.endsWith(Character.valueOf(Signature.C_GENERIC_END).toString() + Signature.C_SEMICOLON)) { // MOON no incluye los tipos paramtricos en el nombre nico. // Solo se incluye el nombre del tipo genrico, la clase. String parametricType = convertType(type.substring(0, type.indexOf(Signature.C_GENERIC_START))); return parametricType; } if (type.startsWith(Character.valueOf(Signature.C_UNRESOLVED).toString())) return convertNonPrimitiveType(type.substring(1)); return null; }
From source file:org.eclipse.recommenders.completion.rcp.utils.ProposalUtils.java
License:Open Source License
/** * Ensures that the separator of inner and outer types is always a dollar sign. * * <p>/*from w w w .j a v a2 s . c om*/ * This is necessary, as JDT uses a dot rather than dollar sign to separate inner and outer type <em>if</em> the * outer type is parameterized. * </p> * * <p> * Examples: * </p> * * <ul> * <li><code>org.example.Outer$Inner<:java.lang.String></code> -> * <code>org.example.Outer$Inner<:java.lang.String></code></li> * <li><code>org.example.Outer<:java.lang.String>.Inner</code> -> * <code>org.example.Outer<:java.lang.String>$Inner</code></li> * <ul> */ private static char[] getBinaryTypeSignatureCopy(char[] parameterizedTypeSignature) { char[] binaryTypeSignature = Arrays.copyOf(parameterizedTypeSignature, parameterizedTypeSignature.length); int nextDot = -1; while ((nextDot = CharOperation.indexOf(Signature.C_DOT, binaryTypeSignature, nextDot + 1)) > 0) { if (binaryTypeSignature[nextDot - 1] == Signature.C_GENERIC_END) { binaryTypeSignature[nextDot] = Signature.C_DOLLAR; } } return binaryTypeSignature; }
From source file:org.jboss.tools.common.java.ParametedType.java
License:Open Source License
public String resolveParameters(String typeSignature) { if (typeSignature == null) { return typeSignature; }//from w w w.j ava 2 s. co m int i = typeSignature.indexOf(Signature.C_GENERIC_START); if (i < 0) { char c = typeSignature.length() == 0 ? '\0' : typeSignature.charAt(0); char e = typeSignature.length() == 0 ? '\0' : typeSignature.charAt(typeSignature.length() - 1); if ((c == Signature.C_TYPE_VARIABLE || c == Signature.C_UNRESOLVED || c == Signature.C_RESOLVED) && e == Signature.C_SEMICOLON) { String param = typeSignature.substring(1, typeSignature.length() - 1); String s = findParameterSignature(param); return s == null ? typeSignature : s; } return typeSignature; } int j = typeSignature.lastIndexOf(Signature.C_GENERIC_END); if (j < i) { return typeSignature; } boolean replaced = false; StringBuffer newParams = new StringBuffer(); String[] ps = Signature.getTypeArguments(typeSignature); for (String param : ps) { String newParam = resolveParameters(param); if (!param.equals(newParam)) replaced = true; newParams.append(newParam); } if (replaced) { typeSignature = typeSignature.substring(0, i) + Signature.C_GENERIC_START + newParams.toString() + Signature.C_GENERIC_END + Signature.C_SEMICOLON; } return typeSignature; }
From source file:org.jboss.tools.common.java.ParametedTypeFactory.java
License:Open Source License
public ParametedType getParametedType(IMember context, IParametedType basetype, String typeSignature) throws JavaModelException { if (typeSignature == null) return null; if (basetype != null) { ParametedType param = ((ParametedType) basetype).findParameter(typeSignature); if (param != null) return param; }// www .ja v a2 s . c om IType contextType = context instanceof IType ? (IType) context : context.getDeclaringType(); String key = context == null || context.isBinary() || OBJECT.equals(typeSignature) ? typeSignature : contextType.getFullyQualifiedName() + "+" + typeSignature; if (cache.containsKey(key)) return cache.get(key); ParametedType result = new ParametedType(); result.setFactory(this); result.setSignature(typeSignature); typeSignature = typeSignature.substring(result.getArrayIndex()); char c = typeSignature.length() == 0 ? '\0' : typeSignature.charAt(0); if (primitives.containsKey(c) && typeSignature.length() == 1) { typeSignature = primitives.get(c); result.setSignature(result.getArrayPrefix() + typeSignature); result.setPrimitive(true); } else if (c == Signature.C_EXTENDS) { typeSignature = typeSignature.substring(1); result.setUpper(true); } else if (c == Signature.C_SUPER) { typeSignature = typeSignature.substring(1); result.setLower(true); } else if (c == Signature.C_STAR && typeSignature.length() == 1) { result.setUpper(true); return result; } int startToken = typeSignature.indexOf(Signature.C_GENERIC_START); if (startToken < 0) { String resovedTypeName = EclipseJavaUtil.resolveTypeAsString(contextType, typeSignature); if (resovedTypeName == null) return null; if (!context.isBinary() || typeSignature.charAt(0) == Signature.C_TYPE_VARIABLE) { StringBuffer ns = new StringBuffer(); ns.append(result.getArrayPrefix()); if (result.isLower()) ns.append(Signature.C_SUPER); if (result.isUpper()) ns.append(Signature.C_EXTENDS); ns.append(Signature.C_RESOLVED).append(resovedTypeName).append(Signature.C_SEMICOLON); result.setSignature(ns.toString()); } IType type = EclipseJavaUtil.findType(context.getJavaProject(), resovedTypeName); if (type != null) { result.setType(type); cache.put(key, result); return result; } if (context instanceof IMethod) { String[] ps = ((IMethod) context).getTypeParameterSignatures(); for (int i = 0; i < ps.length; i++) { ParametedType st = getParametedTypeForParameter(context, ps[i], result); if (st != null) { if (st.getSignature().indexOf(Signature.C_COLON) >= 0) { CommonCorePlugin.getDefault().logWarning("Wrong signature=" + st.getSignature()); } return st; } } } String[] ps = contextType.getTypeParameterSignatures(); for (int i = 0; i < ps.length; i++) { ParametedType st = getParametedTypeForParameter(contextType, ps[i], result); if (st != null) return st; } } else { int endToken = typeSignature.lastIndexOf(Signature.C_GENERIC_END); if (endToken < startToken) return null; String typeName = typeSignature.substring(0, startToken) + typeSignature.substring(endToken + 1); String resovedTypeName = EclipseJavaUtil.resolveTypeAsString(contextType, typeName); if (resovedTypeName == null) return null; IType type = EclipseJavaUtil.findType(context.getJavaProject(), resovedTypeName); if (type != null) { result.setType(type); cache.put(key, result); StringBuffer newParams = new StringBuffer(); String[] paramSignatures = null; try { paramSignatures = Signature.getTypeArguments(typeSignature); } catch (IllegalArgumentException e) { CommonCorePlugin.getDefault().logError(e); } if (paramSignatures != null) for (String paramSignature : paramSignatures) { ParametedType param = getParametedType(context, basetype, paramSignature); if (param == null) { param = new ParametedType(); param.setSignature(paramSignature); } result.addParameter(param); newParams.append(param.getSignature()); } if (!context.isBinary()) { StringBuffer ns = new StringBuffer(); ns.append(result.getArrayPrefix()); if (result.isLower()) ns.append(Signature.C_SUPER); if (result.isUpper()) ns.append(Signature.C_EXTENDS); ns.append(Signature.C_RESOLVED).append(resovedTypeName).append(Signature.C_GENERIC_START) .append(newParams).append(Signature.C_GENERIC_END).append(Signature.C_SEMICOLON); result.setSignature(ns.toString()); } return result; } } return null; }
From source file:org.springframework.tooling.jdt.ls.commons.java.JavaData.java
License:Open Source License
private JavaTypeData createFromSignature(IType type, String signature) { JavaTypeData data = new JavaTypeData(); data.setName(signature);/* w w w . ja v a2 s.c o m*/ char[] typeSignature = signature.toCharArray(); String[] typeArguments = Signature.getTypeArguments(signature); if (typeArguments != null && typeArguments.length > 0) { JavaTypeData[] javaTypeArguments = new JavaTypeData[typeArguments.length]; for (int i = 0; i < typeArguments.length; i++) { javaTypeArguments[i] = createFromSignature(type, typeArguments[i]); // In case binding key is unresolved replace each argument with resolved one. data.setName(data.getName().replace(typeArguments[i], javaTypeArguments[i].getName())); } data.setKind(JavaTypeKind.PARAMETERIZED); LinkedHashMap<String, Object> extras = new LinkedHashMap<>(); String typeErasure = Signature.getTypeErasure(signature); JavaTypeData owner = createFromSignature(type, typeErasure); extras.put("owner", owner); extras.put("arguments", javaTypeArguments); data.setExtras(extras); // In case binding key is unresolved replace owner. Trim trailing ; from type erasure string and from the replacement data.setName(data.getName().replace(typeErasure.substring(0, typeErasure.length() - 1), owner.getName().substring(0, owner.getName().length() - 1))); } else { // need a minimum 1 char if (typeSignature.length < 1) { throw new IllegalArgumentException(); } char c = typeSignature[0]; if (c == Signature.C_GENERIC_START) { int count = 1; for (int i = 1, length = typeSignature.length; i < length; i++) { switch (typeSignature[i]) { case Signature.C_GENERIC_START: count++; break; case Signature.C_GENERIC_END: count--; break; } if (count == 0) { if (i + 1 < length) c = typeSignature[i + 1]; break; } } } switch (c) { case Signature.C_ARRAY: data.setKind(JavaTypeKind.ARRAY); LinkedHashMap<String, Object> extras = new LinkedHashMap<>(); extras.put("component", createFromSignature(type, Signature.getElementType(signature))); extras.put("dimensions", Signature.getArrayCount(typeSignature)); data.setExtras(extras); break; case Signature.C_RESOLVED: data.setKind(JavaTypeKind.CLASS); break; case Signature.C_TYPE_VARIABLE: data.setKind(JavaTypeKind.TYPE_VARIABLE); break; case Signature.C_BOOLEAN: data.setKind(JavaTypeKind.BOOLEAN); break; case Signature.C_BYTE: data.setKind(JavaTypeKind.BYTE); break; case Signature.C_CHAR: data.setKind(JavaTypeKind.CHAR); break; case Signature.C_DOUBLE: data.setKind(JavaTypeKind.DOUBLE); break; case Signature.C_FLOAT: data.setKind(JavaTypeKind.FLOAT); break; case Signature.C_INT: data.setKind(JavaTypeKind.INT); break; case Signature.C_LONG: data.setKind(JavaTypeKind.LONG); break; case Signature.C_SHORT: data.setKind(JavaTypeKind.SHORT); break; case Signature.C_VOID: data.setKind(JavaTypeKind.VOID); break; case Signature.C_STAR: case Signature.C_SUPER: case Signature.C_EXTENDS: data.setKind(JavaTypeKind.WILDCARD); break; case Signature.C_UNRESOLVED: if (type != null) { // Attempt to resolve type. For some reason JDT has them unresolved for type members try { String signatureSimpleName = Signature.getSignatureSimpleName(signature); String resolvedType = resolveFQName(type, signatureSimpleName); if (resolvedType != null) { data.setKind(JavaTypeKind.CLASS); data.setName("L" + resolvedType.replace('.', '/') + ";"); break; } } catch (JavaModelException e) { data.setKind(JavaTypeKind.UNRESOLVED); } } case Signature.C_CAPTURE: case Signature.C_INTERSECTION: case Signature.C_UNION: default: data.setKind(JavaTypeKind.UNRESOLVED); break; } } return data; }