Package org.eclipse.jdt.internal.compiler.ast

Examples of org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference


    sourceEnd = method.sourceEnd;
  } else {
    TypeReference returnType = ((MethodDeclaration) method).returnType;
    sourceStart = returnType.sourceStart;
    if (returnType instanceof ParameterizedSingleTypeReference) {
      ParameterizedSingleTypeReference typeReference = (ParameterizedSingleTypeReference) returnType;
      TypeReference[] typeArguments = typeReference.typeArguments;
      if (typeArguments[typeArguments.length - 1].sourceEnd > typeReference.sourceEnd) {
        sourceEnd = retrieveClosingAngleBracketPosition(typeReference.sourceEnd);
      } else {
        sourceEnd = returnType.sourceEnd;
View Full Code Here


        reference instanceof CompletionOnParameterizedQualifiedTypeReference) {
      char[][] typeName = reference.getTypeName();
      if (typeName[typeName.length - 1].length == 0) return true;
    }
    if (reference instanceof ParameterizedSingleTypeReference) {
      ParameterizedSingleTypeReference parameterizedReference = (ParameterizedSingleTypeReference) reference;
      TypeReference[] typeArguments = parameterizedReference.typeArguments;
      if (typeArguments != null) {
        for (int i = 0; i < typeArguments.length; i++) {
          if (hasEmptyName(typeArguments[i], assistNode)) return true;
        }
View Full Code Here

      int fragmentLength = fragments.size();
      if (fragmentLength == 2) {
        Object firstFragment = fragments.get(0);
        if (firstFragment instanceof char[]) {
          // parameterized single type
          return new ParameterizedSingleTypeReference((char[]) firstFragment, (TypeReference[]) fragments.get(1), dim, ((long) start << 32) + end);
        }
      }
      // parameterized qualified type
      identCount = 0;
      for (int i = 0; i < fragmentLength; i ++) {
View Full Code Here

      int fragmentLength = fragments.size();
      if (fragmentLength == 2) {
        char[][] firstFragment = (char[][]) fragments.get(0);
        if (firstFragment.length == 1) {
          // parameterized single type
          return new ParameterizedSingleTypeReference(firstFragment[0], (TypeReference[]) fragments.get(1), dim, ((long) start << 32) + end);
        }
      }
      // parameterized qualified type
      identCount = 0;
      for (int i = 0; i < fragmentLength; i ++) {
View Full Code Here

        final PrimitiveType primitiveType = new PrimitiveType(this.ast);
        primitiveType.setPrimitiveTypeCode(getPrimitiveTypeCode(name));
        primitiveType.setSourceRange(sourceStart, end - sourceStart + 1);
        type = primitiveType;
      } else if (typeReference instanceof ParameterizedSingleTypeReference) {
        ParameterizedSingleTypeReference parameterizedSingleTypeReference = (ParameterizedSingleTypeReference) typeReference;
        final SimpleName simpleName = new SimpleName(this.ast);
        simpleName.internalSetIdentifier(new String(name));
        int end = retrieveEndOfElementTypeNamePosition(sourceStart, sourceStart + length);
        if (end == -1) {
          end = sourceStart + length - 1;
        }
        simpleName.setSourceRange(sourceStart, end - sourceStart + 1);
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
            SimpleType simpleType = new SimpleType(this.ast);
            simpleType.setName(simpleName);
            simpleType.setFlags(simpleType.getFlags() | ASTNode.MALFORMED);
            simpleType.setSourceRange(sourceStart, end - sourceStart + 1);
            type = simpleType;
            if (this.resolveBindings) {
              this.recordNodes(simpleName, typeReference);
            }
            break;
          default :
            simpleType = new SimpleType(this.ast);
            simpleType.setName(simpleName);
            simpleType.setSourceRange(simpleName.getStartPosition(), simpleName.getLength());
            final ParameterizedType parameterizedType = new ParameterizedType(this.ast);
            parameterizedType.setType(simpleType);
            type = parameterizedType;
            TypeReference[] typeArguments = parameterizedSingleTypeReference.typeArguments;
            if (typeArguments != null) {
              Type type2 = null;
              for (int i = 0, max = typeArguments.length; i < max; i++) {
                type2 = convertType(typeArguments[i]);
                ((ParameterizedType) type).typeArguments().add(type2);
                end = type2.getStartPosition() + type2.getLength() - 1;
              }
              end = retrieveClosingAngleBracketPosition(end + 1);
              type.setSourceRange(sourceStart, end - sourceStart + 1);
            } else {
              type.setSourceRange(sourceStart, end - sourceStart + 1);
            }
            if (this.resolveBindings) {
              this.recordNodes(simpleName, typeReference);
              this.recordNodes(simpleType, typeReference);
            }
        }
      } else {
        final SimpleName simpleName = new SimpleName(this.ast);
        simpleName.internalSetIdentifier(new String(name));
        // we need to search for the starting position of the first brace in order to set the proper length
        // PR http://dev.eclipse.org/bugs/show_bug.cgi?id=10759
        int end = retrieveEndOfElementTypeNamePosition(sourceStart, sourceStart + length);
        if (end == -1) {
          end = sourceStart + length - 1;
        }
        simpleName.setSourceRange(sourceStart, end - sourceStart + 1);
        final SimpleType simpleType = new SimpleType(this.ast);
        simpleType.setName(simpleName);
        type = simpleType;
        type.setSourceRange(sourceStart, end - sourceStart + 1);
        type = simpleType;
        if (this.resolveBindings) {
          this.recordNodes(simpleName, typeReference);
        }
      }
      if (dimensions != 0) {
        type = this.ast.newArrayType(type, dimensions);
        type.setSourceRange(sourceStart, length);
        ArrayType subarrayType = (ArrayType) type;
        int index = dimensions - 1;
        while (index > 0) {
          subarrayType = (ArrayType) subarrayType.getComponentType();
          int end = retrieveProperRightBracketPosition(index, sourceStart);
          subarrayType.setSourceRange(sourceStart, end - sourceStart + 1);
          index--;
        }
        if (this.resolveBindings) {
          // store keys for inner types
          completeRecord((ArrayType) type, typeReference);
        }
      }
    } else {
      if (typeReference instanceof ParameterizedQualifiedTypeReference) {
        ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference = (ParameterizedQualifiedTypeReference) typeReference;
        char[][] tokens = parameterizedQualifiedTypeReference.tokens;
        TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments;
        long[] positions = parameterizedQualifiedTypeReference.sourcePositions;
        sourceStart = (int)(positions[0]>>>32);
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL : {
            char[][] name = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).getTypeName();
            int nameLength = name.length;
            sourceStart = (int)(positions[0]>>>32);
            length = (int)(positions[nameLength - 1] & 0xFFFFFFFF) - sourceStart + 1;
            Name qualifiedName = this.setQualifiedNameNameAndSourceRanges(name, positions, typeReference);
            final SimpleType simpleType = new SimpleType(this.ast);
            simpleType.setName(qualifiedName);
            simpleType.setSourceRange(sourceStart, length);
            type = simpleType;
          }
          break;
          default :
            if (typeArguments != null) {
              int numberOfEnclosingType = 0;
              int startingIndex = 0;
              int endingIndex = 0;
              for (int i = 0, max = typeArguments.length; i < max; i++) {
                if (typeArguments[i] != null) {
                  numberOfEnclosingType++;
                } else if (numberOfEnclosingType == 0) {
                  endingIndex++;
                }
              }
              Name name = null;
              if (endingIndex - startingIndex == 0) {
                final SimpleName simpleName = new SimpleName(this.ast);
                simpleName.internalSetIdentifier(new String(tokens[startingIndex]));
                recordPendingNameScopeResolution(simpleName);
                int start = (int)(positions[startingIndex]>>>32);
                int end = (int) positions[startingIndex];
                simpleName.setSourceRange(start, end - start + 1);
                simpleName.index = 1;
                name = simpleName;
                if (this.resolveBindings) {
                  recordNodes(simpleName, typeReference);
                }
              } else {
                name = this.setQualifiedNameNameAndSourceRanges(tokens, positions, endingIndex, typeReference);
              }
              SimpleType simpleType = new SimpleType(this.ast);
              simpleType.setName(name);
              int start = (int)(positions[startingIndex]>>>32);
              int end = (int) positions[endingIndex];
              simpleType.setSourceRange(start, end - start + 1);
              ParameterizedType parameterizedType = new ParameterizedType(this.ast);
              parameterizedType.setType(simpleType);
              if (this.resolveBindings) {
                recordNodes(simpleType, typeReference);
                recordNodes(parameterizedType, typeReference);
              }
              start = simpleType.getStartPosition();
              end = start + simpleType.getLength() - 1;
              for (int i = 0, max = typeArguments[endingIndex].length; i < max; i++) {
                final Type type2 = convertType(typeArguments[endingIndex][i]);
                parameterizedType.typeArguments().add(type2);
                end = type2.getStartPosition() + type2.getLength() - 1;
              }
              int indexOfEnclosingType = 1;
              parameterizedType.index = indexOfEnclosingType;
              end = retrieveClosingAngleBracketPosition(end + 1);
              length = end + 1;
              parameterizedType.setSourceRange(start, end - start + 1);
              startingIndex = endingIndex + 1;
              Type currentType = parameterizedType;
              while(startingIndex < typeArguments.length) {
                SimpleName simpleName = new SimpleName(this.ast);
                simpleName.internalSetIdentifier(new String(tokens[startingIndex]));
                simpleName.index = startingIndex + 1;
                start = (int)(positions[startingIndex]>>>32);
                end = (int) positions[startingIndex];
                simpleName.setSourceRange(start, end - start + 1);
                recordPendingNameScopeResolution(simpleName);
                QualifiedType qualifiedType = new QualifiedType(this.ast);
                qualifiedType.setQualifier(currentType);
                qualifiedType.setName(simpleName);
                if (this.resolveBindings) {
                  recordNodes(simpleName, typeReference);
                  recordNodes(qualifiedType, typeReference);
                }
                start = currentType.getStartPosition();
                end = simpleName.getStartPosition() + simpleName.getLength() - 1;
                qualifiedType.setSourceRange(start, end - start + 1);
                indexOfEnclosingType++;
                if (typeArguments[startingIndex] != null) {
                  qualifiedType.index = indexOfEnclosingType;
                  ParameterizedType parameterizedType2 = new ParameterizedType(this.ast);
                  parameterizedType2.setType(qualifiedType);
                  parameterizedType2.index = indexOfEnclosingType;
                  if (this.resolveBindings) {
                    recordNodes(parameterizedType2, typeReference);
                  }
                  for (int i = 0, max = typeArguments[startingIndex].length; i < max; i++) {
                    final Type type2 = convertType(typeArguments[startingIndex][i]);
                    parameterizedType2.typeArguments().add(type2);
                    end = type2.getStartPosition() + type2.getLength() - 1;
                  }
                  end = retrieveClosingAngleBracketPosition(end + 1);
                  length = end + 1;
                  parameterizedType2.setSourceRange(start, end - start + 1);
                  currentType = parameterizedType2;
                } else {
                  currentType = qualifiedType;
                  qualifiedType.index = indexOfEnclosingType;
                }
                startingIndex++;
              }
              if (this.resolveBindings) {
                this.recordNodes(currentType, typeReference);
              }
              type = currentType;
              length -= sourceStart;
            }
        }
      } else if (typeReference instanceof org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) {
        char[][] name = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).getTypeName();
        int nameLength = name.length;
        long[] positions = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).sourcePositions;
        sourceStart = (int)(positions[0]>>>32);
        length = (int)(positions[nameLength - 1] & 0xFFFFFFFF) - sourceStart + 1;
        final Name qualifiedName = this.setQualifiedNameNameAndSourceRanges(name, positions, typeReference);
        final SimpleType simpleType = new SimpleType(this.ast);
        simpleType.setName(qualifiedName);
        type = simpleType;
        type.setSourceRange(sourceStart, length);
      } else {
        TypeReference[] typeReferences = ((org.eclipse.jdt.internal.compiler.ast.UnionTypeReference) typeReference).typeReferences;
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
          case AST.JLS3 :
            // recovery
            type = this.convertType(typeReferences[0]);
            int start = typeReference.sourceStart;
            int endPosition = typeReference.sourceEnd;
            length = endPosition - start + 1;
            type.setSourceRange(start, length);
            type.setFlags(type.getFlags() | ASTNode.MALFORMED);
            break;
          default:
            // union type reference
            final UnionType unionType = new UnionType(this.ast);
            for (int i = 0, max = typeReferences.length; i < max; i++) {
              unionType.types().add(this.convertType(typeReferences[i]));
            }
            type = unionType;
            List types = unionType.types();
            int size = types.size();
            start = ((Type) types.get(0)).getStartPosition();
            Type lastType = (Type) types.get(size - 1);
            endPosition = lastType.getStartPosition() + lastType.getLength();
            length = endPosition - start; /* + 1 - 1 == 0 */
            type.setSourceRange(start, length);
        }
      }

      length = typeReference.sourceEnd - sourceStart + 1;
      if (dimensions != 0) {
        type = this.ast.newArrayType(type, dimensions);
        if (this.resolveBindings) {
          completeRecord((ArrayType) type, typeReference);
        }
        int end = retrieveEndOfDimensionsPosition(sourceStart+length, this.compilationUnitSourceLength);
        if (end != -1) {
          type.setSourceRange(sourceStart, end - sourceStart + 1);
        } else {
          type.setSourceRange(sourceStart, length);
        }
        ArrayType subarrayType = (ArrayType) type;
        int index = dimensions - 1;
        while (index > 0) {
          subarrayType = (ArrayType) subarrayType.getComponentType();
          end = retrieveProperRightBracketPosition(index, sourceStart);
          subarrayType.setSourceRange(sourceStart, end - sourceStart + 1);
          index--;
        }
      }
    }
    if (this.resolveBindings) {
      this.recordNodes(type, typeReference);
    }
    boolean sawDiamond = false;
    if (typeReference instanceof ParameterizedSingleTypeReference) {
      ParameterizedSingleTypeReference pstr = (ParameterizedSingleTypeReference) typeReference;
      if (pstr.typeArguments == TypeReference.NO_TYPE_ARGUMENTS) {
        sawDiamond = true;
      }
    } else if (typeReference instanceof ParameterizedQualifiedTypeReference) {
      ParameterizedQualifiedTypeReference pqtr = (ParameterizedQualifiedTypeReference) typeReference;
View Full Code Here

        type = primitiveType;
        if (typeReference.annotations != null && (annotations = typeReference.annotations[0]) != null) {
          annotateType(primitiveType, annotations);
        }
      } else if (typeReference instanceof ParameterizedSingleTypeReference) {
        ParameterizedSingleTypeReference parameterizedSingleTypeReference = (ParameterizedSingleTypeReference) typeReference;
        final SimpleName simpleName = new SimpleName(this.ast);
        simpleName.internalSetIdentifier(new String(name));
        int[] positions = retrieveEndOfElementTypeNamePosition(sourceStart < annotationsEnd ? annotationsEnd : sourceStart, sourceStart + length);
        int end = positions[1];
        if (end == -1) {
          end = sourceStart + length - 1;
        }
        if (positions[0] != -1) {
          simpleName.setSourceRange(positions[0], end - positions[0] + 1);
        } else {
          simpleName.setSourceRange(sourceStart, end - sourceStart + 1);         
        }

        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
            SimpleType simpleType = new SimpleType(this.ast);
            simpleType.setName(simpleName);
            simpleType.setFlags(simpleType.getFlags() | ASTNode.MALFORMED);
            simpleType.setSourceRange(sourceStart, end - sourceStart + 1);
            type = simpleType;
            if (this.resolveBindings) {
              this.recordNodes(simpleName, typeReference);
            }
            break;
          default :
            simpleType = new SimpleType(this.ast);
            simpleType.setName(simpleName);
            simpleType.setSourceRange(simpleName.getStartPosition(), simpleName.getLength());
            if (typeReference.annotations != null && (annotations = typeReference.annotations[0]) != null) {
              annotateType(simpleType, annotations);
            }
            int newSourceStart = simpleType.getStartPosition();
            if (newSourceStart > 0 && newSourceStart < sourceStart)
              sourceStart = newSourceStart;
            final ParameterizedType parameterizedType = new ParameterizedType(this.ast);
            parameterizedType.setType(simpleType);
            type = parameterizedType;
            TypeReference[] typeArguments = parameterizedSingleTypeReference.typeArguments;
            if (typeArguments != null) {
              Type type2 = null;
              for (int i = 0, max = typeArguments.length; i < max; i++) {
                type2 = convertType(typeArguments[i]);
                ((ParameterizedType) type).typeArguments().add(type2);
                end = type2.getStartPosition() + type2.getLength() - 1;
              }
              end = retrieveClosingAngleBracketPosition(end + 1);
              type.setSourceRange(sourceStart, end - sourceStart + 1);
            } else {
              type.setSourceRange(sourceStart, end - sourceStart + 1);
            }
            if (this.resolveBindings) {
              this.recordNodes(simpleName, typeReference);
              this.recordNodes(simpleType, typeReference);
            }
        }
      } else {
        final SimpleName simpleName = new SimpleName(this.ast);
        simpleName.internalSetIdentifier(new String(name));
        // we need to search for the starting position of the first brace in order to set the proper length
        // PR http://dev.eclipse.org/bugs/show_bug.cgi?id=10759
        int[] positions = retrieveEndOfElementTypeNamePosition(sourceStart < annotationsEnd ? annotationsEnd : sourceStart, sourceStart + length);
        int end = positions[1];
        if (end == -1) {
          end = sourceStart + length - 1;
        }
        if (positions[0] != -1) {
          simpleName.setSourceRange(positions[0], end - positions[0] + 1);
        } else {
          simpleName.setSourceRange(sourceStart, end - sourceStart + 1);
        }
        final SimpleType simpleType = new SimpleType(this.ast);
        simpleType.setName(simpleName);
        type = simpleType;
        type.setSourceRange(sourceStart, end - sourceStart + 1);
        type = simpleType;
        if (this.resolveBindings) {
          this.recordNodes(simpleName, typeReference);
        }
        if (typeReference.annotations != null && (annotations = typeReference.annotations[0]) != null) {
          annotateType(simpleType, annotations);
        }
      }
      if (dimensions != 0) {
        type = convertToArray(type, sourceStart, length, dimensions, typeReference.getAnnotationsOnDimensions(true));
        if (this.resolveBindings) {
          // store keys for inner types
          completeRecord((ArrayType) type, typeReference);
        }
      }
    } else {
      if (typeReference instanceof ParameterizedQualifiedTypeReference) {
        ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference = (ParameterizedQualifiedTypeReference) typeReference;
        char[][] tokens = parameterizedQualifiedTypeReference.tokens;
        TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments;
        org.eclipse.jdt.internal.compiler.ast.Annotation[][] typeAnnotations = parameterizedQualifiedTypeReference.annotations;
        TypeReference[] arguments = null;
        int lenth = tokens.length;
        int firstTypeIndex = lenth - 1;
        long[] positions = parameterizedQualifiedTypeReference.sourcePositions;
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL : {
            char[][] name = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).getTypeName();
            int nameLength = name.length;
            sourceStart = (int)(positions[0]>>>32);
            length = (int)(positions[nameLength - 1] & 0xFFFFFFFF) - sourceStart + 1;
            Name qualifiedName = this.setQualifiedNameNameAndSourceRanges(name, positions, typeReference);
            final SimpleType simpleType = new SimpleType(this.ast);
            simpleType.setName(qualifiedName);
            simpleType.setSourceRange(sourceStart, length);
            simpleType.setFlags(simpleType.getFlags() | ASTNode.MALFORMED);
            type = simpleType;
          }
          break;
          default :
            boolean isTypeArgumentBased = false;
            for (int i = 0; i < lenth; ++i) {
              if (typeArguments != null && typeArguments[i] != null) {
                firstTypeIndex = i;
                isTypeArgumentBased = true;
                break;
              }
              if (typeAnnotations != null && typeAnnotations[i] != null) {
                firstTypeIndex = i;
                isTypeArgumentBased = false;
                break;
              }
            }           
            int start = (int) (positions[0] >>> 32);
            int end = (int) positions[firstTypeIndex];
           
            Type currentType = createBaseType(typeReference, positions, typeAnnotations, tokens, lenth, firstTypeIndex, isTypeArgumentBased);
            int indexOfEnclosingType = 1;
            if (typeArguments != null && (arguments = typeArguments[firstTypeIndex]) != null) {
              int arglen = arguments.length;
              ParameterizedType parameterizedType = new ParameterizedType(this.ast);
              parameterizedType.index = indexOfEnclosingType;
              parameterizedType.setType(currentType);
              if (this.resolveBindings) {
                recordNodes(parameterizedType, typeReference);
              }
              Type type2 = null;
              for (int i = 0; i < arglen; ++i ) {
                type2 = convertType(arguments[i]);
                parameterizedType.typeArguments().add(type2);
              }
              end = type2 != null ? type2.getStartPosition() + type2.getLength() - 1 : end;
              end = retrieveClosingAngleBracketPosition(end + 1);
              int baseStart = currentType.getStartPosition();
              start = start <= baseStart ? start : baseStart;
              parameterizedType.setSourceRange(start, end - start + 1);
              currentType = parameterizedType;
            }
           
            for (int i = firstTypeIndex + 1; i < lenth; ++i) {
              SimpleName simpleName = new SimpleName(this.ast);
              simpleName.setIdentifier(new String(tokens[i]));
              simpleName.index = i + 1;
              start = (int) (positions[i] >>> 32);
              end = (int) positions[i];
              simpleName.setSourceRange(start, end - start + 1);
              recordPendingNameScopeResolution(simpleName);
              QualifiedType qualifiedType = new QualifiedType(this.ast);
              qualifiedType.setQualifier(currentType);
              qualifiedType.setName(simpleName);
              start = currentType.getStartPosition();
              end = simpleName.getStartPosition() + simpleName.getLength() - 1;
              qualifiedType.setSourceRange(start, end - start + 1);
              if (typeAnnotations != null &&  (annotations = typeAnnotations[i]) != null) {
                int nextPosition = annotateType(qualifiedType, annotations);
                if (simpleName.getStartPosition() < nextPosition && nextPosition <= end) {
                  simpleName.setSourceRange(nextPosition, end - nextPosition + 1);
                  trimWhiteSpacesAndComments(simpleName);
                }
              }
              if (this.resolveBindings) {
                recordNodes(simpleName, typeReference);
                recordNodes(qualifiedType, typeReference);
              }
              currentType = qualifiedType;
              indexOfEnclosingType++;
             
              if (typeArguments != null && (arguments = typeArguments[i]) != null) {
                int arglen = arguments.length;
                qualifiedType.index = indexOfEnclosingType;
                ParameterizedType parameterizedType = new ParameterizedType(this.ast);
                parameterizedType.index = indexOfEnclosingType;
                parameterizedType.setType(currentType);
                if (this.resolveBindings) {
                  recordNodes(parameterizedType, typeReference);
                }
                Type type2 = null;
                for (int j = 0; j < arglen; ++j ) {
                  type2 = convertType(arguments[j]);
                  parameterizedType.typeArguments().add(type2);
                }
                end = type2 != null ? type2.getStartPosition() + type2.getLength() - 1 : end;
                end = retrieveClosingAngleBracketPosition(end + 1);
                parameterizedType.setSourceRange(start, end - start + 1);
                currentType = parameterizedType;
              } else {
                qualifiedType.index = indexOfEnclosingType;
              }
            }
            type = currentType;
        }
      } else if (typeReference instanceof org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) {     
        QualifiedTypeReference qualifiedTypeReference = (QualifiedTypeReference) typeReference;
        long[] positions = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).sourcePositions;
        org.eclipse.jdt.internal.compiler.ast.Annotation [][] typeAnnotations = typeReference.annotations;
        char [][] tokens = qualifiedTypeReference.tokens;
        int lenth = tokens.length;
        int firstTypeIndex = lenth;
       
        if (typeAnnotations != null) {
          for (int i = 0; i < lenth; ++i) {
            if (typeAnnotations[i] != null) {
              firstTypeIndex = i;
              break;
            }
          }
        } 
        Type currentType = createBaseType(typeReference, positions, typeAnnotations, tokens, lenth, firstTypeIndex, false);
        for (int i = firstTypeIndex + 1; i < lenth; ++i) {
          currentType = createQualifiedType(typeReference, positions,  typeAnnotations, tokens, i, currentType);
        }         
        type = currentType;
      } else if (typeReference instanceof UnionTypeReference){
        TypeReference[] typeReferences = ((org.eclipse.jdt.internal.compiler.ast.UnionTypeReference) typeReference).typeReferences;
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
          case AST.JLS3_INTERNAL :
            // recovery
            type = this.convertType(typeReferences[0]);
            int start = typeReference.sourceStart;
            int endPosition = typeReference.sourceEnd;
            length = endPosition - start + 1;
            type.setSourceRange(start, length);
            type.setFlags(type.getFlags() | ASTNode.MALFORMED);
            break;
          default:
            // union type reference
            final UnionType unionType = new UnionType(this.ast);
            for (int i = 0, max = typeReferences.length; i < max; i++) {
              unionType.types().add(this.convertType(typeReferences[i]));
            }
            type = unionType;
            List types = unionType.types();
            int size = types.size();
            start = ((Type) types.get(0)).getStartPosition();
            Type lastType = (Type) types.get(size - 1);
            endPosition = lastType.getStartPosition() + lastType.getLength();
            length = endPosition - start; /* + 1 - 1 == 0 */
            type.setSourceRange(start, length);
        }
      } else if (typeReference instanceof IntersectionCastTypeReference) {
        TypeReference[] typeReferences = ((IntersectionCastTypeReference) typeReference).typeReferences;
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
          case AST.JLS3_INTERNAL :
          case AST.JLS4_INTERNAL :
            type = this.convertType(typeReferences[0]);
            int start = typeReference.sourceStart;
            int endPosition = typeReference.sourceEnd;
            length = endPosition - start + 1;
            type.setSourceRange(start, length);
            type.setFlags(type.getFlags() | ASTNode.MALFORMED);
            break;
          default:
            // intersection type reference
            final IntersectionType castType = new IntersectionType(this.ast);
            for (int i = 0, max = typeReferences.length; i < max; i++) {
              castType.types().add(this.convertType(typeReferences[i]));
            }
            type = castType;
            List types = castType.types();
            int size = types.size();
            start = ((Type) types.get(0)).getStartPosition();
            Type lastType = (Type) types.get(size - 1);
            endPosition = lastType.getStartPosition() + lastType.getLength();
            length = endPosition - start;
            type.setSourceRange(start, length);
        }
      }

      length = typeReference.sourceEnd - sourceStart + 1;
      if (dimensions != 0) {
        type = convertToArray(type, sourceStart, length, dimensions, typeReference.getAnnotationsOnDimensions(true));
        if (this.resolveBindings) {
          completeRecord((ArrayType) type, typeReference);
        }
      }
    }
    if (this.resolveBindings) {
      this.recordNodes(type, typeReference);
    }
    boolean sawDiamond = false;
    if (typeReference instanceof ParameterizedSingleTypeReference) {
      ParameterizedSingleTypeReference pstr = (ParameterizedSingleTypeReference) typeReference;
      if (pstr.typeArguments == TypeReference.NO_TYPE_ARGUMENTS) {
        sawDiamond = true;
      }
    } else if (typeReference instanceof ParameterizedQualifiedTypeReference) {
      ParameterizedQualifiedTypeReference pqtr = (ParameterizedQualifiedTypeReference) typeReference;
View Full Code Here

      int fragmentLength = fragments.size();
      if (fragmentLength == 2) {
        Object firstFragment = fragments.get(0);
        if (firstFragment instanceof char[]) {
          // parameterized single type
          return new ParameterizedSingleTypeReference((char[]) firstFragment, (TypeReference[]) fragments.get(1), dim, ((long) start << 32) + end);
        }
      }
      // parameterized qualified type
      identCount = 0;
      for (int i = 0; i < fragmentLength; i ++) {
View Full Code Here

      int fragmentLength = fragments.size();
      if (fragmentLength == 2) {
        char[][] firstFragment = (char[][]) fragments.get(0);
        if (firstFragment.length == 1) {
          // parameterized single type
          return new ParameterizedSingleTypeReference(firstFragment[0], (TypeReference[]) fragments.get(1), dim, ((long) start << 32) + end);
        }
      }
      // parameterized qualified type
      identCount = 0;
      for (int i = 0; i < fragmentLength; i ++) {
View Full Code Here

    sourceEnd = method.sourceEnd;
  } else {
    TypeReference returnType = ((MethodDeclaration) method).returnType;
    sourceStart = returnType.sourceStart;
    if (returnType instanceof ParameterizedSingleTypeReference) {
      ParameterizedSingleTypeReference typeReference = (ParameterizedSingleTypeReference) returnType;
      TypeReference[] typeArguments = typeReference.typeArguments;
      if (typeArguments[typeArguments.length - 1].sourceEnd > typeReference.sourceEnd) {
        sourceEnd = retrieveClosingAngleBracketPosition(typeReference.sourceEnd);
      } else {
        sourceEnd = returnType.sourceEnd;
View Full Code Here

        final PrimitiveType primitiveType = new PrimitiveType(this.ast);
        primitiveType.setPrimitiveTypeCode(getPrimitiveTypeCode(name));
        primitiveType.setSourceRange(sourceStart, end - sourceStart + 1);
        type = primitiveType;
      } else if (typeReference instanceof ParameterizedSingleTypeReference) {
        ParameterizedSingleTypeReference parameterizedSingleTypeReference = (ParameterizedSingleTypeReference) typeReference;
        final SimpleName simpleName = new SimpleName(this.ast);
        simpleName.internalSetIdentifier(new String(name));
        int end = retrieveEndOfElementTypeNamePosition(sourceStart, sourceStart + length);
        if (end == -1) {
          end = sourceStart + length - 1;
        }
        simpleName.setSourceRange(sourceStart, end - sourceStart + 1);
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
            SimpleType simpleType = new SimpleType(this.ast);
            simpleType.setName(simpleName);
            simpleType.setFlags(simpleType.getFlags() | ASTNode.MALFORMED);
            simpleType.setSourceRange(sourceStart, end - sourceStart + 1);
            type = simpleType;
            if (this.resolveBindings) {
              this.recordNodes(simpleName, typeReference);
            }
            break;
          default :
            simpleType = new SimpleType(this.ast);
            simpleType.setName(simpleName);
            simpleType.setSourceRange(simpleName.getStartPosition(), simpleName.getLength());
            final ParameterizedType parameterizedType = new ParameterizedType(this.ast);
            parameterizedType.setType(simpleType);
            type = parameterizedType;
            TypeReference[] typeArguments = parameterizedSingleTypeReference.typeArguments;
            if (typeArguments != null) {
              Type type2 = null;
              for (int i = 0, max = typeArguments.length; i < max; i++) {
                type2 = convertType(typeArguments[i]);
                ((ParameterizedType) type).typeArguments().add(type2);
                end = type2.getStartPosition() + type2.getLength() - 1;
              }
              end = retrieveClosingAngleBracketPosition(end + 1);
              type.setSourceRange(sourceStart, end - sourceStart + 1);
            } else {
              type.setSourceRange(sourceStart, end - sourceStart + 1);
            }
            if (this.resolveBindings) {
              this.recordNodes(simpleName, typeReference);
              this.recordNodes(simpleType, typeReference);
            }
        }
      } else {
        final SimpleName simpleName = new SimpleName(this.ast);
        simpleName.internalSetIdentifier(new String(name));
        // we need to search for the starting position of the first brace in order to set the proper length
        // PR http://dev.eclipse.org/bugs/show_bug.cgi?id=10759
        int end = retrieveEndOfElementTypeNamePosition(sourceStart, sourceStart + length);
        if (end == -1) {
          end = sourceStart + length - 1;
        }
        simpleName.setSourceRange(sourceStart, end - sourceStart + 1);
        final SimpleType simpleType = new SimpleType(this.ast);
        simpleType.setName(simpleName);
        type = simpleType;
        type.setSourceRange(sourceStart, end - sourceStart + 1);
        type = simpleType;
        if (this.resolveBindings) {
          this.recordNodes(simpleName, typeReference);
        }
      }
      if (dimensions != 0) {
        type = this.ast.newArrayType(type, dimensions);
        type.setSourceRange(sourceStart, length);
        ArrayType subarrayType = (ArrayType) type;
        int index = dimensions - 1;
        while (index > 0) {
          subarrayType = (ArrayType) subarrayType.getComponentType();
          int end = retrieveProperRightBracketPosition(index, sourceStart);
          subarrayType.setSourceRange(sourceStart, end - sourceStart + 1);
          index--;
        }
        if (this.resolveBindings) {
          // store keys for inner types
          completeRecord((ArrayType) type, typeReference);
        }
      }
    } else {
      if (typeReference instanceof ParameterizedQualifiedTypeReference) {
        ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference = (ParameterizedQualifiedTypeReference) typeReference;
        char[][] tokens = parameterizedQualifiedTypeReference.tokens;
        TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments;
        long[] positions = parameterizedQualifiedTypeReference.sourcePositions;
        sourceStart = (int)(positions[0]>>>32);
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL : {
            char[][] name = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).getTypeName();
            int nameLength = name.length;
            sourceStart = (int)(positions[0]>>>32);
            length = (int)(positions[nameLength - 1] & 0xFFFFFFFF) - sourceStart + 1;
            Name qualifiedName = this.setQualifiedNameNameAndSourceRanges(name, positions, typeReference);
            final SimpleType simpleType = new SimpleType(this.ast);
            simpleType.setName(qualifiedName);
            simpleType.setSourceRange(sourceStart, length);
            type = simpleType;
          }
          break;
          default :
            if (typeArguments != null) {
              int numberOfEnclosingType = 0;
              int startingIndex = 0;
              int endingIndex = 0;
              for (int i = 0, max = typeArguments.length; i < max; i++) {
                if (typeArguments[i] != null) {
                  numberOfEnclosingType++;
                } else if (numberOfEnclosingType == 0) {
                  endingIndex++;
                }
              }
              Name name = null;
              if (endingIndex - startingIndex == 0) {
                final SimpleName simpleName = new SimpleName(this.ast);
                simpleName.internalSetIdentifier(new String(tokens[startingIndex]));
                recordPendingNameScopeResolution(simpleName);
                int start = (int)(positions[startingIndex]>>>32);
                int end = (int) positions[startingIndex];
                simpleName.setSourceRange(start, end - start + 1);
                simpleName.index = 1;
                name = simpleName;
                if (this.resolveBindings) {
                  recordNodes(simpleName, typeReference);
                }
              } else {
                name = this.setQualifiedNameNameAndSourceRanges(tokens, positions, endingIndex, typeReference);
              }
              SimpleType simpleType = new SimpleType(this.ast);
              simpleType.setName(name);
              int start = (int)(positions[startingIndex]>>>32);
              int end = (int) positions[endingIndex];
              simpleType.setSourceRange(start, end - start + 1);
              ParameterizedType parameterizedType = new ParameterizedType(this.ast);
              parameterizedType.setType(simpleType);
              if (this.resolveBindings) {
                recordNodes(simpleType, typeReference);
                recordNodes(parameterizedType, typeReference);
              }
              start = simpleType.getStartPosition();
              end = start + simpleType.getLength() - 1;
              for (int i = 0, max = typeArguments[endingIndex].length; i < max; i++) {
                final Type type2 = convertType(typeArguments[endingIndex][i]);
                parameterizedType.typeArguments().add(type2);
                end = type2.getStartPosition() + type2.getLength() - 1;
              }
              int indexOfEnclosingType = 1;
              parameterizedType.index = indexOfEnclosingType;
              end = retrieveClosingAngleBracketPosition(end + 1);
              length = end + 1;
              parameterizedType.setSourceRange(start, end - start + 1);
              startingIndex = endingIndex + 1;
              Type currentType = parameterizedType;
              while(startingIndex < typeArguments.length) {
                SimpleName simpleName = new SimpleName(this.ast);
                simpleName.internalSetIdentifier(new String(tokens[startingIndex]));
                simpleName.index = startingIndex + 1;
                start = (int)(positions[startingIndex]>>>32);
                end = (int) positions[startingIndex];
                simpleName.setSourceRange(start, end - start + 1);
                recordPendingNameScopeResolution(simpleName);
                QualifiedType qualifiedType = new QualifiedType(this.ast);
                qualifiedType.setQualifier(currentType);
                qualifiedType.setName(simpleName);
                if (this.resolveBindings) {
                  recordNodes(simpleName, typeReference);
                  recordNodes(qualifiedType, typeReference);
                }
                start = currentType.getStartPosition();
                end = simpleName.getStartPosition() + simpleName.getLength() - 1;
                qualifiedType.setSourceRange(start, end - start + 1);
                indexOfEnclosingType++;
                if (typeArguments[startingIndex] != null) {
                  qualifiedType.index = indexOfEnclosingType;
                  ParameterizedType parameterizedType2 = new ParameterizedType(this.ast);
                  parameterizedType2.setType(qualifiedType);
                  parameterizedType2.index = indexOfEnclosingType;
                  if (this.resolveBindings) {
                    recordNodes(parameterizedType2, typeReference);
                  }
                  for (int i = 0, max = typeArguments[startingIndex].length; i < max; i++) {
                    final Type type2 = convertType(typeArguments[startingIndex][i]);
                    parameterizedType2.typeArguments().add(type2);
                    end = type2.getStartPosition() + type2.getLength() - 1;
                  }
                  end = retrieveClosingAngleBracketPosition(end + 1);
                  length = end + 1;
                  parameterizedType2.setSourceRange(start, end - start + 1);
                  currentType = parameterizedType2;
                } else {
                  currentType = qualifiedType;
                  qualifiedType.index = indexOfEnclosingType;
                }
                startingIndex++;
              }
              if (this.resolveBindings) {
                this.recordNodes(currentType, typeReference);
              }
              type = currentType;
              length -= sourceStart;
            }
        }
      } else if (typeReference instanceof org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) {
        char[][] name = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).getTypeName();
        int nameLength = name.length;
        long[] positions = ((org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference) typeReference).sourcePositions;
        sourceStart = (int)(positions[0]>>>32);
        length = (int)(positions[nameLength - 1] & 0xFFFFFFFF) - sourceStart + 1;
        final Name qualifiedName = this.setQualifiedNameNameAndSourceRanges(name, positions, typeReference);
        final SimpleType simpleType = new SimpleType(this.ast);
        simpleType.setName(qualifiedName);
        type = simpleType;
        type.setSourceRange(sourceStart, length);
      } else {
        TypeReference[] typeReferences = ((org.eclipse.jdt.internal.compiler.ast.UnionTypeReference) typeReference).typeReferences;
        switch(this.ast.apiLevel) {
          case AST.JLS2_INTERNAL :
          case AST.JLS3_INTERNAL :
            // recovery
            type = this.convertType(typeReferences[0]);
            int start = typeReference.sourceStart;
            int endPosition = typeReference.sourceEnd;
            length = endPosition - start + 1;
            type.setSourceRange(start, length);
            type.setFlags(type.getFlags() | ASTNode.MALFORMED);
            break;
          default:
            // union type reference
            final UnionType unionType = new UnionType(this.ast);
            for (int i = 0, max = typeReferences.length; i < max; i++) {
              unionType.types().add(this.convertType(typeReferences[i]));
            }
            type = unionType;
            List types = unionType.types();
            int size = types.size();
            start = ((Type) types.get(0)).getStartPosition();
            Type lastType = (Type) types.get(size - 1);
            endPosition = lastType.getStartPosition() + lastType.getLength();
            length = endPosition - start; /* + 1 - 1 == 0 */
            type.setSourceRange(start, length);
        }
      }

      length = typeReference.sourceEnd - sourceStart + 1;
      if (dimensions != 0) {
        type = this.ast.newArrayType(type, dimensions);
        if (this.resolveBindings) {
          completeRecord((ArrayType) type, typeReference);
        }
        int end = retrieveEndOfDimensionsPosition(sourceStart+length, this.compilationUnitSourceLength);
        if (end != -1) {
          type.setSourceRange(sourceStart, end - sourceStart + 1);
        } else {
          type.setSourceRange(sourceStart, length);
        }
        ArrayType subarrayType = (ArrayType) type;
        int index = dimensions - 1;
        while (index > 0) {
          subarrayType = (ArrayType) subarrayType.getComponentType();
          end = retrieveProperRightBracketPosition(index, sourceStart);
          subarrayType.setSourceRange(sourceStart, end - sourceStart + 1);
          index--;
        }
      }
    }
    if (this.resolveBindings) {
      this.recordNodes(type, typeReference);
    }
    boolean sawDiamond = false;
    if (typeReference instanceof ParameterizedSingleTypeReference) {
      ParameterizedSingleTypeReference pstr = (ParameterizedSingleTypeReference) typeReference;
      if (pstr.typeArguments == TypeReference.NO_TYPE_ARGUMENTS) {
        sawDiamond = true;
      }
    } else if (typeReference instanceof ParameterizedQualifiedTypeReference) {
      ParameterizedQualifiedTypeReference pqtr = (ParameterizedQualifiedTypeReference) typeReference;
View Full Code Here

TOP

Related Classes of org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.