Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
sonar: don't mask fields with parameters in Java
[simgrid.git] / src / bindings / java / org / simgrid / msg / Process.java
index 4e9247b..fc4d205 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2006-2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2006-2018. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -51,11 +50,8 @@ public abstract class Process implements Runnable {
 
        /** Time at which the process should be created  */
        protected double startTime = 0;
-       /** Time at which the process should be killed.
-        * 
-        * Set at creation, and used internally by SimGrid
-        */
-       private double killTime = -1;
+       /** Time at which the process should be killed */
+       private double killTime = -1; // Used from the C world
 
        private String name = null;
        
@@ -64,7 +60,7 @@ public abstract class Process implements Runnable {
        private Host host = null;
 
        /** The arguments of the method function of the process. */
-       private ArrayList<String> args = new ArrayList<>();
+       private ArrayList<String> args_ = new ArrayList<>();
 
        /**
         * Constructs a new process from the name of a host and his name. The method
@@ -116,16 +112,16 @@ public abstract class Process implements Runnable {
        public Process(Host host, String name, String[]args) 
        {
                if (host == null)
-                       throw new NullPointerException("Cannot create a process on the null host");
+                       throw new IllegalArgumentException("Cannot create a process on the null host");
                if (name == null)
-                       throw new NullPointerException("Process name cannot be null");
+                       throw new IllegalArgumentException("Process name cannot be null");
                
                this.host = host;
                this.name = name;
 
-               this.args = new ArrayList<>();
+               this.args_ = new ArrayList<>();
                if (null != args)
-                       this.args.addAll(Arrays.asList(args));
+                       this.args_.addAll(Arrays.asList(args));
        }
        /**
         * Constructs a new process from a host and his name, the arguments of here method function are
@@ -221,8 +217,13 @@ public abstract class Process implements Runnable {
         *
         */ 
        public int getPID()  {
+               if (pid == -1) // Don't traverse the JNI barrier if you already have the answer
+                       pid = nativeGetPID(); 
                return pid;
        }
+       // This should not be used: the PID is supposed to be initialized from the C directly when the actor is created,
+       // but this sometimes fail, so let's play nasty but safe here.
+       private native int nativeGetPID();
        /**
         * This method returns the PID of the parent of a process.
         *
@@ -284,11 +285,10 @@ public abstract class Process implements Runnable {
        /**
         * This method actually creates and run the process.
         * It is a noop if the process is already launched.
-        * @throws HostNotFoundException
         */
-       public final void start() throws HostNotFoundException {
-               if (bind == 0)
-                        create(host);
+       public final void start() {
+          if (bind == 0)
+            create(host);
        }
 
        /** This method runs the process. It calls the method function that you must overwrite. */
@@ -298,9 +298,9 @@ public abstract class Process implements Runnable {
                String[] args = null;      /* do not fill it before the signal or this.args will be empty */
 
                try {
-                       args = new String[this.args.size()];
-                       if (!this.args.isEmpty()) {
-                               this.args.toArray(args);
+                       args = new String[this.args_.size()];
+                       if (!this.args_.isEmpty()) {
+                               this.args_.toArray(args);
                        }
 
                        this.main(args);
@@ -316,7 +316,7 @@ public abstract class Process implements Runnable {
        }
 
        /**
-        * The main function of the process (to implement).
+        * The main function of the process (to implement by the user).
         *
         * @param args
         * @throws MsgException