Skip to content

Commit b51ee00

Browse files
author
rcartwright
committed
This revision is a MAJOR refactoring of the language levels code base.
It supports only two language levels: functional Java (also called the intermediate leve) and full Java. The revised code base more closely conforms to this simple view of language levels but the test code still retains the Elementary/Intermediate/Advanced distinction because the refactored code base still provides legacy support for the Elementary, Intermediate, and Advanced language levels. Both Elementary and Intermediate legacy files are converted to functional Java files while Advanced legacy file are converted to full Java files. The conversion is permissive: the functional language level generalizes both the legacy Elementary and legacy Intermediate language level. Similarly, the full Java language generalizes the legacy Advanced language level. As far as we know, all old code (written in any language level) works unchanged in this refactored version. This refactoring contains a very large number of debugging output statements that will be commented out in the next commit. The following files were modified (I don't know why the Woah.class file was included): AM testFiles/fully/qualified/Woah.class A testFiles/fully/qualified/Woah.java M testFiles/forAdvancedLevelTest/ComplexAnonClassInstantiation.expected M testFiles/forAdvancedLevelTest/RefInnerClassCrazy.expected M testFiles/forAdvancedLevelTest/RefInnerClassCrazy.dj2 M testFiles/forAdvancedLevelTest/ComplexAnonClassInstantiation.dj2 M testFiles/forAdvancedLevelTest/RefInnerClassOfMethodWithinMethod.dj2 M testFiles/forAdvancedLevelTest/RefInnerClassOfMethodWithinMethod.expected M src/edu/rice/cs/javalanglevels/JExprParseException.java M src/edu/rice/cs/javalanglevels/IntermediateLevelTest.java M src/edu/rice/cs/javalanglevels/TypeChecker.java A src/edu/rice/cs/javalanglevels/SpecialTypeChecker.java M src/edu/rice/cs/javalanglevels/ArrayData.java M src/edu/rice/cs/javalanglevels/Data.java M src/edu/rice/cs/javalanglevels/MethodData.java M src/edu/rice/cs/javalanglevels/Symboltable.java M src/edu/rice/cs/javalanglevels/LValueTypeChecker.java M src/edu/rice/cs/javalanglevels/VariableData.java M src/edu/rice/cs/javalanglevels/BodyTypeChecker.java M src/edu/rice/cs/javalanglevels/PackageData.java M src/edu/rice/cs/javalanglevels/TryCatchBodyTypeChecker.java M src/edu/rice/cs/javalanglevels/BodyData.java M src/edu/rice/cs/javalanglevels/IntermediateVisitor.java M src/edu/rice/cs/javalanglevels/AdvancedLevelTest.java M src/edu/rice/cs/javalanglevels/InstanceData.java M src/edu/rice/cs/javalanglevels/SymbolData.java M src/edu/rice/cs/javalanglevels/Augmentor.java D src/edu/rice/cs/javalanglevels/Bob.java M src/edu/rice/cs/javalanglevels/LanguageLevelConverter.java M src/edu/rice/cs/javalanglevels/InterfaceBodyTypeChecker.java M src/edu/rice/cs/javalanglevels/LValueWithValueTypeChecker.java M src/edu/rice/cs/javalanglevels/ClassBodyTypeChecker.java M src/edu/rice/cs/javalanglevels/TypeData.java M src/edu/rice/cs/javalanglevels/SourceInfo.java A src/edu/rice/cs/javalanglevels/Command.java M src/edu/rice/cs/javalanglevels/BlockData.java A src/edu/rice/cs/javalanglevels/FullJavaVisitor.java M src/edu/rice/cs/javalanglevels/ExpressionTypeChecker.java M src/edu/rice/cs/javalanglevels/BodyBodyIntermediateVisitor.java M src/edu/rice/cs/javalanglevels/InterfaceBodyIntermediateVisitor.java M src/edu/rice/cs/javalanglevels/ConstructorBodyTypeChecker.java M src/edu/rice/cs/javalanglevels/LanguageLevelVisitor.java M src/edu/rice/cs/javalanglevels/Pair.java M src/edu/rice/cs/javalanglevels/util/Log.java M src/edu/rice/cs/javalanglevels/util/ScrollableDialog.java M src/edu/rice/cs/javalanglevels/util/BorderlessScrollPane.java M src/edu/rice/cs/javalanglevels/util/Utilities.java M src/edu/rice/cs/javalanglevels/ElementaryLevelTest.java M src/edu/rice/cs/javalanglevels/ClassBodyIntermediateVisitor.java M src/edu/rice/cs/javalanglevels/JExpressionIFPrunableDepthFirstVisitor.java git-svn-id: file:///tmp/test-svn/trunk@5389 fe72c1cf-3628-48e9-8b72-1c46755d3cff
1 parent 80f1de1 commit b51ee00

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+6129
-4740
lines changed

javalanglevels/src/edu/rice/cs/javalanglevels/AdvancedLevelTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,21 @@ public boolean accept(File pathName) {
8484
};
8585
}
8686

87-
/** Try some example files and make sure they can be converted without errors and that the resulting conversions are correct. */
87+
/** This ensures that setUp() is not failing. */
88+
public void testNothing() {
89+
LanguageLevelVisitor llv =
90+
new LanguageLevelVisitor(new File(""),
91+
"",
92+
null,
93+
new LinkedList<String>(),
94+
new LinkedList<String>(),
95+
new HashSet<String>(),
96+
new Hashtable<String, Triple<SourceInfo, LanguageLevelVisitor, SymbolData>>(),
97+
new LinkedList<Command>());
98+
}
99+
100+
/** Try some example files and make sure they can be converted without errors and that the resulting conversions are
101+
* correct. */
88102
public void testSuccessful() {
89103

90104
_log.log("Running testSuccessful");

javalanglevels/src/edu/rice/cs/javalanglevels/ArrayData.java

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,22 @@ public class ArrayData extends SymbolData {
5454
/**The type of the elements of this array. For example, int[] has an _elementType of int.*/
5555
private SymbolData _elementType;
5656

57-
/**
58-
* Creates a new ArrayData corresponding to the elementType sd.
59-
* @param sd The SymbolData element type.
60-
* @param llv The LanguageLevelVisitor who created this ArrayData.
61-
* @param si The SourceInfo corresponding to this ArrayData.
62-
*/
57+
/** Creates a new ArrayData corresponding to the elementType sd.
58+
* @param sd The SymbolData element type; may be a continuation
59+
* @param llv The LanguageLevelVisitor who created this ArrayData.
60+
* @param si The SourceInfo corresponding to this ArrayData.
61+
*/
6362
public ArrayData(SymbolData sd, LanguageLevelVisitor llv, SourceInfo si) {
6463
super(sd.getName() + "[]");
6564

6665
_elementType = sd;
6766

6867
// Arrays only have one field called length, and it is automatically given a value
6968
addVar(new VariableData("length",
70-
new ModifiersAndVisibility(SourceInfo.NO_INFO,
71-
new String[] {"public", "final"}),
72-
SymbolData.INT_TYPE, true, this));
73-
69+
new ModifiersAndVisibility(SourceInfo.NO_INFO, new String[] {"public", "final"}),
70+
SymbolData.INT_TYPE, true, this));
7471

75-
//All arrays are a subclass of Object
72+
// All arrays are a subclass of Object
7673
SymbolData object = llv.getSymbolData("java.lang.Object", si);
7774
setSuperClass(object);
7875

@@ -98,16 +95,14 @@ public ArrayData(SymbolData sd, LanguageLevelVisitor llv, SourceInfo si) {
9895
/** @return the package of the element type*/
9996
public String getPackage() { return _elementType.getPackage(); }
10097

101-
/*Set the package of the element type to be the specified package:
102-
* @param s The package to use*/
103-
public void setPackage(String s) {
104-
_elementType.setPackage(s);
105-
}
98+
/** Set the package of the element type to be the specified package:
99+
* @param s The package to use*/
100+
public void setPackage(String s) { _elementType.setPackage(s); }
106101

107102

108103
/* @return the ModifiersAndVisibility of the element type*/
109104
public ModifiersAndVisibility getMav() {
110-
if (_elementType.hasModifier("final")) { return _elementType.getMav(); }
105+
if (_elementType.hasModifier("final")) return _elementType.getMav();
111106
else {
112107
String[] elementMavs = _elementType.getMav().getModifiers();
113108
String[] newMavs = new String[elementMavs.length + 1];
@@ -118,43 +113,33 @@ public ModifiersAndVisibility getMav() {
118113
}
119114
}
120115

121-
/*Set the ModifiersAndVisibility of the element type to the specified value.
122-
* @param mv The ModifiersAndVisibility to use.*/
123-
public void setMav(ModifiersAndVisibility mv) {
124-
_elementType.setMav(mv);
125-
}
116+
/** Sets the ModifiersAndVisibility of the element type to the specified value.
117+
* @param mv The ModifiersAndVisibility to use. */
118+
public void setMav(ModifiersAndVisibility mv) { _elementType.setMav(mv); }
126119

127120
/** @return the SymbolData element type corresponding to the elements of this array.*/
128-
public SymbolData getElementType() {
129-
return _elementType;
130-
}
121+
public SymbolData getElementType() { return _elementType; }
131122

132-
/**Delegate to the outer data of your element type*/
133-
public Data getOuterData() {
134-
return _elementType.getOuterData();
135-
}
123+
/** Delegates to the outer data of your element type*/
124+
public Data getOuterData() { return _elementType.getOuterData(); }
136125

137-
/**
138-
* A Noop, because arrays shouldn't have outer data
139-
*/
126+
/** A Noop, because arrays shouldn't have outer data */
140127
public void setOuterData(Data outerData) {
141128
// _elementType.setOuterData(outerData);
142129
}
143-
144-
130+
145131
public boolean equals(Object obj) {
146-
if (this == obj) {return true;}
132+
if (this == obj) return true;
147133
if (obj == null) return false;
148-
if ((obj.getClass() != this.getClass())) { //|| (obj.hashCode() != this.hashCode())) {
149-
return false;
150-
}
134+
if (obj.getClass() != this.getClass()) return false;
135+
151136
ArrayData ad = (ArrayData) obj;
152137

153138
//For 2 array datas to be equal, all their symbolData fields must be equal, and their element types must be equal
154139
return super.equals(obj) && getElementType().equals(ad.getElementType());
155140
}
156141

157-
/** Provide a hashcode method that distinguishes between array datas based on name */
142+
/** Provides a hashcode method that distinguishes between array datas based on name */
158143
public int hashCode() { return getName().hashCode(); }
159144

160145
/** Returns true only under the following conditions:
@@ -252,11 +237,13 @@ public static class ArrayDataTest extends TestCase {
252237

253238
public void setUp() {
254239
llv = new LanguageLevelVisitor(new File(""),
255-
"",
240+
"",
241+
null,
256242
new LinkedList<String>(),
257243
new LinkedList<String>(),
258-
new LinkedList<String>(),
259-
new Hashtable<String, Pair<SourceInfo, LanguageLevelVisitor>>());
244+
new HashSet<String>(),
245+
new Hashtable<String, Triple<SourceInfo, LanguageLevelVisitor, SymbolData>>(),
246+
new LinkedList<Command>());
260247

261248
LanguageLevelConverter.symbolTable.clear();
262249
LanguageLevelConverter._newSDs.clear();

0 commit comments

Comments
 (0)