Community
Participate
Working Groups
I have following code ********** 1 public WedgeGenerator() { 2 super("Wedge"); 3 setData((int) (2. + 10. * Math.random())); 4 //prt_buffers = THsys.getInstance().getNrOfPrintBuffers() - 1; 5 prt_buffers = 5 6 pool = new short[prt_buffers][]; 7 for (int i = 0; i < pool.length; i++) pool[i] = null; 9 read_pos = 0; 10 write_pos = 0; 11 stop = false; 12 poolHasData = false; 13 start(); 14 try { 15 sleep(100); 16 } catch (InterruptedException e) { 17 } 18 } ********** I commented out line 4 and created line 5 but forgot to put a ';' at the end. I press Ctrl+S to save, compilation starts and i get messagebox. Save problems.. save could not be completed.. reason : Erros during build. Details -> NPE encountered while running org.eclipse.jdt.internal.core.builder.JavaBuilder Adding the ';' at the end and saving , solves this bug. It can be repeated again by removing the ';' and saving. It is a persistent bug
Which build are you using? Is there any information in the /.metadata/.log file? Moving to JDT/Core for comment.
the whole .java file was.. *********************** package com.agfa.med.hermod.thsystem; import java.io.FileInputStream; import com.agfa.med.hermod.properties.Properties; import com.agfa.med.hermod.thsystem.*; import com.agfa.med.thor.thsystem.THsys; import com.agfa.portex.Logbox; public class WedgeGenerator extends BufferFiller { private short datamin, datanodes, datamax; int NrOfLines2Compensate, numberOfPixelsPerLine, numberOfLines; private boolean stop, poolHasData; private short[][] pool; private int read_pos, write_pos, buf_cnt; private int prt_buffers; private int banks; public WedgeGenerator() { super("Wedge"); setData((int) (2. + 10. * Math.random())); //prt_buffers = THsys.getInstance().getNrOfPrintBuffers() - 1; prt_buffers = 5 pool = new short[prt_buffers][]; for (int i = 0; i < pool.length; i++) pool[i] = null; read_pos = 0; write_pos = 0; stop = false; poolHasData = false; start(); try { sleep(100); } catch (InterruptedException e) { } } public WedgeGenerator(Logbox logbox) { this(); setLogbox(logbox); } public WedgeGenerator(short numberOfNodes, Logbox logbox) { this(logbox); } public void setData(int numberOfNodes) { Properties prop = new Properties(); try { FileInputStream fis = new FileInputStream("c:\\wedge.dat"); prop.load(fis); fis.close(); } catch (Exception ex) { String message = "If you want to use your own settings for printing the wedge. Make a properties file c:/wedge.dat"; message += "\n data.minimum = 4000"; message += "\n data.maximum = 8200"; message += "\n data.nodes = 3"; logTrace(message); } String str; //aantal lijnen dat op een blad kunnen .. ask Layout !! numberOfLines = THsys.getInstance().getNrOfLines(); NrOfLines2Compensate = THsys.getInstance().getNrOfLines2Compensate(); numberOfPixelsPerLine = THsys.getInstance().getNe(); datamax = THsys.getInstance().getMaxTHdata(); datamin = (short) (datamax / 2); datanodes = 5; str = prop.getProperty("data.minimum"); if (str != null) { logError("data.minumum provided " + str); datamin = (short) Integer.parseInt(str); } str = prop.getProperty("data.maximum"); if (str != null) { logError("data.maximum provided " + str); datamax = (short) Integer.parseInt(str); } str = prop.getProperty("data.nodes"); if (str != null) { logError("data.nodes provided " + str); datanodes = (short) Integer.parseInt(str); } if (numberOfNodes > 0) datanodes = (short) numberOfNodes; String message = "data.minimum = " + datamin; message += "\n data.maximum = " + datamax; message += "\n data.nodes = " + datanodes; logError("data ->" + message); } public synchronized void stopFilling() { stop = true; synchronized (this) { this.notify(); } logError(" WIP::stopFilling notifies ..."); for (int i = 0; i < pool.length; i++) pool[i] = null; poolHasData = false; } public short[] getDataBuffer() { logError(" WIP::getDataBuffer Called"); if (!poolHasData) { synchronized (this) { logError(" WIP::getDataBuffer pool has no data-> NOTIFY!!"); this.notify(); } } while (!poolHasData) { synchronized (this) { try { logError( " WIP::getDataBuffer waiting... poolHasData=" + poolHasData); wait(100); } catch (InterruptedException ie) { poolHasData = false; logError("WIP::getDataBuffer Interrupted while waiting for pool to get filled, Ex:"+ie.getMessage()); } } // wait for all buffers to be filled } short[] tmp = pool[read_pos]; pool[read_pos] = null; read_pos = (read_pos + 1) % prt_buffers; // if test sneller dan modulo ? buf_cnt--; logError(" WIP:: data READ @ pos:" + read_pos + " buf_cnt=" + buf_cnt); return tmp; } public synchronized void run() { logError(" WIP::thread started "); do { try { logError(" WIP:: waiting to get kicked Off"); wait(); logError(" WIP::Start filling buffers"); //drukt een trappenpatroon af over de hele breedte van het blad float increment = datanodes * (datamax - datamin) / (float) (numberOfLines); float currentdata = datamin; logError( " WIP::Start filling buffers : startvalue = " + currentdata + " -- increment = " + increment); int currentLine = 0; buf_cnt = 0; do { while (!stop && (pool[write_pos] != null)) { logError(" WIP::run waiting ..."); wait(10); } short[] tmp = new short[NrOfLines2Compensate * numberOfPixelsPerLine]; //de pool_buffer bevat niet 1 lijn, maar NrOfLines2Compensate lijnen achter elkaar for (int x = 0; x < NrOfLines2Compensate; x++) { //voeg 1 lijntje toe aan de reeks van NrOfLines2Compensate lijnen (alle pixels hebben waarde = data) for (short y = 0; y < numberOfPixelsPerLine; y++) tmp[x * numberOfPixelsPerLine + y] = (short) currentdata; //Check of we moeten verhogen of verlagen if (currentdata + increment > datamax || currentdata + increment < datamin) increment = -increment; currentdata += increment; currentLine++; } logError( " WIP::CurrentLine/Numberoflines=" + currentLine + "/" + numberOfLines); pool[write_pos] = tmp; poolHasData = true; logError( " WIP::Filled pool[" + write_pos + "][0]=" + pool[write_pos][0]); write_pos = (write_pos + 1) % prt_buffers; buf_cnt++; logError( " WIP:: data WRITE @ pos:" + write_pos + " buf_cnt=" + buf_cnt); } while (!stop); } catch (InterruptedException e) { } } while (true); } } ******************
the .metadata/.log file ********************** !ENTRY org.eclipse.core.resources 4 2 mei 24, 2002 10:06:13.599 !MESSAGE Problems occurred when invoking code from plug-in: org.eclipse.core.resources. !STACK 0 java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.recursiveConstructorInvocation(ProblemReporter.java:1927) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.analyseCode(TypeDeclaration.java:445) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.analyseCode(CompilationUnitDeclaration.java:77) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:536) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:337) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:218) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:165) at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:106) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:185) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:109) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:383) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:802) at org.eclipse.core.runtime.Platform.run(Platform.java:416) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:119) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:173) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:183) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:143) at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:802) at org.eclipse.core.runtime.Platform.run(Platform.java:416) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:157) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:208) at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:733) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1366) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:78) at org.eclipse.ui.texteditor.AbstractTextEditor.performSaveOperation(AbstractTextEditor.java:2019) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSaveOperation(CompilationUnitEditor.java:614) at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:662) at org.eclipse.ui.internal.EditorManager$10.run(EditorManager.java:960) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:296) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:249) at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:335) at org.eclipse.ui.internal.EditorManager.runProgressMonitorOperation(EditorManager.java:838) at org.eclipse.ui.internal.EditorManager.saveEditor(EditorManager.java:965) at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:1945) at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:32) at org.eclipse.jface.action.Action.runWithEvent(Action.java:590) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:407) at org.eclipse.jface.action.ActionContributionItem.handleWidgetEvent(ActionContributionItem.java:361) at org.eclipse.jface.action.ActionContributionItem.access$0(ActionContributionItem.java:352) at org.eclipse.jface.action.ActionContributionItem$ActionListener.handleEvent(ActionContributionItem.java:47) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:75) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:825) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:1527) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1289) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1085) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1068) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoader.java:739) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.eclipse.core.launcher.Main.basicRun(Main.java:200) at org.eclipse.core.launcher.Main.run(Main.java:643) at org.eclipse.core.launcher.Main.main(Main.java:476) ************
Here is a small test case that shows the problem: public class Test { private int i; public Test() { i = 5 } public Test(String s) { this(); } public Test(short numberOfNodes, String s) { this(s); } } The compiler tries to report a cycle between constructors even if there is none.
Good find. This bug is a consequence of no longer recreating constructor call during parsing recovery (if parse error was in same constructor). Fixed
Fixed
Verified