forked from JavaTX/JavaCompilerCore
Problem mit der Umwandlung von generischen Variablen zu TPH behoben (noch nicht vollständig)
This commit is contained in:
parent
7abb1f8ad6
commit
d636d29ab5
@ -85,7 +85,7 @@ class EvalVisitor extends Java8BaseVisitor<SyntaxTreeNode> {
|
||||
|
||||
@Override
|
||||
public GenericTypeVar visitTypeParameter(TypeParameterContext ctx) {
|
||||
GenericTypeVar ret = new GenericTypeVar(name, parent, offset);
|
||||
GenericTypeVar ret = null;//new GenericTypeVar(name, parent, offset);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -15,11 +15,15 @@ import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import de.dhbwstuttgart.myexception.JVMCodeException;
|
||||
import de.dhbwstuttgart.parser.JavaClassName;
|
||||
import de.dhbwstuttgart.syntaxtree.Interface;
|
||||
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
|
||||
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
|
||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
||||
import de.dhbwstuttgart.syntaxtree.type.Type;
|
||||
|
||||
// ino.class.AClassOrInterface.21186.description type=javadoc
|
||||
/**
|
||||
@ -37,8 +41,8 @@ public interface AClassOrInterface
|
||||
{
|
||||
|
||||
public JavaClassName getName();
|
||||
public Vector<Interface> getSuperInterfaces();
|
||||
public void setSuperInterfaces(Vector<Interface> vector);
|
||||
public Vector<Type> getSuperInterfaces();
|
||||
public void setSuperInterfaces(Vector<Type> vector);
|
||||
|
||||
/*
|
||||
// ino.attribute.inferencelog.21189.decldescription type=javadoc
|
||||
|
@ -7,6 +7,8 @@ import java.util.Vector;
|
||||
|
||||
import de.dhbwstuttgart.syntaxtree.Interface;
|
||||
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
|
||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
||||
import de.dhbwstuttgart.syntaxtree.type.Type;
|
||||
|
||||
// ino.class.InterfaceList.24383.description type=javadoc
|
||||
/**
|
||||
@ -36,13 +38,13 @@ public class InterfaceList
|
||||
// ino.end
|
||||
|
||||
// ino.method.getVector.24392.definition
|
||||
public Vector<Interface> getVector()
|
||||
public Vector<Type> getTypeVector()
|
||||
// ino.end
|
||||
// ino.method.getVector.24392.body
|
||||
{
|
||||
Vector<Interface> ret = new Vector<>();
|
||||
Vector<Type> ret = new Vector<>();
|
||||
for(UsedId name : superif){
|
||||
ret.add(new Interface(name.get_Name_1Element(), name.getOffset()));
|
||||
ret.add(new Interface(name.get_Name_1Element(), name.getOffset()).getType());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -281,8 +281,8 @@ public Vector<Pair> testPair = new Vector<Pair>();
|
||||
//t "fielddeclarator : variabledeclarator '=' expression",
|
||||
//t "fielddeclarator : variabledeclarator",
|
||||
//t "genericdeclarationlist : '<' boundedMethodParameters '>'",
|
||||
//t "fielddeclaration : fielddeclarator ';'",
|
||||
//t "fielddeclaration : type fielddeclarator ';'",
|
||||
//t "fielddeclaration : fielddeclarator ';'",
|
||||
//t "fielddeclaration : genericdeclarationlist type fielddeclarator ';'",
|
||||
//t "fielddeclaration : variabledeclarators ';'",
|
||||
//t "fielddeclaration : type variabledeclarators ';'",
|
||||
@ -833,7 +833,7 @@ case 20:
|
||||
/* Vector<UsedId> SuperInterfaces, */
|
||||
/* Vector<Type> Parameterliste*/
|
||||
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, usedIdsToCheck, null, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -841,7 +841,7 @@ case 20:
|
||||
case 21:
|
||||
// line 376 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes,usedIdsToCheck, null, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-1+yyTop]).getName(), ((Modifiers)yyVals[-3+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, null, ((ClassAndParameter)yyVals[-1+yyTop]).getParaVector(), ((Token)yyVals[-2+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -849,7 +849,7 @@ case 21:
|
||||
case 22:
|
||||
// line 382 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes,usedIdsToCheck, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -857,7 +857,7 @@ case 22:
|
||||
case 23:
|
||||
// line 388 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, usedIdsToCheck, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-1+yyTop]), null, ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -865,7 +865,7 @@ case 23:
|
||||
case 24:
|
||||
// line 395 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, usedIdsToCheck, null, ((InterfaceList)yyVals[-1+yyTop]).getVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -873,7 +873,7 @@ case 24:
|
||||
case 25:
|
||||
// line 401 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, usedIdsToCheck, null, ((InterfaceList)yyVals[-1+yyTop]).getVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-2+yyTop]).getName(), ((Modifiers)yyVals[-4+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-2+yyTop]).getParaVector(), ((Token)yyVals[-3+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -881,7 +881,7 @@ case 25:
|
||||
case 26:
|
||||
// line 407 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes,usedIdsToCheck, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), null, ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -889,7 +889,7 @@ case 26:
|
||||
case 27:
|
||||
// line 413 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), ((Modifiers)yyVals[-5+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, usedIdsToCheck, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset());
|
||||
yyVal = new Class(((ClassAndParameter)yyVals[-3+yyTop]).getName(), ((Modifiers)yyVals[-5+yyTop]), ((ClassBody)yyVals[0+yyTop]), containedTypes, ((UsedId)yyVals[-2+yyTop]), ((InterfaceList)yyVals[-1+yyTop]).getTypeVector(), ((ClassAndParameter)yyVals[-3+yyTop]).getParaVector(), ((Token)yyVals[-4+yyTop]).getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -1396,13 +1396,13 @@ case 89:
|
||||
case 90:
|
||||
// line 854 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop]));
|
||||
yyVal=((FieldDeclaration)yyVals[-1+yyTop]);
|
||||
}
|
||||
break;
|
||||
case 91:
|
||||
// line 858 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
// line 859 "./../src/de/dhbwstuttgart/parser/JavaParser.jay"
|
||||
{
|
||||
((FieldDeclaration)yyVals[-1+yyTop]).setType(((Type)yyVals[-2+yyTop]));
|
||||
yyVal=((FieldDeclaration)yyVals[-1+yyTop]);
|
||||
}
|
||||
break;
|
||||
@ -3209,8 +3209,8 @@ case 289:
|
||||
3, 2, 3, 2, 3, 1, 2, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
|
||||
2, 1, 3, 3, 1, 0, 3, 1, 1, 1,
|
||||
1, 2, 2, 3, 6, 2, 3, 1, 3, 2,
|
||||
3, 4, 2, 3, 4, 2, 2, 3, 3, 4,
|
||||
1, 2, 2, 3, 6, 2, 3, 1, 3, 3,
|
||||
2, 4, 2, 3, 4, 2, 2, 3, 3, 4,
|
||||
2, 3, 3, 4, 2, 1, 1, 3, 1, 3,
|
||||
1, 3, 1, 3, 3, 2, 3, 4, 3, 4,
|
||||
4, 5, 2, 3, 3, 4, 3, 4, 4, 5,
|
||||
@ -3248,7 +3248,7 @@ case 289:
|
||||
34, 0, 0, 0, 77, 21, 0, 0, 33, 0,
|
||||
0, 0, 31, 0, 82, 0, 0, 0, 113, 0,
|
||||
0, 132, 0, 142, 96, 0, 134, 46, 57, 0,
|
||||
93, 90, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
93, 91, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 83, 26, 51, 29, 53, 66,
|
||||
0, 86, 0, 55, 43, 44, 73, 74, 23, 0,
|
||||
25, 35, 111, 0, 108, 0, 0, 0, 254, 0,
|
||||
@ -3261,7 +3261,7 @@ case 289:
|
||||
165, 141, 0, 0, 0, 0, 0, 0, 0, 245,
|
||||
286, 0, 0, 276, 0, 0, 0, 0, 0, 0,
|
||||
0, 194, 173, 87, 241, 242, 248, 249, 174, 195,
|
||||
255, 259, 99, 0, 119, 94, 91, 0, 0, 0,
|
||||
255, 259, 99, 0, 119, 94, 90, 0, 0, 0,
|
||||
135, 0, 0, 84, 0, 101, 0, 0, 0, 27,
|
||||
0, 0, 0, 198, 0, 0, 0, 229, 230, 219,
|
||||
0, 0, 0, 98, 144, 167, 216, 0, 0, 231,
|
||||
|
@ -368,50 +368,50 @@ classdeclaration : CLASS classidentifier classbody
|
||||
// Vector<UsedId> SuperInterfaces,
|
||||
// Vector<Type> Parameterliste
|
||||
|
||||
$$ = new Class($2.getName(), null, $3, containedTypes, usedIdsToCheck, null, null, $2.getParaVector(), $1.getOffset());
|
||||
$$ = new Class($2.getName(), null, $3, containedTypes, null, $2.getParaVector(), $1.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
| modifiers CLASS classidentifier classbody
|
||||
{
|
||||
$$ = new Class($3.getName(), $1, $4, containedTypes,usedIdsToCheck, null, null, $3.getParaVector(), $2.getOffset());
|
||||
$$ = new Class($3.getName(), $1, $4, containedTypes, null, $3.getParaVector(), $2.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
| CLASS classidentifier super classbody
|
||||
{
|
||||
$$ = new Class($2.getName(), null, $4, containedTypes,usedIdsToCheck, $3, null, $2.getParaVector(), $1.getOffset());
|
||||
$$ = new Class($2.getName(), null, $4, containedTypes, $3, null, $2.getParaVector(), $1.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
| modifiers CLASS classidentifier super classbody
|
||||
{
|
||||
$$ = new Class($3.getName(), $1, $5, containedTypes, usedIdsToCheck, $4, null, $3.getParaVector(), $2.getOffset());
|
||||
$$ = new Class($3.getName(), $1, $5, containedTypes, $4, null, $3.getParaVector(), $2.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
///* auskommentiert von Andreas Stadelmeier A10023
|
||||
| CLASS classidentifier interfaces classbody
|
||||
{
|
||||
$$ = new Class($2.getName(), null, $4, containedTypes, usedIdsToCheck, null, $3.getVector(), $2.getParaVector(), $1.getOffset());
|
||||
$$ = new Class($2.getName(), null, $4, containedTypes, $3.getTypeVector(), $2.getParaVector(), $1.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
| modifiers CLASS classidentifier interfaces classbody
|
||||
{
|
||||
$$ = new Class($3.getName(), $1, $5, containedTypes, usedIdsToCheck, null, $4.getVector(), $3.getParaVector(), $2.getOffset());
|
||||
$$ = new Class($3.getName(), $1, $5, containedTypes, $4.getTypeVector(), $3.getParaVector(), $2.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
| CLASS classidentifier super interfaces classbody
|
||||
{
|
||||
$$ = new Class($2.getName(), null, $5, containedTypes,usedIdsToCheck, $3, $4.getVector(), $2.getParaVector(), $1.getOffset());
|
||||
$$ = new Class($2.getName(), null, $5, containedTypes, $3, $4.getTypeVector(), $2.getParaVector(), $1.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
| modifiers CLASS classidentifier super interfaces classbody
|
||||
{
|
||||
$$ = new Class($3.getName(), $1, $6, containedTypes, usedIdsToCheck, $4, $5.getVector(), $3.getParaVector(), $2.getOffset());
|
||||
$$ = new Class($3.getName(), $1, $6, containedTypes, $4, $5.getTypeVector(), $3.getParaVector(), $2.getOffset());
|
||||
this.initContainedTypes();
|
||||
this.initUsedIdsToCheck();
|
||||
}
|
||||
@ -850,15 +850,15 @@ genericdeclarationlist : '<' boundedMethodParameters '>'
|
||||
}
|
||||
|
||||
|
||||
fielddeclaration : fielddeclarator ';'
|
||||
{
|
||||
$$=$1;
|
||||
}
|
||||
| type fielddeclarator ';'
|
||||
fielddeclaration : type fielddeclarator ';'
|
||||
{
|
||||
$2.setType($1);
|
||||
$$=$2;
|
||||
}
|
||||
| fielddeclarator ';'
|
||||
{
|
||||
$$=$1;
|
||||
}
|
||||
| genericdeclarationlist type fielddeclarator ';'
|
||||
{//angefügt von Andreas Stadelmeier
|
||||
$3.setType($2);
|
||||
|
@ -51,7 +51,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
protected Modifiers modifiers;
|
||||
protected String name;
|
||||
|
||||
private Vector<Interface> superif = new Vector<Interface>();
|
||||
private Vector<Type> superif = new Vector<Type>();
|
||||
|
||||
public UsedId getPackageName()
|
||||
{
|
||||
@ -89,12 +89,13 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
return ret;
|
||||
}
|
||||
|
||||
public Vector<Interface> getSuperInterfaces()
|
||||
public Vector<Type> getSuperInterfaces()
|
||||
{
|
||||
return superif;
|
||||
}
|
||||
|
||||
public void setSuperInterfaces(Vector<Interface> superif)
|
||||
@Override
|
||||
public void setSuperInterfaces(Vector<Type> superif)
|
||||
{
|
||||
this.superif = superif;
|
||||
}
|
||||
@ -144,7 +145,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
private Vector<Field> fielddecl = new Vector<Field>();
|
||||
private GenericDeclarationList genericClassParameters;
|
||||
private int offset;
|
||||
private Class superClass;
|
||||
private Type superClass;
|
||||
|
||||
|
||||
// ino.method.Class.23041.definition
|
||||
@ -158,11 +159,11 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
}
|
||||
this.offset = offset;
|
||||
if(!name.equals("Object"))//Alle Klassen außer Object erben von Object:
|
||||
this.superClass = new Class("Object", -1);
|
||||
this.superClass = new Class("Object", -1).getType();
|
||||
}
|
||||
// ino.end
|
||||
|
||||
public Class(String name, Class superClass, int offset){
|
||||
public Class(String name, RefType superClass, int offset){
|
||||
this(name,offset);
|
||||
this.superClass = superClass;
|
||||
}
|
||||
@ -177,15 +178,44 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
}
|
||||
// ino.end
|
||||
|
||||
// ino.method.Class.23047.defdescription type=javadoc
|
||||
public Class(String name, Modifiers mod, ClassBody cb, Vector<Type> ct, Vector<UsedId> usedIdsToCheck,
|
||||
UsedId superclass, Vector<UsedId> superif, Vector<Type> paralist, int offset){
|
||||
this(name, mod, cb, ct, usedIdToRefType(superclass),usedIdToRefType(superif),paralist,offset);
|
||||
}
|
||||
public Class(String name, ClassBody cb, Vector<Type> ct,
|
||||
UsedId superclass, Vector<Type> superif, Vector<Type> paralist, int offset) {
|
||||
this(name,null,cb,ct,usedIdToRefType(superclass),superif,paralist,offset);
|
||||
}
|
||||
public Class(String name2, Modifiers modifiers2, ClassBody classBody,
|
||||
Vector<Type> containedTypes2, UsedId usedId,
|
||||
Vector<Type> typeVector, Vector<Type> paraVector, int offset2) {
|
||||
this(name2, modifiers2, classBody, containedTypes2, usedIdToRefType(usedId),typeVector, paraVector, offset2);
|
||||
}
|
||||
public Class(String name2, Modifiers object, ClassBody classBody,
|
||||
Vector<Type> containedTypes2, Vector<Type> typeVector,
|
||||
Vector<Type> paraVector, int offset2) {
|
||||
this(name2, object, classBody, containedTypes2,(Type)null, typeVector, paraVector, offset2);
|
||||
}
|
||||
private static Vector<Type> usedIdToRefType(Vector<UsedId> superif2) {
|
||||
Vector<Type> ret = new Vector<>();
|
||||
for(UsedId id : superif2)ret.add(usedIdToRefType(id));
|
||||
return ret;
|
||||
}
|
||||
private static Type usedIdToRefType(UsedId superclass2) {
|
||||
RefType ret = new RefType(superclass2.getSimpleName(), null, superclass2.getOffset());
|
||||
ret.set_ParaList(superclass2.get_ParaList());
|
||||
return ret;
|
||||
}
|
||||
|
||||
// ino.method.Class.23047.defdescription type=javadoc
|
||||
/**
|
||||
* Konstruktor, der die Angabe aller Parameter ermoeglicht.
|
||||
* Zur Uebersichtlichkeit in der Grammatik.
|
||||
*/
|
||||
// ino.end
|
||||
// ino.method.Class.23047.definition
|
||||
public Class(String name, Modifiers mod, ClassBody cb, Vector<Type> ct, Vector<UsedId> usedIdsToCheck,
|
||||
UsedId superclass, Vector<Interface> superif, Vector<Type> paralist, int offset)
|
||||
public Class(String name, Modifiers mod, ClassBody cb, Vector<Type> ct,
|
||||
Type superclass, Vector<Type> vector, Vector<Type> paralist, int offset)
|
||||
// ino.end
|
||||
// ino.method.Class.23047.body
|
||||
{
|
||||
@ -194,9 +224,9 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
if (cb != null) set_ClassBody(cb);
|
||||
if (ct != null) setContainedTypes(ct);
|
||||
if (superclass != null){
|
||||
this.superClass = new Class(superClass.getName().toString(),-1);
|
||||
this.superClass = superclass;
|
||||
}
|
||||
if (superif != null) setSuperInterfaces(superif);
|
||||
if (vector != null) setSuperInterfaces(vector);
|
||||
if (paralist != null){
|
||||
this.set_ParaList(paralist);
|
||||
}
|
||||
@ -214,7 +244,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
|
||||
}
|
||||
// ino.end
|
||||
|
||||
|
||||
public Vector<Field> getFields()
|
||||
{
|
||||
return fielddecl;
|
||||
@ -1097,6 +1127,9 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
for(Field f : this.getFields()){
|
||||
if(f.isPublic())ret.add(f.createTypeAssumptions(this));
|
||||
}
|
||||
for(GenericTypeVar gtv : this.getGenericParameter()){
|
||||
ret.add(gtv.createAssumptions());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1225,7 +1258,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
|
||||
* Die Super Klasse dieser Klasse.
|
||||
* @return null für Klasse Object
|
||||
*/
|
||||
public Class getSuperClass(){
|
||||
public Type getSuperClass(){
|
||||
return this.superClass;
|
||||
}
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ public class SourceFile
|
||||
*/
|
||||
// ino.end
|
||||
// ino.method.createPairFromClassAndSuperclass.21400.definition
|
||||
private Pair createPairFromClassAndSuperclass(Class baseClass, Class superclass, Vector classParaOrg, Vector superclassParaOrg)
|
||||
private Pair createPairFromClassAndSuperclass(Class baseClass, Type superclass, Vector classParaOrg, Vector superclassParaOrg, TypeAssumptions ass)
|
||||
// ino.end
|
||||
// ino.method.createPairFromClassAndSuperclass.21400.body
|
||||
{
|
||||
@ -269,10 +269,12 @@ public class SourceFile
|
||||
new RefType( superclassName.toString(), superclassParaOrg,-1)
|
||||
);
|
||||
*/
|
||||
Pair P = new Pair(baseClass.getType(), superclass.getType());
|
||||
Pair P = new Pair(baseClass.getType().TYPE(ass, baseClass).getType(), superclass.TYPE(ass, baseClass).getType());
|
||||
//PL 04-12-29 freshe Variablen ANFANG
|
||||
RefType r1 = (RefType)P.getTA1Copy();
|
||||
RefType r2 = (RefType)P.getTA2Copy();
|
||||
RefType r2 = (RefType)P.getTA2Copy();
|
||||
r1 = (RefType) r1.TYPE(ass, baseClass).getType();
|
||||
r2 = (RefType) r2.TYPE(ass, baseClass).getType();
|
||||
// #JB# 05.04.2005
|
||||
// ###########################################################
|
||||
Hashtable<JavaClassName,Type> substHash = new Hashtable<JavaClassName,Type>(); //fuer jedes Paar komplett neue Variablen
|
||||
@ -305,7 +307,8 @@ public class SourceFile
|
||||
// Menge FC bilden
|
||||
|
||||
Vector<Pair> vFC = new Vector<Pair>(); // Menge FC
|
||||
|
||||
TypeAssumptions globalAssumptions = this.makeBasicAssumptionsFromJRE(imports);
|
||||
globalAssumptions.add(this.getPublicFieldAssumptions());
|
||||
// 1. Menge <= in FC aufnehmen --> Iteration ueber alle Klassen
|
||||
|
||||
for( int i = 0; i < KlassenVektor.size(); i++ )
|
||||
@ -314,14 +317,14 @@ public class SourceFile
|
||||
inferencelog.debug("Verarbeite "+tempKlasse.getName());
|
||||
//TODO: SuperKlasse erstellen, dies sollte am besten beim Konstruktoraufruf von Class geschehen. Diese kann dann mit getSuperClass abgefragt werden.
|
||||
if( tempKlasse.superclassid != null ) { // Klasse hat Superklasse
|
||||
Pair P=createPairFromClassAndSuperclass(tempKlasse,tempKlasse.getSuperClass(),tempKlasse.get_ParaList(),tempKlasse.superclassid.get_ParaList());
|
||||
Pair P=createPairFromClassAndSuperclass(tempKlasse,tempKlasse.getSuperClass(),tempKlasse.get_ParaList(),tempKlasse.superclassid.get_ParaList(), globalAssumptions);
|
||||
vFC.add( P );
|
||||
}
|
||||
if(tempKlasse.getSuperInterfaces()!=null){
|
||||
Iterator<Interface> interfaceIterator=tempKlasse.getSuperInterfaces().iterator();
|
||||
Iterator<Type> interfaceIterator=tempKlasse.getSuperInterfaces().iterator();
|
||||
while(interfaceIterator.hasNext()){
|
||||
Interface intf=interfaceIterator.next();
|
||||
Pair P=createPairFromClassAndSuperclass(tempKlasse,intf,tempKlasse.get_ParaList(),intf.get_ParaList());
|
||||
RefType intf=(RefType) interfaceIterator.next();
|
||||
Pair P=createPairFromClassAndSuperclass(tempKlasse,intf,tempKlasse.get_ParaList(),intf.get_ParaList(),globalAssumptions);
|
||||
vFC.add( P );
|
||||
|
||||
}
|
||||
@ -330,10 +333,10 @@ public class SourceFile
|
||||
for(int i=0; i<InterfaceVektor.size();i++){
|
||||
Interface intf= InterfaceVektor.get(i);
|
||||
if(intf.getSuperInterfaces()!=null){
|
||||
Iterator<Interface> interfaceIterator=intf.getSuperInterfaces().iterator();
|
||||
Iterator<Type> interfaceIterator=intf.getSuperInterfaces().iterator();
|
||||
while(interfaceIterator.hasNext()){
|
||||
Interface superintf=interfaceIterator.next();
|
||||
Pair P=createPairFromClassAndSuperclass(intf,superintf,intf.getParaList(), superintf.get_ParaList());
|
||||
RefType superintf=(RefType) interfaceIterator.next();
|
||||
Pair P=createPairFromClassAndSuperclass(intf,superintf,intf.getParaList(), superintf.get_ParaList(),globalAssumptions);
|
||||
vFC.add( P );
|
||||
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class GenericTypeVar extends Type
|
||||
// ino.method.GenericTypeVar.26509.defdescription type=line
|
||||
// private Hashtable<String, Vector<GenericTypeVar>> m_TypeErasureList;
|
||||
// ino.end
|
||||
private static HashMap<GenericTypeVar,TypePlaceholder> tph = new HashMap<GenericTypeVar,TypePlaceholder>();
|
||||
private static HashMap<String,TypePlaceholder> tph = new HashMap<>();
|
||||
|
||||
/**
|
||||
*
|
||||
@ -170,12 +170,14 @@ public class GenericTypeVar extends Type
|
||||
*/
|
||||
return new JavaCodeResult(this.name.toString());
|
||||
}
|
||||
|
||||
public TypePlaceholder getTypePlaceHolder() {
|
||||
if(!GenericTypeVar.tph.containsKey(this)){
|
||||
GenericTypeVar.tph.put(this, TypePlaceholder.fresh(this.getName().toString(),this));
|
||||
|
||||
public TypePlaceholder getTypePlaceHolder(SyntaxTreeNode environment) {
|
||||
String hashValue = this.getName().toString()+environment.hashCode();
|
||||
if(!GenericTypeVar.tph.containsKey(hashValue)){
|
||||
GenericTypeVar.tph.put(hashValue, TypePlaceholder.fresh(hashValue,this));
|
||||
}
|
||||
return GenericTypeVar.tph.get(this);
|
||||
return GenericTypeVar.tph.get(hashValue);
|
||||
//return TypePlaceholder.fresh(this.getParent());
|
||||
//if(this.tph == null)this.tph = TypePlaceholder.fresh();
|
||||
//return this.tph;
|
||||
}
|
||||
|
@ -212,12 +212,12 @@ public class RefType extends Type implements IMatchable
|
||||
* Wandelt die Parameter des RefTypes in TPHs um, sofern es sich um Generische Variablen handelt.
|
||||
* @return
|
||||
*/
|
||||
public void GTV2TPH(){
|
||||
public void GTV2TPH(SyntaxTreeNode environment){
|
||||
Vector<Type> paralist = new Vector<Type>();
|
||||
if(this.get_ParaList()!=null)for(Type t : this.get_ParaList()){
|
||||
if(t instanceof GenericTypeVar)paralist.add(((GenericTypeVar)t).getTypePlaceHolder());
|
||||
if(t instanceof GenericTypeVar)paralist.add(((GenericTypeVar)t).getTypePlaceHolder(environment));
|
||||
else{
|
||||
if(t instanceof RefType)((RefType) t).GTV2TPH();
|
||||
if(t instanceof RefType)((RefType) t).GTV2TPH(environment);
|
||||
paralist.add(t);
|
||||
}
|
||||
}
|
||||
|
@ -298,7 +298,7 @@ public class Type extends SyntaxTreeNode implements IItemWithOffset
|
||||
*/
|
||||
//TODO: checkType wird nicht mehr gebraucht. TYPE übernimmt dessen Aufgabe. Es muss nur sichergestellt werden, dass jeder Typ in den Constraints landet, dadurch wird für jeden Typ die Methode TYPE aufgerufen.
|
||||
public ConstraintType TYPE(TypeAssumptions ass, SyntaxTreeNode parent){
|
||||
ConstraintType t = ass.getTypeFor(this, this);
|
||||
ConstraintType t = ass.getTypeFor(this, parent);
|
||||
if(t==null)
|
||||
throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent);
|
||||
return t;
|
||||
|
@ -311,13 +311,28 @@ public class TypeAssumptions {
|
||||
if(ass.getIdentifier().equals(t.getName())){
|
||||
if(! ass.getAssumedType().getParentClass().getName().equals(this.thisClassName)){
|
||||
//Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden:
|
||||
return new ConstraintType(ass.getAssumedType().getTypePlaceHolder());
|
||||
return new ConstraintType(ass.getAssumedType().getTypePlaceHolder(inNode));
|
||||
}
|
||||
return new ConstraintType(ass.getAssumedType());
|
||||
}
|
||||
}
|
||||
//Spezialfälle bei char, int, boolean, ....
|
||||
//TODO
|
||||
String name = t.getName().toString();
|
||||
switch(name){
|
||||
case "int":
|
||||
return new ConstraintType(new RefType("java.lang.Integer",t.getParent(),t.getOffset()));
|
||||
case "boolean":
|
||||
return new ConstraintType(new RefType("java.lang.Boolean",t.getParent(),t.getOffset()));
|
||||
case "double":
|
||||
return new ConstraintType(new RefType("java.lang.Double",t.getParent(),t.getOffset()));
|
||||
case "float":
|
||||
return new ConstraintType(new RefType("java.lang.Float",t.getParent(),t.getOffset()));
|
||||
case "long":
|
||||
return new ConstraintType(new RefType("java.lang.Long",t.getParent(),t.getOffset()));
|
||||
case "char":
|
||||
return new ConstraintType(new RefType("java.lang.Character",t.getParent(),t.getOffset()));
|
||||
}
|
||||
|
||||
throw new TypeinferenceException("Der Typ "+t.getName()+" ist nicht korrekt",inNode);
|
||||
}
|
||||
|
||||
|
@ -1 +1,6 @@
|
||||
class Test{}
|
||||
class Test{
|
||||
method(){
|
||||
if(true)i++;
|
||||
if(true)i--;
|
||||
else i++;
|
||||
}}
|
3
test/parser/FieldVarTest.jav
Normal file
3
test/parser/FieldVarTest.jav
Normal file
@ -0,0 +1,3 @@
|
||||
class Test<Typ>{
|
||||
Typ a;
|
||||
}
|
@ -33,6 +33,7 @@ public class GeneralParserTest{
|
||||
filenames.add("ImportTest.jav");
|
||||
filenames.add("BoundedParameter.jav");
|
||||
filenames.add("GenericFieldVarTest.jav");
|
||||
filenames.add("FieldVarTest.jav");
|
||||
MyCompilerAPI compiler = MyCompiler.getAPI();
|
||||
try{
|
||||
for(String filename : filenames)
|
||||
|
@ -8,4 +8,4 @@ methode(){
|
||||
|
||||
class GTVTest2<GTV2>{
|
||||
GTV2 var2;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
class GTVTest<GTV1>{
|
||||
GTVTest2<String> var;
|
||||
var2;
|
||||
|
||||
methode(){
|
||||
var2;
|
||||
return var.test(var2);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user