// Função auxiliar para copiar o tipo da variável // considerando que um tipo nao pode pertencer a outra AST private Type getType(ITypeBinding typeBinding, AST newAST) { if (typeBinding.isPrimitive()) { return newAST.newPrimitiveType(PrimitiveType.toCode(typeBinding.getName())); } else if (typeBinding.isArray()) { return newAST.newArrayType( this.getType(typeBinding.getElementType(), newAST), typeBinding.getDimensions()); } else if (typeBinding.isParameterizedType()) { ParameterizedType pt = newAST.newParameterizedType(this.getType(typeBinding.getTypeDeclaration(), newAST)); for (ITypeBinding itb : typeBinding.getTypeArguments()) { pt.typeArguments().add(this.getType(itb, newAST)); } return pt; } else if (typeBinding.isWildcardType()) { WildcardType wt = newAST.newWildcardType(); wt.setBound( typeBinding.getBound() == null ? null : this.getType(typeBinding.getBound(), newAST), typeBinding.isUpperbound()); return wt; } else { try { return newAST.newSimpleType(newAST.newName(typeBinding.getQualifiedName())); } catch (Exception e) { return newAST.newSimpleType(newAST.newName(typeBinding.getName())); } } }
public TypeName(ITypeBinding binding, boolean varargs) { this.varargs = varargs; ITypeBinding inner = binding; if (varargs) { dimensions = 1; } else { int dims = 0; while (inner.isArray()) { inner = inner.getComponentType(); dims += 1; } dimensions = dims; } if (inner.isParameterizedType()) { inner = inner.getErasure(); } ITypeBinding parent = inner; int nesting = 0; while (parent.isNested()) { nesting++; parent = parent.getDeclaringClass(); } nestingLevel = nesting; primitive = inner.isPrimitive(); baseQualifiedName = adaptQualifiedName(inner.getQualifiedName()); baseBinaryName = inner.getBinaryName(); shortName = buildShortName(); qualifiedName = buildQualifiedName(); binaryName = buildBinaryName(); }
/** @since 2.4 */ protected SegmentSequence.Builder getQualifiedName( ITypeBinding binding, SegmentSequence.Builder builder) { if (binding.isParameterizedType()) { getQualifiedName(binding.getErasure(), builder); } else if (binding.isArray()) { getQualifiedName(binding.getComponentType(), builder).append("[]"); } else if (binding.isTopLevel() || binding.isTypeVariable() || binding.isPrimitive()) { builder.append(binding.getQualifiedName()); } else { getQualifiedName(binding.getDeclaringClass(), builder).append('$').append(binding.getName()); } return builder; }
/** @since 2.4 */ public StringBuilder getQualifiedName(ITypeBinding binding, StringBuilder stringBuilder) { if (binding.isParameterizedType()) { getQualifiedName(binding.getErasure(), stringBuilder); } else if (binding.isArray()) { getQualifiedName(binding.getComponentType(), stringBuilder).append("[]"); } else if (binding.isTopLevel() || binding.isTypeVariable() || binding.isPrimitive()) { stringBuilder.append(binding.getQualifiedName()); } else { getQualifiedName(binding.getDeclaringClass(), stringBuilder) .append('$') .append(binding.getName()); } return stringBuilder; }
public String getQualifiedName(ITypeBinding binding) { if (binding.isParameterizedType()) { return getQualifiedName(binding.getErasure()); } if (binding.isArray()) { return getQualifiedName(binding.getComponentType(), new StringBuilder()) .append("[]") .toString(); } if (binding.isTopLevel() || binding.isTypeVariable() || binding.isPrimitive()) return binding.getQualifiedName(); return getQualifiedName(binding.getDeclaringClass(), new StringBuilder()) .append('$') .append(binding.getName()) .toString(); }
/** * Create an instance based on a JDT type. * * <p>The location, context and warnings parameters are used for raising warnings when the type * bindings cannot be resolved. */ public TypeName( Type t, boolean varargs, String location, String context, Set<DocumentationWarning> warnings) { this.varargs = varargs; // Try to resolve the binding. ITypeBinding binding = t.resolveBinding(); // If binding was resolved, then use it to extract the names. if (binding != null) { ITypeBinding inner = binding; if (varargs) { dimensions = 1; } else { int dims = 0; while (inner.isArray()) { inner = inner.getComponentType(); dims += 1; } dimensions = dims; } if (inner.isParameterizedType()) { inner = inner.getErasure(); } ITypeBinding parent = inner; int nesting = 0; while (parent.isNested()) { nesting++; parent = parent.getDeclaringClass(); } nestingLevel = nesting; primitive = inner.isPrimitive(); baseQualifiedName = adaptQualifiedName(inner.getQualifiedName()); baseBinaryName = inner.getBinaryName(); } // If the binding was not resolved, then use the type name anyway. // This may not be accurate, but is better than nothing. // Also raise a warning in this case. else { String rawName = t.toString(); int idx = rawName.indexOf("["); if (idx >= 0) { baseQualifiedName = rawName.substring(0, idx); String dimPart = rawName.substring(idx); dimensions = dimPart.length() / 2; } else { baseQualifiedName = rawName; dimensions = 0; } nestingLevel = 0; baseBinaryName = baseQualifiedName; primitive = t.isPrimitiveType(); DocumentationWarning dw = new DocumentationWarning( WarningType.UnresolvedBinding, location, "Cannot resolve binding for " + context + " type: '" + baseQualifiedName + "'."); warnings.add(dw); } shortName = buildShortName(); qualifiedName = buildQualifiedName(); binaryName = buildBinaryName(); }