Skip to content

Commit 9d83c5e

Browse files
author
mgricken
committed
Beginning to integrate HJ compiler from drjava-hj branch.
M plt/src/edu/rice/cs/plt/reflect/JavaVersion.java M eclipse/lib/plt.jar A + platform/src-hj A platform/src-hj/edu/rice/cs/drjava/model/compiler/descriptors A platform/src-hj/edu/rice/cs/drjava/model/compiler/descriptors/HjDescriptor.java A platform/classes/base-hj A platform/classes/base-hj/edu A platform/classes/base-hj/edu/rice A platform/classes/base-hj/edu/rice/cs A platform/classes/base-hj/edu/rice/cs/drjava A platform/classes/base-hj/edu/rice/cs/drjava/model A platform/classes/base-hj/edu/rice/cs/drjava/model/compiler AM platform/classes/base-hj/edu/rice/cs/drjava/model/compiler/HjCompiler.class AM platform/classes/base-hj/edu/rice/cs/drjava/model/compiler/HjCompiler$1.class AM platform/classes/base-hj/edu/rice/cs/drjava/model/compiler/HjCompiler$2.class AM platform/classes/base-hj/edu/rice/cs/drjava/model/compiler/HjCompiler$1$1.class M platform/build.xml M dynamicjava/lib/plt.jar M drjava/lib/platform.jar M drjava/lib/plt.jar M drjava/src/edu/rice/cs/drjava/model/JarJDKToolsLibrary.java M drjava/src/edu/rice/cs/drjava/model/compiler/descriptors/JDKDescriptor.java M javalanglevels/lib/plt.jar git-svn-id: file:///tmp/test-svn/branches/drjava-compilers@5339 fe72c1cf-3628-48e9-8b72-1c46755d3cff
1 parent e9b6b2f commit 9d83c5e

File tree

16 files changed

+637
-16
lines changed

16 files changed

+637
-16
lines changed

drjava/lib/platform.jar

8.28 KB
Binary file not shown.

drjava/lib/plt.jar

578 Bytes
Binary file not shown.

drjava/src/edu/rice/cs/drjava/model/JarJDKToolsLibrary.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,10 @@ else if (name.matches("\\d+\\.\\d+\\.\\d+")) {
287287
}
288288
current = current.getParentFile();
289289
} while (current != null && result == null);
290-
if (result == null || result.majorVersion().equals(JavaVersion.UNRECOGNIZED)) {
290+
System.out.println(f+" After walking directories: "+result);
291+
if (result == null || result.majorVersion().equals(JavaVersion.UNRECOGNIZED) ||
292+
result.majorVersion().equals(JavaVersion.FUTURE)) {
293+
System.out.println(f+" null or UNRECOGNIZED or FUTURE");
291294
JarFile jf = null;
292295
try {
293296
jf = new JarFile(f);
@@ -300,6 +303,23 @@ else if (name.matches("\\d+\\.\\d+\\.\\d+")) {
300303
result = JavaVersion.parseFullVersion(parsedVersion = v,vendor,vendor,f);
301304
}
302305
}
306+
307+
System.out.println(f+" After manifest: "+result);
308+
309+
// still unknown or future
310+
if (result == null || result.majorVersion().equals(JavaVersion.UNRECOGNIZED) ||
311+
result.majorVersion().equals(JavaVersion.FUTURE)) {
312+
System.out.println(f+" null or UNRECOGNIZED or FUTURE");
313+
// look for the first class file
314+
Enumeration<JarEntry> jes = jf.entries();
315+
while(jes.hasMoreElements()) {
316+
JarEntry je = jes.nextElement();
317+
if (je.getName().endsWith(".class")) {
318+
result = JavaVersion.parseClassVersion(jf.getInputStream(je)).fullVersion();
319+
break;
320+
}
321+
}
322+
}
303323
}
304324
catch(IOException ioe) { result = null; }
305325
finally {
@@ -308,12 +328,17 @@ else if (name.matches("\\d+\\.\\d+\\.\\d+")) {
308328
}
309329
catch(IOException ioe) { /* ignore, just trying to close the file */ }
310330
}
331+
332+
System.out.println(f+" After all: "+result);
333+
311334
if (result == null || result.majorVersion().equals(JavaVersion.UNRECOGNIZED)) {
312335
// Couldn't find a good version number, so we'll just guess that it's the currently-running version
313336
// Useful where the tools.jar file is in an unusual custom location
337+
System.out.println(f+" null or UNRECOGNIZED or FUTURE");
314338
result = JavaVersion.CURRENT_FULL;
315-
parsedVersion = result.versionString();
316339
}
340+
341+
parsedVersion = result.versionString();
317342
}
318343

319344
if ((result == null) || (result.vendor()==JavaVersion.VendorType.UNKNOWN)) {

drjava/src/edu/rice/cs/drjava/model/compiler/descriptors/JDKDescriptor.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.Set;
4343
import java.util.jar.JarFile;
4444
import edu.rice.cs.plt.reflect.JavaVersion;
45+
import edu.rice.cs.plt.iter.IterUtil;
4546

4647
/** A description of a JDK. */
4748
public interface JDKDescriptor {
@@ -131,5 +132,25 @@ else if (jarOrDir.isDirectory()) {
131132
}
132133
return false;
133134
}
135+
136+
/** Return the first of the file names that exists in the specified directory.
137+
* Throws FileNotFoundException if none of them exists.
138+
* @param jarOrDir jar file or directory
139+
* @param fileNames file names that need to exist
140+
* @return file name if found, or null
141+
* @throws FileNotFoundException if none of them exists.*/
142+
public static File oneOf(File dir, String... fileNames) throws FileNotFoundException {
143+
if (dir.isDirectory()) {
144+
for(String fn: fileNames) {
145+
File f = new File(dir,fn);
146+
if (f.exists()) return f;
147+
}
148+
throw new FileNotFoundException("None of "+IterUtil.toString(IterUtil.make(fileNames), "", ", ", "")+
149+
" found in "+dir);
150+
151+
}
152+
throw new FileNotFoundException(dir+" is not a directory");
153+
154+
}
134155
}
135156
}

dynamicjava/lib/plt.jar

578 Bytes
Binary file not shown.

eclipse/lib/plt.jar

2.61 KB
Binary file not shown.

javalanglevels/lib/plt.jar

578 Bytes
Binary file not shown.

platform/build.xml

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
<property name="openjdk6-home" value="${env.OPENJDK6_HOME}" />
4242
<property name="mint-home" value="${env.MINT_HOME}" />
4343
<property name="nextgen-home" value="${env.NGC_HOME}" />
44+
<property name="hj-home" value="${env.HJ_HOME}" />
4445

4546
<property name="is-development" value="yes" /> <!-- Development or stable release -->
4647
<property name="tag-append" value="" /> <!-- "stable", "beta", or none -->
@@ -88,6 +89,7 @@
8889
<echo message="OPENJDK6_HOME: Home folder of the OpenJDK 6" />
8990
<echo message="MINT_HOME: Home folder of the Mint distribution" />
9091
<echo message="NEXTGEN_HOME: Home folder of the NextGen distribution" />
92+
<echo message="HJ_HOME: Home folder of the Habanero Java distribution" />
9193
<echo message="" />
9294
<echo message="For control over the version of Java used to run Ant, set JAVA_HOME." />
9395
<echo message="Ant may also require ANT_HOME to be set. Note that the value of " />
@@ -200,6 +202,16 @@
200202
</antcall>
201203
</target>
202204

205+
<target name="compile-hj" depends="resolve-java5-runtime, resolve-hj-tools"
206+
description="Compile the 'hj' sources">
207+
<antcall target="do-compile">
208+
<param name="platform-tag" value="hj" />
209+
<param name="source-version" value="1.5" />
210+
<param name="runtime-jar" value="${java5-runtime}" />
211+
<param name="extra-classpath" value="${hj-tools}:${hj-home}/lib/sootclasses-2.3.0.jar" />
212+
</antcall>
213+
</target>
214+
203215
<target name="compile-eclipse" depends="resolve-java6-runtime, resolve-java6-tools, unjar-libs"
204216
description="Compile the 'eclipse' sources">
205217
<antcall target="do-compile">
@@ -367,8 +379,16 @@
367379
<antcall target="iterate-tests">
368380
<param name="platform-tag" value="nextgen" />
369381
<param name="extra-classpath" value="${nextgen-tools}" />
370-
<param name="test-jvm" value="${nextgen-exec}" /> <!-- TODO -->
371-
<!-- <param name="test-jvm" value="${java6-exec}" /> -->
382+
<param name="test-jvm" value="${nextgen-exec}" />
383+
</antcall>
384+
</target>
385+
386+
<target name="test-hj" depends="compile-hj, resolve-hj-tools"
387+
description="Run all 'mint' tests (after compiling); use -Dtest-spec=... to filter">
388+
<antcall target="iterate-tests">
389+
<param name="platform-tag" value="hj" />
390+
<param name="extra-classpath" value="${hj-tools}" />
391+
<param name="test-jvm" value="" />
372392
</antcall>
373393
</target>
374394

@@ -535,6 +555,7 @@
535555
<fileset dir="classes/base-openjdk6" />
536556
<fileset dir="classes/base-mint" />
537557
<fileset dir="classes/base-nextgen" />
558+
<fileset dir="classes/base-hj" />
538559
<fileset dir="classes/base-eclipse" />
539560
<fileset dir="classes/base-mac" />
540561
<fileset dir="classes/base-windows" />
@@ -554,6 +575,7 @@
554575
<fileset dir="classes/base-openjdk6" />
555576
<fileset dir="classes/base-mint" />
556577
<fileset dir="classes/base-nextgen" />
578+
<fileset dir="classes/base-hj" />
557579
<fileset dir="classes/base-eclipse" />
558580
<fileset dir="classes/base-mac" />
559581
<fileset dir="classes/base-windows" />
@@ -579,6 +601,7 @@
579601
<delete dir="classes/test-openjdk6" failonerror="${clean-can-fail}" />
580602
<delete dir="classes/test-mint" failonerror="${clean-can-fail}" />
581603
<delete dir="classes/test-nextgen" failonerror="${clean-can-fail}" />
604+
<delete dir="classes/test-hj" failonerror="${clean-can-fail}" />
582605
<delete dir="classes/test-eclipse" failonerror="${clean-can-fail}" />
583606
<delete dir="classes/test-mac" failonerror="${clean-can-fail}" />
584607
<delete dir="classes/test-windows" failonerror="${clean-can-fail}" />
@@ -1037,6 +1060,16 @@
10371060

10381061
<fail message="Can't find nextgen2.jar in the Nextgen home: ${nextgen-home}" unless="nextgen-tools" />
10391062
</target>
1063+
1064+
<target name="resolve-hj-tools">
1065+
<!-- We rely on "location" to generate a platform-specific path; note that properties
1066+
are immutable and so hj-tools will only be set the *first* time. -->
1067+
1068+
<property name="hj-tools-1" location="${hj-home}/lib/hj.jar" />
1069+
<available property="hj-tools" value="${hj-tools-1}" file="${hj-tools-1}" />
1070+
1071+
<fail message="Can't find hj.jar in the hj home: ${hj-home}" unless="hj-tools" />
1072+
</target>
10401073

10411074
<target name="assert-jar-exists">
10421075
<available property="jar-exists" file="${ant.project.name}.jar" />
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)