codesimian
Class GetJavaCompiler

java.lang.Object
  extended by codesimian.CS<CSGeneric>
      extended by codesimian.DefaultCS
          extended by codesimian.GetJavaCompiler
All Implemented Interfaces:
CodeSimian

public class GetJavaCompiler
extends DefaultCS

Returns 1 if created a working Java compiler and saved it into P(0), or returns 0 if could not do that. If it returns 0, an error string may be saved into P(0).

example: getJavaCompiler(replaceMeWithCompiler)

example compiler: defaultWindowsJavaCompiler(replaceMeWithJarBytes inputZipBytes optionalFolderPath)

When executed, tries to find a CS: whose P(1) is where you put the bytes of a ZIP file, and whose P(0) becomes a byte[] array that can be interpreted with a JarInputStream because it is a JAR file of compiled code. Optionally its P(2) is hard drive location to unzip, compile, and zip the code, if necessary.

If it can not find a Java compiler capable of creating a new CodeSimian.jar, then it should ask the Human user to type some code to connect codesimian to a Java compiler, and if necessary to search for and download JDK 1.5 from the internet and tell the user to install it.

Currently it only tries to create a DefaultJavaCompiler and returns 1 if it created it, else 0. It ???works on Windows XP, but probably not many other operating-systems. This needs to be fixed.

DO THIS ASAP: Move P(0) to P(2) and when this GetJavaCompiler is executed, execute the compiler in P(2) and copy its input zip and output jar (in its first 2 indexs) to my first 2 indexs. That would make GetJavaCompiler be a valid codesimian compiler because P(1) is input and P(0) is output.

ADD JAVASSIST TO CODESIMIAN:
The software Javassist might be a good enough replacement for a Java compiler. Its files could be copied into CodeSimian.jar and modify Java class files without using the local filesystem. Using the local filesystem to access a compiler often does not work and is bad program design if you can avoid it.


Nested Class Summary
static class GetJavaCompiler.JavaCompilerNotFoundException
           
 
Field Summary
 boolean askHumanToDownloadAndInstallJDKIfHumanCantFindCompiler
          later, should give codesimian the ability to search the internet for JDK 1.5 and download and install it automaticly
 boolean askHumanToFindCompilerIfNoCompilerFound
          search only the local computer for a java compiler, which is necessary to update CodeSimian's .class files
 
Fields inherited from class codesimian.CS
DESCRIPTION, END, EXECPROXY, HEAP, JAVACODE, MYFUEL, NAME, NEWINSTANCE, NULL, PARENT, PARSEPRIORITY, PREV, TESTER, THIS
 
Constructor Summary
GetJavaCompiler()
           
 
Method Summary
 java.lang.String description()
          a short description of this CS, shorter than the javadoc, but long enough to tell what the params are for.
 double DForProxy()
          Execute this CS and cast to double.
static java.lang.String javaVersionSubstringOrNull(java.lang.String containsJavaVersion)
          returns something like "1.5.0" or null if cant find a version in the string.
 java.lang.String keyword()
          For the CodeSimian language as a String.
CodeSimian language keyword, like "+" "*" "max" ">" etc.

Override this function if you want to specify a keyword other than how I derive them from the class name, like + for Add.

Some CSs might never be intended to be used in the language by their keyword.
The best example (4/05) is Num, because it is used in the language like "3.4" instead of "num()".
static java.lang.String minJavaVersionForCodesimian()
          codesimian needs version or above
 int minP()
          For DForProxy().
Minimum number of parameters in param[] needed to call DForProxy().
Defines which indexs of param[] DForProxy() can use.
Functions with a different number of parameters must override this.
OVERRIDE THIS FUNCTION IF EXEC USES A DIFFERENT NUMBER OF PARAMETERS.
Default is 1.
static java.lang.String tempFolderName(java.lang.String prefix, java.lang.String suffix)
          returns a folder name that does not exist and has a random number in the middle
static int versionStrCompare(java.lang.String verA, java.lang.String verB)
          returns 1 if verAverB
static int[] versionStringToIntsOrNull(java.lang.String s)
          returns new int[]{1,5,0} for "1.5.0" or null if its not a version string
 
Methods inherited from class codesimian.DefaultCS
B, C, countP, decrementMyFuel, deleteP, F, fuel, getExec, getObject, heap, I, indexP, indexPName, insertB, insertC, insertD, insertF, insertI, insertJ, insertL, insertL, insertL1, insertP, insertS, insertZ, J, javaCode, LForProxy, LForProxy, myFuel, name, newInstance, objectToCS, objectToCSArray, objectToCSArray, P, prevD, prevL, PType, S, setB, setC, setCountP, setD, setD, setExec, setF, setFuel, setI, setJ, setL, setL, setL, setL1, setMyFuel, setName, setObject, setP, setPrevExec, setPType, setS, setZ, start, toString, V, Z
 
Methods inherited from class codesimian.CS
addB, addC, addD, addF, addI, addJ, addL, addP, addP, addP, addP, addP, addS, addZ, BForProxy, CForProxy, clone, cost, D, deleteP, FForProxy, GETB, GETC, GETD, GETF, GETI, GETJ, GETL, GETS, GETZ, IForProxy, isIllusion, JForProxy, L, L, L, L, L, maxD, maxP, minD, overwrites, parent, parsePriority, PB, PC, PD, PF, PI, PJ, PL, prevB, prevC, prevF, prevI, prevJ, prevS, prevZ, proxyOf, PS, PZ, reflect, reflect, reflect6, setB, SETB, setC, SETC, setCost, SETD, setDescription, setF, SETF, setHeap, setI, SETI, setJ, SETJ, SETL, setL, setL, setParent, setParsePriority, setProxyOf, setS, SETS, setTester, setZ, SETZ, SForProxy, tester, toJavaCode, VForProxy, voidReflect, ZForProxy
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

askHumanToFindCompilerIfNoCompilerFound

public boolean askHumanToFindCompilerIfNoCompilerFound
search only the local computer for a java compiler, which is necessary to update CodeSimian's .class files


askHumanToDownloadAndInstallJDKIfHumanCantFindCompiler

public boolean askHumanToDownloadAndInstallJDKIfHumanCantFindCompiler
later, should give codesimian the ability to search the internet for JDK 1.5 and download and install it automaticly

Constructor Detail

GetJavaCompiler

public GetJavaCompiler()
Method Detail

DForProxy

public double DForProxy()
Description copied from class: CS
Execute this CS and cast to double.

D() and DForProxy() are the 2 most important functions in CS. They execute this CS. All other execute functions, by default, return DForProxy cast to their own type.

For example, J() calls the proxy which calls JForProxy() which calls DForProxy(). D() calls the proxy which calls DForProxy().

By default, all other primitive EXECUTE functions defer to D.
Functions that EXECUTE this CS: L(Class) L(int,Class,int) Z() B() C() S() I() J() F() D() V()

Specified by:
DForProxy in class DefaultCS

minP

public int minP()
Description copied from class: DefaultCS
For DForProxy().
Minimum number of parameters in param[] needed to call DForProxy().
Defines which indexs of param[] DForProxy() can use.
Functions with a different number of parameters must override this.
OVERRIDE THIS FUNCTION IF EXEC USES A DIFFERENT NUMBER OF PARAMETERS.
Default is 1.

Overrides:
minP in class DefaultCS

keyword

public java.lang.String keyword()
Description copied from class: DefaultCS
For the CodeSimian language as a String.
CodeSimian language keyword, like "+" "*" "max" ">" etc.

Override this function if you want to specify a keyword other than how I derive them from the class name, like + for Add.

Some CSs might never be intended to be used in the language by their keyword.
The best example (4/05) is Num, because it is used in the language like "3.4" instead of "num()".
Default: Returns class name, minus package name (and its dots), and change the first letter to lowercase.

For example, CS.MaxParams does not override keyword(), which returns "maxP".

Overrides:
keyword in class DefaultCS
See Also:
CS.parent(), CS.newInstance(), CS.name()

description

public java.lang.String description()
Description copied from class: CS
a short description of this CS, shorter than the javadoc, but long enough to tell what the params are for. Example use: in automatically generated webpages for CodeSimian. Example: "returns sum of all params" for Add.

Overrides:
description in class DefaultCS

minJavaVersionForCodesimian

public static java.lang.String minJavaVersionForCodesimian()
codesimian needs version or above


versionStrCompare

public static int versionStrCompare(java.lang.String verA,
                                    java.lang.String verB)
returns 1 if verAverB


javaVersionSubstringOrNull

public static java.lang.String javaVersionSubstringOrNull(java.lang.String containsJavaVersion)
returns something like "1.5.0" or null if cant find a version in the string. TODO: use natural language neural net to find which numbers are most likely to be a java version.


versionStringToIntsOrNull

public static int[] versionStringToIntsOrNull(java.lang.String s)
returns new int[]{1,5,0} for "1.5.0" or null if its not a version string


tempFolderName

public static java.lang.String tempFolderName(java.lang.String prefix,
                                              java.lang.String suffix)
returns a folder name that does not exist and has a random number in the middle