Package javax.tools.diagnostics.runtime.java

Examples of javax.tools.diagnostics.runtime.java.JavaClass


                Iterator frames = thd.getStackFrames().iterator();
                while(frames.hasNext()){
                  JavaStackFrame jStackFrame = (JavaStackFrame)frames.next();
                  JavaLocation jLocation = jStackFrame.getLocation();
                  JavaMethod jMethod = jLocation.getMethod();
                  JavaClass jClass = jMethod.getDeclaringClass();

                  if (getMethodId(refType, jMethod) == methodID && jClass.getID().getAddress() == refType){
                    int line = -1;
                    try{
                      line = jLocation.getLineNumber();
                    }
                    catch(CorruptDataException exxy){
                      logr.log(JDILogger.LEVEL_VERYVERBOSE, "  CorruptData for:"); //$NON-NLS-1$
                    }
                    catch(DataUnavailable exxy){
                      logr.log(JDILogger.LEVEL_VERYVERBOSE, "  DataUnavailable for:"); //$NON-NLS-1$
                    }


                    Vector<Byte> vctr = new Vector<Byte>();
                    if (line > 0){

                      int lowest = findLowestLineRef(refType, methodID) - 1;
                      int highest = findHighestLineRef(refType, methodID) + 1;
                      logr.log(JDILogger.LEVEL_VERYVERBOSE, "  (L)" + jClass.getName() + "." + jMethod.getName() + ":" + lowest + "<" + line + ">" + highest); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
                     
//                      //Code index start
//                      addLongToVector(vctr, lowest);
//                      //Code index end
//                      addLongToVector(vctr, highest);
//                      //Number of lines
//                      addIntToVector(vctr, highest - lowest);
//                      for(int i = lowest; i <= highest; i++){
//                        addLongToVector(vctr, i);
//                        addIntToVector(vctr, i);
//                      }
                     
                      //Code index start
                      addLongToVector(vctr, 0);
                      //Code index end
                      addLongToVector(vctr, 99999999); // TODO go through local variable tables looking for highest reference?
                      //Number of lines
                      addIntToVector(vctr, 1);
                      //for(int i = lowest; i <= highest; i++){
                        addLongToVector(vctr, jLocation.getAddress().getAddress()-1);
                        addIntToVector(vctr, jLocation.getLineNumber());
                      //}
                     
                     
                    }else{
                      logr.log(JDILogger.LEVEL_VERYVERBOSE, "  (N)" + jClass.getName() + "." + jMethod.getName() + ":" + line); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                      //Code index start
                      addLongToVector(vctr, -1);
                      //Code index end
                      addLongToVector(vctr, -1);
                      //Number of lines
                      //We're native right now.
                      addIntToVector(vctr, 0);
                    }
                    ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
                    rpckt.setData(vectorToByte(vctr));
                    return rpckt;
                  }
                }
              }
            }
          }
        }
      }
     
      Vector<Byte> vctr = new Vector<Byte>();
      addLongToVector(vctr, -1);
      //Code index end
      addLongToVector(vctr, -1);
      //Number of lines
      //We're native right now.
      addIntToVector(vctr, 0);
      ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
      rpckt.setData(vectorToByte(vctr));
      return rpckt;
    }else if (cpckt.getCommand() == 2){
      byte [] inData = cpckt.getByteData();
      long refType = createLongFromBytes(inData, 0, 8);
      long methodID = createLongFromBytes(inData, 8, 8);
      logr.log(JDILogger.LEVEL_VERBOSE, "Method.VariableTable(" + refType + "," + methodID + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      int slotsUsed = 0;
      Iterator asIt = image.getAddressSpaces( ).iterator();
      while ( asIt.hasNext( ) )
      {
        ImageAddressSpace as = (ImageAddressSpace) asIt.next( );
        Iterator prIt = as.getProcesses( ).iterator();

        while ( prIt.hasNext( ) )
        {
          ImageProcess process = (ImageProcess) prIt.next( );
          Iterator runTimesIt = process.getRuntimes( ).iterator();
          while ( runTimesIt.hasNext( ) )
          {
            JavaRuntime javaRT = (JavaRuntime) runTimesIt.next( );
            Iterator thds = javaRT.getThreads().iterator();
            while(thds.hasNext()){
              Object tmpobj = thds.next();
              if (tmpobj instanceof CorruptData){
                //ignore this thread
              }else{
                JavaThread thd = (JavaThread) tmpobj;
                Iterator frames = thd.getStackFrames().iterator();
                while(frames.hasNext()){
                  JavaStackFrame jStackFrame = (JavaStackFrame)frames.next();
                  JavaLocation jLocation = jStackFrame.getLocation();
                  JavaMethod jMethod = jLocation.getMethod();
                  JavaClass jClass = jMethod.getDeclaringClass();
                 
                 
                  if (getMethodId(refType, jMethod) == methodID && jClass.getID().getAddress() == refType){
                    Vector<Byte> vctr = new Vector<Byte>();

                    List vars = jMethod.getVariables();
                    String sig = jMethod.getSignature();
                   
View Full Code Here


   * @throws Exception
   */
  private JavaClass findClassByName(String name) throws Exception{
    Iterator<JavaClass> jClasses = classes.values().iterator();
    while(jClasses.hasNext()){
      JavaClass jClass = jClasses.next();
      if (name.equalsIgnoreCase(jClass.getName())){
        return jClass;
      }
    }
    return null;
  }
View Full Code Here

        JavaObject jObject = getObject(object);
        if (jObject != null){
          try{
            int refTypeTag = 1;

            JavaClass jClass = jObject.getJavaClass();
            if (jClass == null){

              Vector<Byte> vctr = new Vector<Byte>();
              vctr.add((byte)1);
              logr.logError(JDILogger.LEVEL_VERYVERBOSE, "  Cannot get class type, returning object instead"); //$NON-NLS-1$
              JavaClass jOutClass = findClassByName("java/lang/Object"); //$NON-NLS-1$

              addLongToVector(vctr, jOutClass.getID().getAddress());
              ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
              rpckt.setData(vectorToByte(vctr));
              logr.logError(JDILogger.LEVEL_VERYVERBOSE, "  Cannot get class type"); //$NON-NLS-1$
              return rpckt; 
            }
            long typeID = jObject.getJavaClass().getID().getAddress();
            if (!classes.containsKey(typeID)){
              logr.log(JDILogger.LEVEL_VERYVERBOSE, "  Client may not have classID");   //$NON-NLS-1$
            }
           

            if (jObject.isArray()){
              refTypeTag = 3;
            }else if(isInterface(typeID)){
              refTypeTag = 2;
            }
           
            logr.log(JDILogger.LEVEL_VERYVERBOSE, "  refTagType " + refTypeTag); //$NON-NLS-1$
            logr.log(JDILogger.LEVEL_VERYVERBOSE, "  name " + jObject.getJavaClass().getName() + "{"+jObject.getJavaClass().getID().getAddress()+"}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
           

            Vector<Byte> vctr = new Vector<Byte>();
            vctr.add((byte)refTypeTag);
            addLongToVector(vctr, typeID);
            ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
            rpckt.setData(vectorToByte(vctr));
            return rpckt;
          }catch(CorruptDataException exxy){
            logr.logError(JDILogger.LEVEL_VERBOSE, "  Corrupt data!"); //$NON-NLS-1$
            Vector<Byte> vctr = new Vector<Byte>();
            vctr.add((byte)1);
            JavaClass jClass = findClassByName("java/lang/Object"); //$NON-NLS-1$

            addLongToVector(vctr, jClass.getID().getAddress());
            ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
            exxy.printStackTrace(new PrintStream(logr.getErrorStream()));
            rpckt.setData(vectorToByte(vctr));
            return rpckt;           

          }
        }
      }else{

        JavaClass javaClass = getClass(object);
        if (javaClass != null){
          int refTypeTag = 1;
          long typeID = javaClass.getID().getAddress();

          Vector<Byte> vctr = new Vector<Byte>();
          vctr.add((byte)refTypeTag);
          addLongToVector(vctr, typeID);
          ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
          rpckt.setData(vectorToByte(vctr));
          return rpckt;
        }
       
        JavaObject jObject = getObject(object);
        if (jObject != null){
         
          // This is a copy from above, could be made into a method
         
         
          try{
            int refTypeTag = 1;

            JavaClass jClass = jObject.getJavaClass();
            if (jClass == null){
             
               logr.log(JDILogger.LEVEL_VERYVERBOSE, "Found the object the slow route");
              Vector<Byte> vctr = new Vector<Byte>();
              vctr.add((byte)1);
              JavaClass jOutClass = findClassByName("java/lang/Object"); //$NON-NLS-1$

              addLongToVector(vctr, jOutClass.getID().getAddress());
              ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
              rpckt.setData(vectorToByte(vctr));
              logr.logError(JDILogger.LEVEL_VERYVERBOSE, "  Cannot get class type"); //$NON-NLS-1$
              return rpckt; 
            }
            long typeID = jObject.getJavaClass().getID().getAddress();
            if (!classes.containsKey(typeID)){
              logr.log(JDILogger.LEVEL_VERYVERBOSE, "  Client may not have classID");   //$NON-NLS-1$
            }
           
            if (jObject.isArray()){
              refTypeTag = 3;
            }else if(isInterface(typeID)){
              refTypeTag = 2;
            }
           
            logr.log(JDILogger.LEVEL_VERYVERBOSE, "  refTagType " + refTypeTag); //$NON-NLS-1$
            logr.log(JDILogger.LEVEL_VERYVERBOSE, "  name " + jObject.getJavaClass().getName() + "{"+jObject.getJavaClass().getID().getAddress()+"}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$


            Vector<Byte> vctr = new Vector<Byte>();
            vctr.add((byte)refTypeTag);
            addLongToVector(vctr, typeID);
            ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
            rpckt.setData(vectorToByte(vctr));
            return rpckt;
          }catch(CorruptDataException exxy){
            logr.logError(JDILogger.LEVEL_VERBOSE, "  Corrupt data!"); //$NON-NLS-1$
            Vector<Byte> vctr = new Vector<Byte>();
            vctr.add((byte)1);
            JavaClass jClass = findClassByName("java/lang/Object"); //$NON-NLS-1$

            addLongToVector(vctr, jClass.getID().getAddress());
            ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
            exxy.printStackTrace(new PrintStream(logr.getErrorStream()));
            rpckt.setData(vectorToByte(vctr));
            return rpckt;           

          }
       
        }
      }

      logr.log(JDILogger.LEVEL_VERYVERBOSE, "No matches"); //$NON-NLS-1$
      ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_INVALID_OBJECT);
      return rpckt;
    }else if (cpckt.getCommand() == 2){
      byte [] inData = cpckt.getByteData();
      long object = createLongFromBytes(inData, 0, 8);
      int fields = createIntFromBytes(inData, 8, 4);
      logr.log(JDILogger.LEVEL_VERBOSE, "ObjectReference.GetValues(" + object + "," + fields + ",...)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      Vector<Byte> vctr = new Vector<Byte>();
      addIntToVector(vctr, fields);
      for (int i = 0; i < fields; i++){
        long fieldID = createLongFromBytes(inData, 12 + (8*i), 8);
        if (objectMap.containsKey(object)){
          logr.log(JDILogger.LEVEL_VERYVERBOSE, "  O:" + fieldID); //$NON-NLS-1$
          if (!getFieldFromObject(vctr, object, fieldID)){
            logr.log(JDILogger.LEVEL_VERYVERBOSE, "  O:" + fieldID+" Invalid Object/Field"); //$NON-NLS-1$
            ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_INVALID_OBJECT);
            return rpckt;

          }

        }else{
          logr.log(JDILogger.LEVEL_VERYVERBOSE, "  C:" + fieldID); //$NON-NLS-1$
          if (!getFieldFromClass(vctr, object, fieldID)){
            logr.log(JDILogger.LEVEL_VERYVERBOSE, "  O:" + fieldID+" Invalid Object/Field"); //$NON-NLS-1$
            ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_INVALID_OBJECT);
            return rpckt;
          }
        }
      }
      ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
      rpckt.setData(vectorToByte(vctr));
      return rpckt;

    }else if (cpckt.getCommand() == 5){
      // Monitor information, assume JNIEnv is the same as threadID...
      byte[] inData = cpckt.getByteData();
      long object = createLongFromBytes(inData, 0, 8);
      Vector<Byte> vctr = new Vector<Byte>();
      JavaMonitor jm = null;
      logr.log(JDILogger.LEVEL_VERBOSE,"ObjectReference.MonitorInfo("+object+")");
      if ((jm = monitorMap.get(objectMap))!= null){
        JavaThread owningThread = jm.getOwner();
       
        if (owningThread != null){
          addLongToVector(vctr, owningThread.getJNIEnv().getAddress());
        }else{
          addLongToVector(vctr, 0);
        }
        addIntToVector(vctr, 1);
        addIntToVector(vctr, jm.getEnterWaiters().size());
        for (JavaThread thr : jm.getEnterWaiters()){
          addLongToVector(vctr, thr.getJNIEnv().getAddress());
        }
        logr.log(JDILogger.LEVEL_VERYVERBOSE,"  "+jm.getEnterWaiters().size()+" waiting and owner is "+owningThread);
      }else{
        addLongToVector(vctr, 0);
        addIntToVector(vctr, 0);
        addIntToVector(vctr, 0);
        logr.log(JDILogger.LEVEL_VERYVERBOSE,"  no monitor information");
      }
      ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
      rpckt.setData(vectorToByte(vctr));
      return rpckt;
     
    }else if (cpckt.getCommand() == 6){
      byte [] inData = cpckt.getByteData();
      long object = createLongFromBytes(inData, 0, 8);
      long thread = createLongFromBytes(inData, 8, 8);
      long clazz = createLongFromBytes(inData, 16, 8);
      long method = createLongFromBytes(inData, 24, 8);
      int arguments = createIntFromBytes(inData, 32, 4);
      Vector<Byte> vctr = new Vector<Byte>();
      logr.log(JDILogger.LEVEL_VERBOSE, "ObjectReference.InvokeMethod(" + object + "," + thread + ","+clazz+","+method+","+arguments+",...)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
      if (!isClass(object)){
        JavaObject jObject = getObject(object);
        if (jObject != null){
          //
          JavaClass jClass = jObject.getJavaClass();
          logr.log(JDILogger.LEVEL_VERYVERBOSE, "  object: " + jClass.getName() + ">>" + jObject.getJavaClass().getName()); //$NON-NLS-1$ //$NON-NLS-2$
          vctr.add((byte)'s');
          this.vctrs.put(jObject.getID().getAddress(), jObject.getJavaClass().getName());
          addLongToVector(vctr, jObject.getID().getAddress());
          vctr.add((byte)0);
        }

      }else{

        JavaClass javaClass = getClass(clazz);
        if (javaClass != null){
          logr.log(JDILogger.LEVEL_VERYVERBOSE, "  class: " + javaClass.getName()); //$NON-NLS-1$

          vctr.add((byte)'s');

          this.vctrs.put(javaClass.getID().getAddress(), javaClass.getName());
          addLongToVector(vctr, javaClass.getID().getAddress());
          vctr.add((byte)0);

        }


View Full Code Here

                        JavaLocation jLoc = jStackFrame.getLocation();

                        JavaMethod jMethod = jLoc.getMethod();

                        JavaClass jClass = jMethod.getDeclaringClass();

                        if (jClass.isArray()){
                          vctr.add((byte)3);
                        }else if(isInterface(jClass.getID().getAddress())){
                          vctr.add((byte)2);
                        }else{
                          vctr.add((byte)1);
                        }

                        addLongToVector(vctr, jClass.getID().getAddress());
                        addLongToVector(vctr, getMethodId(jClass.getID().getAddress(), jMethod));

                        //This is the current memory address.
                        addLongToVector(vctr, jLoc.getAddress().getAddress());
                        try{
                          logr.log(JDILogger.LEVEL_VERYVERBOSE, "  " + jLoc.getFilename() + "@" + jLoc.getMethod().getDeclaringClass().getName() + "{"+jLoc.getMethod().getDeclaringClass().getID().getAddress()+"}." + jLoc.getMethod().getName() + "{"+getMethodId(jClass.getID().getAddress(), jLoc.getMethod())+"}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
                          try{
                            logr.log(JDILogger.LEVEL_VERYVERBOSE, "    :" + jLoc.getLineNumber()); //$NON-NLS-1$
                          }catch(Exception exxy){
                          }

                        }catch (Exception exxy){}
                        count++;
                      }
                    }else{
                      if (currentFrame >= startFrame){
                        JavaStackFrame jStackFrame = (JavaStackFrame)frames.next();
                        addLongToVector(vctr, jStackFrame.getBasePointer().getAddress());

                        JavaLocation jLoc = jStackFrame.getLocation();

                        JavaMethod jMethod = jLoc.getMethod();

                        JavaClass jClass = jMethod.getDeclaringClass();
                        if (jClass.isArray()){
                          vctr.add((byte)3);
                        }else if(isInterface(jClass.getID().getAddress())){
                          vctr.add((byte)2);
                        }else{
                          vctr.add((byte)1);
                        }

                        addLongToVector(vctr, jClass.getID().getAddress());
                        addLongToVector(vctr, getMethodId(jClass.getID().getAddress(), jMethod));

                        //Location is 8 bytes (2 ints)
                        //We pad with 4 bytes of zeros
                        try{
                          addLongToVector(vctr, jLoc.getAddress().getAddress());
                        }
                        catch(Exception exxy){
                          addLongToVector(vctr, -1);
                        }
                        try{
                          logr.log(JDILogger.LEVEL_VERYVERBOSE, "  " + jLoc.getFilename() + "@" + jLoc.getMethod().getDeclaringClass().getName() + "{"+jLoc.getMethod().getDeclaringClass().getID().getAddress()+"}." + jLoc.getMethod().getName() + "{"+getMethodId(jClass.getID().getAddress(),jLoc.getMethod())+"}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
                          try{
                            logr.log(JDILogger.LEVEL_VERYVERBOSE, "    :" + jLoc.getLineNumber()); //$NON-NLS-1$
                          }catch(Exception exxy){
                          }
View Full Code Here

        DataUnavailable {
          return JavaClassImpl.this;
        }
   
    String getStringFromJavaObject(JavaObject obj) throws CorruptDataException, MemoryAccessException {
      JavaClass clazz = obj.getJavaClass();
      JavaObject value=null;
      int offset=0;
      int count=0;
      boolean valueSet = false, offsetSet = false, countSet=false;
     
      Iterator iter = clazz.getDeclaredFields().iterator();
     
      while (iter.hasNext()) {
        JavaField field = (JavaField) iter.next();
        String name = field.getName();
        if("value".equals(name)) {
View Full Code Here

  public JavaClass getPrimitiveArrayClass(short type) {
    if (type <4 || type > 11) {
      throw new IllegalArgumentException("Passed invalid basic type id "+type);
    }
   
    JavaClass clazz = primitiveArrayClasses[type-4];
   
    if(clazz == null) {
      IJavaClass viewClass = view.getPrimitiveArrayClass(type);
     
      if (viewClass != null) {
View Full Code Here

      while (objects.hasNext()) {
        Object next = objects.next();
       
        if (next instanceof JavaObjectInstanceImpl) {
          try {
            JavaClass clazz = ((JavaObject) next).getJavaClass();
           
            while(clazz != null) {
              if ("java/lang/ClassLoader".equals(clazz.getName()) ) {
                JavaObjectInstanceImpl obj = (JavaObjectInstanceImpl) next;
                long id = obj.getObjectID();
               
                if (javaClassLoaders.get(id) == null) {
                  javaClassLoaders.put(id, new JavaClassLoaderImpl(this, new EmptyClassLoaderImpl(id)));
                }
              }
             
              clazz = clazz.getSuperclass();
            }
          } catch (CorruptDataException e) {
            e.printStackTrace();
          }
         
View Full Code Here

          JavaClassLoader jcl = (JavaClassLoader)itJavaClassLoader.next();
          Iterator itJavaClass = jcl.getDefinedClasses().iterator();
         
          while (itJavaClass.hasNext())
          {
            JavaClass jc = (JavaClass)itJavaClass.next();
            Iterator itJavaMethod = jc.getDeclaredMethods().iterator();
           
            String jcName;
            try {
              jcName = jc.getName();
            } catch (CorruptDataException e) {
              jcName = Exceptions.getCorruptDataExceptionString();
            }
           
            while (itJavaMethod.hasNext())
View Full Code Here

    }

    public void visit(JavaRuntime runtime) throws DiagnosticException {
      int thisRuntime = runtimeNum++;
     
      JavaClass systemClass = KatoSearch.findClass(runtime, "java/lang/System");
      Properties properties = new Properties();
     
      if (systemClass != null) {
        try{
          JavaField props = KatoSearch.getField(systemClass, "props");
          if (props == null) {
            return;
          }
          JavaObject systemProperties = (JavaObject) props.get(null);
          if (systemProperties == null) {
            return;
          }
          JavaClass propertyClass = systemProperties.getJavaClass();
          JavaField tableField = KatoSearch.getField(propertyClass,"table");
          JavaObject table = (JavaObject) tableField.get(systemProperties);

          JavaClass entryClass = KatoSearch.findClass(runtime, "java/util/Hashtable$Entry");
          if (entryClass == null) {
            System.err.println("Couldn't find Entry class");
            return;
          }
View Full Code Here

  {
    JavaObject classObject = thisJavaClass.getObject();
   
    //Protection domain hangs off the protectionDomain field on the class object
    if(_protectionDomainField == null) {
      JavaClass javaLangClassObject = classObject.getJavaClass();
      if(javaLangClassObject == null) {
        _numberOfErrors++;
        reportError("Couldn't find java.lang.Class class",null);
        return;
      }
      Iterator fieldsIt = javaLangClassObject.getDeclaredFields().iterator();
     
      while(fieldsIt.hasNext()) {
        Object potential = fieldsIt.next();
       
        if(potential instanceof JavaField) {
View Full Code Here

TOP

Related Classes of javax.tools.diagnostics.runtime.java.JavaClass

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.