Java Code Examples for org.eclipse.jdt.internal.compiler.util.Util#getLineNumber()
The following examples show how to use
org.eclipse.jdt.internal.compiler.util.Util#getLineNumber() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: EclipseAstProblemView.java From EasyMPermission with MIT License | 6 votes |
/** * Adds a problem to the provided CompilationResult object so that it will show up * in the Problems/Warnings view. */ public static void addProblemToCompilationResult(char[] fileNameArray, CompilationResult result, boolean isWarning, String message, int sourceStart, int sourceEnd) { if (result == null) return; if (fileNameArray == null) fileNameArray = "(unknown).java".toCharArray(); int lineNumber = 0; int columnNumber = 1; int[] lineEnds = null; lineNumber = sourceStart >= 0 ? Util.getLineNumber(sourceStart, lineEnds = result.getLineSeparatorPositions(), 0, lineEnds.length-1) : 0; columnNumber = sourceStart >= 0 ? Util.searchColumnNumber(result.getLineSeparatorPositions(), lineNumber,sourceStart) : 0; CategorizedProblem ecProblem = new LombokProblem( fileNameArray, message, 0, new String[0], isWarning ? ProblemSeverities.Warning : ProblemSeverities.Error, sourceStart, sourceEnd, lineNumber, columnNumber); result.record(ecProblem, null); }
Example 2
Source File: CompletionParser.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 6 votes |
/** * Checks if the completion is in the context of a method and on the type of one of its arguments * Returns whether we found a completion node. */ private boolean checkRecoveredMethod() { if (this.currentElement instanceof RecoveredMethod){ /* check if current awaiting identifier is the completion identifier */ if (this.indexOfAssistIdentifier() < 0) return false; /* check if on line with an error already - to avoid completing inside illegal type names e.g. int[<cursor> */ if (this.lastErrorEndPosition <= this.cursorLocation && Util.getLineNumber(this.lastErrorEndPosition, this.scanner.lineEnds, 0, this.scanner.linePtr) == Util.getLineNumber(((CompletionScanner)this.scanner).completedIdentifierStart, this.scanner.lineEnds, 0, this.scanner.linePtr)){ return false; } RecoveredMethod recoveredMethod = (RecoveredMethod)this.currentElement; /* only consider if inside method header */ if (!recoveredMethod.foundOpeningBrace && this.lastIgnoredToken == -1) { //if (rParenPos < lParenPos){ // inside arguments this.assistNode = this.getTypeReference(0); this.lastCheckPoint = this.assistNode.sourceEnd + 1; this.isOrphanCompletionNode = true; return true; } } return false; }
Example 3
Source File: RecoveredElement.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 6 votes |
public int previousAvailableLineEnd(int position){ Parser parser = parser(); if (parser == null) return position; Scanner scanner = parser.scanner; if (scanner.lineEnds == null) return position; int index = Util.getLineNumber(position, scanner.lineEnds, 0, scanner.linePtr); if (index < 2) return position; int previousLineEnd = scanner.lineEnds[index-2]; char[] source = scanner.source; for (int i = previousLineEnd+1; i < position; i++){ if (!(source[i] == ' ' || source[i] == '\t')) return position; } return previousLineEnd; }
Example 4
Source File: RecoveredMethod.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 6 votes |
void attach(TypeParameter[] parameters, int startPos) { if(this.methodDeclaration.modifiers != ClassFileConstants.AccDefault) return; int lastParameterEnd = parameters[parameters.length - 1].sourceEnd; Parser parser = parser(); Scanner scanner = parser.scanner; if(Util.getLineNumber(this.methodDeclaration.declarationSourceStart, scanner.lineEnds, 0, scanner.linePtr) != Util.getLineNumber(lastParameterEnd, scanner.lineEnds, 0, scanner.linePtr)) return; if(parser.modifiersSourceStart > lastParameterEnd && parser.modifiersSourceStart < this.methodDeclaration.declarationSourceStart) return; if (this.methodDeclaration instanceof MethodDeclaration) { ((MethodDeclaration)this.methodDeclaration).typeParameters = parameters; this.methodDeclaration.declarationSourceStart = startPos; } else if (this.methodDeclaration instanceof ConstructorDeclaration){ ((ConstructorDeclaration)this.methodDeclaration).typeParameters = parameters; this.methodDeclaration.declarationSourceStart = startPos; } }
Example 5
Source File: FakedTrackingVariable.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 6 votes |
public String nameForReporting(ASTNode location, ReferenceContext referenceContext) { if (this.name == UNASSIGNED_CLOSEABLE_NAME) { if (location != null && referenceContext != null) { CompilationResult compResult = referenceContext.compilationResult(); if (compResult != null) { int[] lineEnds = compResult.getLineSeparatorPositions(); int resourceLine = Util.getLineNumber(this.sourceStart, lineEnds , 0, lineEnds.length-1); int reportLine = Util.getLineNumber(location.sourceStart, lineEnds , 0, lineEnds.length-1); if (resourceLine != reportLine) { char[] replacement = Integer.toString(resourceLine).toCharArray(); return String.valueOf(CharOperation.replace(UNASSIGNED_CLOSEABLE_NAME_TEMPLATE, TEMPLATE_ARGUMENT, replacement)); } } } } return String.valueOf(this.name); }
Example 6
Source File: PublicScanner.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 5 votes |
public String toString() { if (this.startPosition == this.eofPosition) return "EOF\n\n" + new String(this.source); //$NON-NLS-1$ if (this.currentPosition > this.eofPosition) return "behind the EOF\n\n" + new String(this.source); //$NON-NLS-1$ if (this.currentPosition <= 0) return "NOT started!\n\n"+ new String(this.source); //$NON-NLS-1$ StringBuffer buffer = new StringBuffer(); if (this.startPosition < 1000) { buffer.append(this.source, 0, this.startPosition); } else { buffer.append("<source beginning>\n...\n"); //$NON-NLS-1$ int line = Util.getLineNumber(this.startPosition-1000, this.lineEnds, 0, this.linePtr); int lineStart = getLineStart(line); buffer.append(this.source, lineStart, this.startPosition-lineStart); } buffer.append("\n===============================\nStarts here -->"); //$NON-NLS-1$ int middleLength = (this.currentPosition - 1) - this.startPosition + 1; if (middleLength > -1) { buffer.append(this.source, this.startPosition, middleLength); } buffer.append("<-- Ends here\n===============================\n"); //$NON-NLS-1$ buffer.append(this.source, (this.currentPosition - 1) + 1, this.eofPosition - (this.currentPosition - 1) - 1); return buffer.toString(); }
Example 7
Source File: AbstractCommentParser.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 5 votes |
/** * Search the line number corresponding to a specific position. * Warning: returned position is 1-based index! * @see Scanner#getLineNumber(int) We cannot directly use this method * when linePtr field is not initialized. */ private int getLineNumber(int position) { if (this.scanner.linePtr != -1) { return Util.getLineNumber(position, this.scanner.lineEnds, 0, this.scanner.linePtr); } if (this.lineEnds == null) return 1; return Util.getLineNumber(position, this.lineEnds, 0, this.lineEnds.length-1); }
Example 8
Source File: Scanner.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 5 votes |
public String toString() { if (this.startPosition == this.eofPosition) return "EOF\n\n" + new String(this.source); //$NON-NLS-1$ if (this.currentPosition > this.eofPosition) return "behind the EOF\n\n" + new String(this.source); //$NON-NLS-1$ if (this.currentPosition <= 0) return "NOT started!\n\n"+ (this.source != null ? new String(this.source) : ""); //$NON-NLS-1$ //$NON-NLS-2$ StringBuffer buffer = new StringBuffer(); if (this.startPosition < 1000) { buffer.append(this.source, 0, this.startPosition); } else { buffer.append("<source beginning>\n...\n"); //$NON-NLS-1$ int line = Util.getLineNumber(this.startPosition-1000, this.lineEnds, 0, this.linePtr); int lineStart = getLineStart(line); buffer.append(this.source, lineStart, this.startPosition-lineStart); } buffer.append("\n===============================\nStarts here -->"); //$NON-NLS-1$ int middleLength = (this.currentPosition - 1) - this.startPosition + 1; if (middleLength > -1) { buffer.append(this.source, this.startPosition, middleLength); } if (this.nextToken != TerminalTokens.TokenNameNotAToken) { buffer.append("<-- Ends here [in pipeline " + toStringAction(this.nextToken) + "]\n===============================\n"); //$NON-NLS-1$ //$NON-NLS-2$ } else { buffer.append("<-- Ends here\n===============================\n"); //$NON-NLS-1$ } buffer.append(this.source, (this.currentPosition - 1) + 1, this.eofPosition - (this.currentPosition - 1) - 1); return buffer.toString(); }
Example 9
Source File: CompletionParser.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
/** * Checks if the completion is in the context of a type and on a type reference in this type. * Persists the identifier into a fake field return type * Returns whether we found a completion node. */ private boolean checkRecoveredType() { if (this.currentElement instanceof RecoveredType){ /* check if current awaiting identifier is the completion identifier */ if (this.indexOfAssistIdentifier() < 0) return false; /* check if on line with an error already - to avoid completing inside illegal type names e.g. int[<cursor> */ if (this.lastErrorEndPosition <= this.cursorLocation && ((RecoveredType)this.currentElement).lastMemberEnd() < this.lastErrorEndPosition && Util.getLineNumber(this.lastErrorEndPosition, this.scanner.lineEnds, 0, this.scanner.linePtr) == Util.getLineNumber(((CompletionScanner)this.scanner).completedIdentifierStart, this.scanner.lineEnds, 0, this.scanner.linePtr)){ return false; } RecoveredType recoveredType = (RecoveredType)this.currentElement; /* filter out cases where scanner is still inside type header */ if (recoveredType.foundOpeningBrace) { // complete generics stack if necessary if((this.genericsIdentifiersLengthPtr < 0 && this.identifierPtr > -1) || (this.genericsIdentifiersLengthStack[this.genericsIdentifiersLengthPtr] <= this.identifierPtr)) { pushOnGenericsIdentifiersLengthStack(this.identifierLengthStack[this.identifierLengthPtr]); pushOnGenericsLengthStack(0); // handle type arguments } this.assistNode = this.getTypeReference(0); this.lastCheckPoint = this.assistNode.sourceEnd + 1; this.isOrphanCompletionNode = true; return true; } else { if(recoveredType.typeDeclaration.superclass == null && this.topKnownElementKind(COMPLETION_OR_ASSIST_PARSER) == K_EXTENDS_KEYWORD) { consumeClassOrInterfaceName(); this.pushOnElementStack(K_NEXT_TYPEREF_IS_CLASS); this.assistNode = this.getTypeReference(0); popElement(K_NEXT_TYPEREF_IS_CLASS); this.lastCheckPoint = this.assistNode.sourceEnd + 1; this.isOrphanCompletionNode = true; return true; } } } return false; }
Example 10
Source File: CompletionParser.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
protected void consumeEnterVariable() { this.identifierPtr--; this.identifierLengthPtr--; boolean isLocalDeclaration = this.nestedMethod[this.nestedType] != 0; int variableIndex = this.variablesCounter[this.nestedType]; this.hasUnusedModifiers = false; if(isLocalDeclaration || indexOfAssistIdentifier() < 0 || variableIndex != 0) { this.identifierPtr++; this.identifierLengthPtr++; if (this.pendingAnnotation != null && this.assistNode != null && this.currentElement != null && this.currentElement instanceof RecoveredMethod && !this.currentElement.foundOpeningBrace && ((RecoveredMethod)this.currentElement).methodDeclaration.declarationSourceEnd == 0) { // this is a method parameter super.consumeEnterVariable(); this.pendingAnnotation.potentialAnnotatedNode = this.astStack[this.astPtr]; this.pendingAnnotation.isParameter = true; this.pendingAnnotation = null; } else { super.consumeEnterVariable(); if (this.pendingAnnotation != null) { this.pendingAnnotation.potentialAnnotatedNode = this.astStack[this.astPtr]; this.pendingAnnotation = null; } } } else { this.restartRecovery = true; // recovery if (this.currentElement != null) { if(!checkKeyword() && !(this.currentElement instanceof RecoveredUnit && ((RecoveredUnit)this.currentElement).typeCount == 0)) { int nameSourceStart = (int)(this.identifierPositionStack[this.identifierPtr] >>> 32); this.intPtr--; TypeReference type = getTypeReference(this.intStack[this.intPtr--]); this.intPtr--; if (!(this.currentElement instanceof RecoveredType) && (this.currentToken == TokenNameDOT || (Util.getLineNumber(type.sourceStart, this.scanner.lineEnds, 0, this.scanner.linePtr) != Util.getLineNumber(nameSourceStart, this.scanner.lineEnds, 0, this.scanner.linePtr)))){ this.lastCheckPoint = nameSourceStart; this.restartRecovery = true; return; } FieldDeclaration completionFieldDecl = new CompletionOnFieldType(type, false); // consume annotations int length; if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) { System.arraycopy( this.expressionStack, (this.expressionPtr -= length) + 1, completionFieldDecl.annotations = new Annotation[length], 0, length); } completionFieldDecl.modifiers = this.intStack[this.intPtr--]; this.assistNode = completionFieldDecl; this.lastCheckPoint = type.sourceEnd + 1; this.currentElement = this.currentElement.add(completionFieldDecl, 0); this.lastIgnoredToken = -1; } } } }
Example 11
Source File: Scribe.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
private int getTextLength(FormatJavadocBlock block, FormatJavadocText text) { // Special case for immutable tags if (text.isImmutable()) { this.scanner.resetTo(text.sourceStart , text.sourceEnd); int textLength = 0; while (!this.scanner.atEnd()) { try { int token = this.scanner.getNextToken(); if (token == TerminalTokens.TokenNameWHITESPACE) { if (CharOperation.indexOf('\n', this.scanner.source, this.scanner.startPosition, this.scanner.currentPosition) >= 0) { textLength = 0; this.scanner.getNextChar(); if (this.scanner.currentCharacter == '*') { this.scanner.getNextChar(); if (this.scanner.currentCharacter != ' ') { textLength++; } } else { textLength++; } continue; } } textLength += (this.scanner.atEnd() ? this.scanner.eofPosition : this.scanner.currentPosition) - this.scanner.startPosition; } catch (InvalidInputException e) { // maybe an unterminated string or comment textLength += (this.scanner.atEnd() ? this.scanner.eofPosition : this.scanner.currentPosition) - this.scanner.startPosition; } } return textLength; } // Simple for one line tags if (block.isOneLineTag()) { return text.sourceEnd - text.sourceStart + 1; } // Find last line int startLine = Util.getLineNumber(text.sourceStart, this.lineEnds, 0, this.maxLines); int endLine = startLine; int previousEnd = -1; for (int i=0; i<=text.separatorsPtr; i++) { int end = (int) (text.separators[i] >>> 32); endLine = Util.getLineNumber(end, this.lineEnds, endLine-1, this.maxLines); if (endLine > startLine) { return previousEnd - text.sourceStart + 1; } previousEnd = end; } // This was a one line text return text.sourceEnd - text.sourceStart + 1; }
Example 12
Source File: DocumentElementParser.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
protected void consumeMethodHeaderNameWithTypeParameters(boolean isAnnotationMethod) { // MethodHeaderName ::= Modifiersopt TypeParameters Type 'Identifier' '(' // AnnotationMethodHeaderName ::= Modifiersopt TypeParameters Type 'Identifier' '(' // RecoveryMethodHeaderName ::= Modifiersopt TypeParameters Type 'Identifier' '(' MethodDeclaration md = null; if(isAnnotationMethod) { md = new AnnotationMethodDeclaration(this.compilationUnit.compilationResult); this.recordStringLiterals = false; } else { md = new MethodDeclaration(this.compilationUnit.compilationResult); } //name md.selector = this.identifierStack[this.identifierPtr]; long selectorSource = this.identifierPositionStack[this.identifierPtr--]; this.identifierLengthPtr--; //type md.returnType = getTypeReference(this.intStack[this.intPtr--]); if (isAnnotationMethod) rejectIllegalLeadingTypeAnnotations(md.returnType); md.bits |= (md.returnType.bits & ASTNode.HasTypeAnnotations); // consume type parameters int length = this.genericsLengthStack[this.genericsLengthPtr--]; this.genericsPtr -= length; System.arraycopy(this.genericsStack, this.genericsPtr + 1, md.typeParameters = new TypeParameter[length], 0, length); //modifiers md.declarationSourceStart = this.intStack[this.intPtr--]; md.modifiersSourceStart = this.intStack[this.intPtr--]; md.modifiers = this.intStack[this.intPtr--]; // consume annotations if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) { System.arraycopy( this.expressionStack, (this.expressionPtr -= length) + 1, md.annotations = new Annotation[length], 0, length); } // javadoc md.javadoc = this.javadoc; this.javadoc = null; //highlight starts at selector start md.sourceStart = (int) (selectorSource >>> 32); pushOnAstStack(md); md.sourceEnd = this.lParenPos; md.bodyStart = this.lParenPos+1; this.listLength = 0; // initialize this.listLength before reading parameters/throws // recovery if (this.currentElement != null){ boolean isType; if ((isType = this.currentElement instanceof RecoveredType) //|| md.modifiers != 0 || (Util.getLineNumber(md.returnType.sourceStart, this.scanner.lineEnds, 0, this.scanner.linePtr) == Util.getLineNumber(md.sourceStart, this.scanner.lineEnds, 0, this.scanner.linePtr))){ if(isType) { ((RecoveredType) this.currentElement).pendingTypeParameters = null; } this.lastCheckPoint = md.bodyStart; this.currentElement = this.currentElement.add(md, 0); this.lastIgnoredToken = -1; } else { this.lastCheckPoint = md.sourceStart; this.restartRecovery = true; } } }
Example 13
Source File: DefaultCommentMapper.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
public final int getLineNumber(int position, int[] lineRange) { int[] lineEnds = this.scanner.lineEnds; int length = lineEnds.length; return Util.getLineNumber(position, lineEnds, (lineRange[0] > length ? length : lineRange[0]) -1, (lineRange[1] > length ? length : lineRange[1]) - 1); }
Example 14
Source File: JavadocParser.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
public boolean checkDeprecation(int commentPtr) { // Store javadoc positions this.javadocStart = this.sourceParser.scanner.commentStarts[commentPtr]; this.javadocEnd = this.sourceParser.scanner.commentStops[commentPtr]-1; this.firstTagPosition = this.sourceParser.scanner.commentTagStarts[commentPtr]; this.validValuePositions = -1; this.invalidValuePositions = -1; this.tagWaitingForDescription = NO_TAG_VALUE; // Init javadoc if necessary if (this.checkDocComment) { this.docComment = new Javadoc(this.javadocStart, this.javadocEnd); } else if (this.setJavadocPositions) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=189459 // if annotation processors are there, javadoc object is required but // they need not be resolved this.docComment = new Javadoc(this.javadocStart, this.javadocEnd); this.docComment.bits &= ~ASTNode.ResolveJavadoc; } else { this.docComment = null; } // If there's no tag in javadoc, return without parsing it if (this.firstTagPosition == 0) { switch (this.kind & PARSER_KIND) { case COMPIL_PARSER: case SOURCE_PARSER: return false; } } // Parse try { this.source = this.sourceParser.scanner.source; this.scanner.setSource(this.source); // updating source in scanner if (this.checkDocComment) { // Initialization this.scanner.lineEnds = this.sourceParser.scanner.lineEnds; this.scanner.linePtr = this.sourceParser.scanner.linePtr; this.lineEnds = this.scanner.lineEnds; commentParse(); } else { // Parse comment Scanner sourceScanner = this.sourceParser.scanner; int firstLineNumber = Util.getLineNumber(this.javadocStart, sourceScanner.lineEnds, 0, sourceScanner.linePtr); int lastLineNumber = Util.getLineNumber(this.javadocEnd, sourceScanner.lineEnds, 0, sourceScanner.linePtr); this.index = this.javadocStart +3; // scan line per line, since tags must be at beginning of lines only this.deprecated = false; nextLine : for (int line = firstLineNumber; line <= lastLineNumber; line++) { int lineStart = line == firstLineNumber ? this.javadocStart + 3 // skip leading /** : this.sourceParser.scanner.getLineStart(line); this.index = lineStart; this.lineEnd = line == lastLineNumber ? this.javadocEnd - 2 // remove trailing * / : this.sourceParser.scanner.getLineEnd(line); nextCharacter : while (this.index < this.lineEnd) { char c = readChar(); // consider unicodes switch (c) { case '*' : case '\u000c' : /* FORM FEED */ case ' ' : /* SPACE */ case '\t' : /* HORIZONTAL TABULATION */ case '\n' : /* LINE FEED */ case '\r' : /* CR */ // do nothing for space or '*' characters continue nextCharacter; case '@' : parseSimpleTag(); if (this.tagValue == TAG_DEPRECATED_VALUE) { if (this.abort) break nextCharacter; } } continue nextLine; } } return this.deprecated; } } finally { this.source = null; // release source as soon as finished this.scanner.setSource((char[]) null); //release source in scanner } return this.deprecated; }
Example 15
Source File: PublicScanner.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 2 votes |
/** * Search the line number corresponding to a specific position * @param position int * @return int */ public final int getLineNumber(int position) { return Util.getLineNumber(position, this.lineEnds, 0, this.linePtr); }
Example 16
Source File: Scanner.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 2 votes |
/** * Search the line number corresponding to a specific position * @param position int * @return int */ public final int getLineNumber(int position) { return Util.getLineNumber(position, this.lineEnds, 0, this.linePtr); }