X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/DefaultProblem.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/DefaultProblem.java index 9e433d3..fe14b8c 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/DefaultProblem.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/DefaultProblem.java @@ -1,38 +1,34 @@ /******************************************************************************* - * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others. + * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v0.5 + * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v05.html + * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation - ******************************************************************************/ + *******************************************************************************/ package net.sourceforge.phpdt.internal.compiler.problem; import net.sourceforge.phpdt.core.compiler.IProblem; -import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit; -import net.sourceforge.phpdt.internal.compiler.util.Util; +//import net.sourceforge.phpdt.internal.compiler.util.Util; public class DefaultProblem implements ProblemSeverities, IProblem { - private char[] fileName; + private int id; + private int startPosition, endPosition, line; + private int severity; + private String[] arguments; + private String message; - - public DefaultProblem( - char[] originatingFileName, - String message, - int id, - String[] stringArguments, - int severity, - int startPosition, - int endPosition, - int line) { + public DefaultProblem(char[] originatingFileName, String message, int id, + String[] stringArguments, int severity, int startPosition, + int endPosition, int line) { this.fileName = originatingFileName; this.message = message; this.id = id; @@ -43,145 +39,202 @@ public class DefaultProblem implements ProblemSeverities, IProblem { this.line = line; } - public String errorReportSource(ICompilationUnit compilationUnit) { - //extra from the source the innacurate token - //and "highlight" it using some underneath ^^^^^ - //put some context around too. - - //this code assumes that the font used in the console is fixed size - - //sanity ..... - if ((startPosition > endPosition) - || ((startPosition <= 0) && (endPosition <= 0))) - return Util.bind("problem.noSourceInformation"); //$NON-NLS-1$ - - final char SPACE = '\u0020'; - final char MARK = '^'; - final char TAB = '\t'; - char[] source = compilationUnit.getContents(); - //the next code tries to underline the token..... - //it assumes (for a good display) that token source does not - //contain any \r \n. This is false on statements ! - //(the code still works but the display is not optimal !) - - //compute the how-much-char we are displaying around the inaccurate token - int begin = startPosition >= source.length ? source.length - 1 : startPosition; - int relativeStart = 0; - int end = endPosition >= source.length ? source.length - 1 : endPosition; - int relativeEnd = 0; - label : for (relativeStart = 0;; relativeStart++) { - if (begin == 0) - break label; - if ((source[begin - 1] == '\n') || (source[begin - 1] == '\r')) - break label; - begin--; - } - label : for (relativeEnd = 0;; relativeEnd++) { - if ((end + 1) >= source.length) - break label; - if ((source[end + 1] == '\r') || (source[end + 1] == '\n')) { - break label; - } - end++; - } - //extract the message form the source - char[] extract = new char[end - begin + 1]; - System.arraycopy(source, begin, extract, 0, extract.length); - char c; - //remove all SPACE and TAB that begin the error message... - int trimLeftIndex = 0; - while (((c = extract[trimLeftIndex++]) == TAB) || (c == SPACE)) { - }; - System.arraycopy( - extract, - trimLeftIndex - 1, - extract = new char[extract.length - trimLeftIndex + 1], - 0, - extract.length); - relativeStart -= trimLeftIndex; - //buffer spaces and tabs in order to reach the error position - int pos = 0; - char[] underneath = new char[extract.length]; // can't be bigger - for (int i = 0; i <= relativeStart; i++) { - if (extract[i] == TAB) { - underneath[pos++] = TAB; - } else { - underneath[pos++] = SPACE; - } - } - //mark the error position - for (int i = startPosition; - i <= (endPosition >= source.length ? source.length - 1 : endPosition); - i++) - underneath[pos++] = MARK; - //resize underneathto remove 'null' chars - System.arraycopy(underneath, 0, underneath = new char[pos], 0, pos); - - return " " + Util.bind("problem.atLine", String.valueOf(line)) //$NON-NLS-2$ //$NON-NLS-1$ - + "\n\t" + new String(extract) + "\n\t" + new String(underneath); //$NON-NLS-2$ //$NON-NLS-1$ - } - +// public String errorReportSource(char[] unitSource) { +// // extra from the source the innacurate token +// // and "highlight" it using some underneath ^^^^^ +// // put some context around too. +// // this code assumes that the font used in the console is fixed size +// // sanity ..... +// if ((startPosition > endPosition) +// || ((startPosition < 0) && (endPosition < 0))) +// return Util.bind("problem.noSourceInformation"); //$NON-NLS-1$ +// StringBuffer errorBuffer = new StringBuffer(" "); //$NON-NLS-1$ +// errorBuffer.append(Util.bind("problem.atLine", String.valueOf(line))); //$NON-NLS-1$ +// errorBuffer.append("\n\t"); //$NON-NLS-1$ +// char c; +// final char SPACE = '\u0020'; +// final char MARK = '^'; +// final char TAB = '\t'; +// // the next code tries to underline the token..... +// // it assumes (for a good display) that token source does not +// // contain any \r \n. This is false on statements ! +// // (the code still works but the display is not optimal !) +// // expand to line limits +// int length = unitSource.length, begin, end; +// for (begin = startPosition >= length ? length - 1 : startPosition; begin > 0; begin--) { +// if ((c = unitSource[begin - 1]) == '\n' || c == '\r') +// break; +// } +// for (end = endPosition >= length ? length - 1 : endPosition; end + 1 < length; end++) { +// if ((c = unitSource[end + 1]) == '\r' || c == '\n') +// break; +// } +// // trim left and right spaces/tabs +// while ((c = unitSource[begin]) == ' ' || c == '\t') +// begin++; +// // while ((c = unitSource[end]) == ' ' || c == '\t') end--; TODO +// // (philippe) should also trim right, but all tests are to be updated +// // copy source +// errorBuffer.append(unitSource, begin, end - begin + 1); +// errorBuffer.append("\n\t"); //$NON-NLS-1$ +// // compute underline +// for (int i = begin; i < startPosition; i++) { +// errorBuffer.append((unitSource[i] == TAB) ? TAB : SPACE); +// } +// for (int i = startPosition; i <= (endPosition >= length ? length - 1 +// : endPosition); i++) { +// errorBuffer.append(MARK); +// } +// return errorBuffer.toString(); +// } + + // public String errorReportSource(ITextEditor textEditor){ + // //ICompilationUnit compilationUnit) { + // //extra from the source the innacurate token + // //and "highlight" it using some underneath ^^^^^ + // //put some context around too. + // + // //this code assumes that the font used in the console is fixed size + // + // //sanity ..... + // if ((startPosition > endPosition) + // || ((startPosition <= 0) && (endPosition <= 0))) + // return ProjectPrefUtil.bind("problem.noSourceInformation"); //$NON-NLS-1$ + // + // final char SPACE = '\u0020'; + // final char MARK = '^'; + // final char TAB = '\t'; + // // char[] source = compilationUnit.getContents(); + // char[] source = + // textEditor.getDocumentProvider().getDocument(null).get().toCharArray(); + // //the next code tries to underline the token..... + // //it assumes (for a good display) that token source does not + // //contain any \r \n. This is false on statements ! + // //(the code still works but the display is not optimal !) + // + // //compute the how-much-char we are displaying around the inaccurate + // token + // int begin = startPosition >= source.length ? source.length - 1 : + // startPosition; + // int relativeStart = 0; + // int end = endPosition >= source.length ? source.length - 1 : + // endPosition; + // int relativeEnd = 0; + // label : for (relativeStart = 0;; relativeStart++) { + // if (begin == 0) + // break label; + // if ((source[begin - 1] == '\n') || (source[begin - 1] == '\r')) + // break label; + // begin--; + // } + // label : for (relativeEnd = 0;; relativeEnd++) { + // if ((end + 1) >= source.length) + // break label; + // if ((source[end + 1] == '\r') || (source[end + 1] == '\n')) { + // break label; + // } + // end++; + // } + // //extract the message form the source + // char[] extract = new char[end - begin + 1]; + // System.arraycopy(source, begin, extract, 0, extract.length); + // char c; + // //remove all SPACE and TAB that begin the error message... + // int trimLeftIndex = 0; + // while (((c = extract[trimLeftIndex++]) == TAB) || (c == SPACE)) { + // }; + // System.arraycopy( + // extract, + // trimLeftIndex - 1, + // extract = new char[extract.length - trimLeftIndex + 1], + // 0, + // extract.length); + // relativeStart -= trimLeftIndex; + // //buffer spaces and tabs in order to reach the error position + // int pos = 0; + // char[] underneath = new char[extract.length]; // can't be bigger + // for (int i = 0; i <= relativeStart; i++) { + // if (extract[i] == TAB) { + // underneath[pos++] = TAB; + // } else { + // underneath[pos++] = SPACE; + // } + // } + // //mark the error position + // for (int i = startPosition; + // i <= (endPosition >= source.length ? source.length - 1 : endPosition); + // i++) + // underneath[pos++] = MARK; + // //resize underneathto remove 'null' chars + // System.arraycopy(underneath, 0, underneath = new char[pos], 0, pos); + // + // return " " + ProjectPrefUtil.bind("problem.atLine", String.valueOf(line)) + // //$NON-NLS-2$ //$NON-NLS-1$ + // + "\n\t" + new String(extract) + "\n\t" + new String(underneath); + // //$NON-NLS-2$ //$NON-NLS-1$ + // } /** * Answer back the original arguments recorded into the problem. + * * @return java.lang.String[] */ public String[] getArguments() { - return arguments; } /** * Answer the type of problem. - * @see org.eclipse.jdt.core.compiler.IProblem#getID() + * + * @see net.sourceforge.phpdt.core.compiler.IProblem#getID() * @return int */ public int getID() { - return id; } /** - * Answer a localized, human-readable message string which describes the problem. + * Answer a localized, human-readable message string which describes the + * problem. + * * @return java.lang.String */ public String getMessage() { - return message; } /** * Answer the file name in which the problem was found. + * * @return char[] */ public char[] getOriginatingFileName() { - return fileName; } /** * Answer the end position of the problem (inclusive), or -1 if unknown. + * * @return int */ public int getSourceEnd() { - return endPosition; } /** * Answer the line number in source where the problem begins. + * * @return int */ public int getSourceLineNumber() { - return line; } /** * Answer the start position of the problem (inclusive), or -1 if unknown. + * * @return int */ public int getSourceStart() { - return startPosition; } @@ -190,7 +243,6 @@ public class DefaultProblem implements ProblemSeverities, IProblem { * @return boolean */ public boolean isError() { - return (severity & ProblemSeverities.Error) != 0; } @@ -199,43 +251,44 @@ public class DefaultProblem implements ProblemSeverities, IProblem { * @return boolean */ public boolean isWarning() { - return (severity & ProblemSeverities.Error) == 0; } /** * Set the end position of the problem (inclusive), or -1 if unknown. - * + * * Used for shifting problem positions. - * @param sourceEnd the new value of the sourceEnd of the receiver + * + * @param sourceEnd + * the new value of the sourceEnd of the receiver */ public void setSourceEnd(int sourceEnd) { - endPosition = sourceEnd; } /** * Set the line number in source where the problem begins. - * @param lineNumber the new value of the line number of the receiver + * + * @param lineNumber + * the new value of the line number of the receiver */ public void setSourceLineNumber(int lineNumber) { - line = lineNumber; } /** * Set the start position of the problem (inclusive), or -1 if unknown. - * + * * Used for shifting problem positions. - * @param sourceStart the new value of the source start position of the receiver + * + * @param sourceStart + * the new value of the source start position of the receiver */ public void setSourceStart(int sourceStart) { - startPosition = sourceStart; } public String toString() { - String s = "Pb(" + (id & IgnoreCategoriesMask) + ") "; //$NON-NLS-1$ //$NON-NLS-2$ if (message != null) { s += message; @@ -246,4 +299,4 @@ public class DefaultProblem implements ProblemSeverities, IProblem { } return s; } -} \ No newline at end of file +}