### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: batch/org/eclipse/jdt/internal/compiler/batch/Main.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java,v retrieving revision 1.327 diff -u -r1.327 Main.java --- batch/org/eclipse/jdt/internal/compiler/batch/Main.java 21 Apr 2008 15:00:59 -0000 1.327 +++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java 20 Nov 2008 19:26:57 -0000 @@ -268,22 +268,22 @@ if ((startPosition > endPosition) || ((startPosition < 0) && (endPosition < 0)) || length == 0) - return Messages.problem_noSourceInformation; + return Messages.problem_noSourceInformation; StringBuffer errorBuffer = new StringBuffer(); if ((bits & Main.Logger.EMACS) == 0) { - errorBuffer.append(' ').append(Messages.bind(Messages.problem_atLine, String.valueOf(problem.getSourceLineNumber()))); + errorBuffer.append(' ').append(Messages.bind(Messages.problem_atLine, String.valueOf(problem.getSourceLineNumber()))); errorBuffer.append(Util.LINE_SEPARATOR); } errorBuffer.append('\t'); - + 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 ! + //contain any \r \n. This is false on statements ! //(the code still works but the display is not optimal !) // expand to line limits @@ -295,11 +295,11 @@ 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(Util.LINE_SEPARATOR).append("\t"); //$NON-NLS-1$ @@ -424,7 +424,7 @@ String.valueOf(generateTime), String.valueOf(((int) (generateTime * 1000.0 / time)) / 10.0), })); - } + } } public void logClassFile(boolean generatePackagesStructure, String outputPath, String relativeFileName) { if ((this.tagBits & Logger.XML) != 0) { @@ -916,7 +916,7 @@ this.main.bind("compile.totalTime", //$NON-NLS-1$ new String[] { String.valueOf(time), - })); + })); } if ((this.main.timing & Main.TIMING_DETAILED) != 0) { this.printlnOut( @@ -1119,7 +1119,7 @@ this.endTag(Logger.STATS); } } - + private void printTag(String name, HashMap params, boolean insertNewLine, boolean closeTag) { if (this.log != null) { ((GenericXMLWriter) this.log).printTag(name, parameters, true, insertNewLine, closeTag); @@ -1245,12 +1245,12 @@ boolean warnJavadocOn; boolean warnAllJavadocOn; - + public Compiler batchCompiler; /* Bundle containing messages */ public ResourceBundle bundle; protected FileSystem.Classpath[] checkedClasspaths; - + public Locale compilerLocale; public CompilerOptions compilerOptions; // read-only public CompilationProgress progress; @@ -1299,7 +1299,7 @@ public static final int TIMING_DISABLED = 0; public static final int TIMING_ENABLED = 1; public static final int TIMING_DETAILED = 2; - + public int timing = TIMING_DISABLED; public CompilerStats[] compilerStats; public boolean verbose = false; @@ -1312,7 +1312,7 @@ // two uses: recognize 'none' in options; code the singleton none // for the '-d none' option (wherever it may be found) public static final int DEFAULT_SIZE_CLASSPATH = 4; - + public static final String NONE = "none"; //$NON-NLS-1$ /** @@ -1562,7 +1562,7 @@ } /** * Return true if and only if the running VM supports the given minimal version. - * + * * <p>This only checks the major version, since the minor version is always 0 (at least for the useful cases).</p> * <p>The given minimalSupportedVersion is one of the constants:</p> * <ul> @@ -2536,8 +2536,8 @@ mode = DEFAULT; continue; } - - // set DocCommentSupport, with appropriate side effects on defaults if + + // set DocCommentSupport, with appropriate side effects on defaults if // javadoc is not enabled if (this.enableJavadocOn) { this.options.put( @@ -2601,7 +2601,7 @@ this.logger.logVersion(printVersionRequired); validateOptions(didSpecifyCompliance); - + // Enable annotation processing by default in batch mode when compliance is at least 1.6 // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=185768 if (!didSpecifyDisabledAnnotationProcessing @@ -2609,6 +2609,29 @@ this.options.put(CompilerOptions.OPTION_Process_Annotations, CompilerOptions.ENABLED); } + { + // If we're building an RPM, force full debugging info to + // be generated, no matter what options have been passed + // by Ant. This is something of a kludge, but it is far + // better than the alternative, which is having class + // files with debug info mysteriously missing. + + String RpmPackageName = System.getenv("RPM_PACKAGE_NAME"); + String RpmArch = System.getenv("RPM_ARCH"); + String RpmBuildRoot = System.getenv("RPM_BUILD_ROOT"); + if (RpmPackageName != null && RpmArch != null && RpmBuildRoot != null) { + this.options.put( + CompilerOptions.OPTION_LocalVariableAttribute, + CompilerOptions.GENERATE); + this.options.put( + CompilerOptions.OPTION_LineNumberAttribute, + CompilerOptions.GENERATE); + this.options.put( + CompilerOptions.OPTION_SourceFileAttribute, + CompilerOptions.GENERATE); + } + } + this.logger.logCommandLineArguments(newCommandLineArgs); this.logger.logOptions(this.options); @@ -2636,7 +2659,7 @@ 0, classCount); } - + setPaths(bootclasspaths, sourcepathClasspathArg, sourcepathClasspaths, @@ -2644,7 +2667,7 @@ extdirsClasspaths, endorsedDirClasspaths, customEncoding); - + if (this.pendingErrors != null) { for (Iterator iterator = this.pendingErrors.iterator(); iterator.hasNext(); ) { String message = (String) iterator.next(); @@ -3376,7 +3399,7 @@ } else if (token.equals("unusedTypeArgs")) { //$NON-NLS-1$ this.options.put( CompilerOptions.OPTION_ReportUnusedTypeArgumentsForMethodInvocation, - isEnabling ? CompilerOptions.WARNING : CompilerOptions.IGNORE); + isEnabling ? CompilerOptions.WARNING : CompilerOptions.IGNORE); } else { addPendingErrors(this.bind("configure.invalidWarning", token)); //$NON-NLS-1$ }