forked from JavaTX/JavaCompilerCore
GTV2TPH eingeführt. Beim Anfügen eines SingleConstraints werden GenericTypeVars nun durch Typeplaceholder ausgetauscht.
This commit is contained in:
parent
b432c74ec4
commit
8e7776dc4c
@ -323,7 +323,7 @@ compilationunit : typedeclarations
|
|||||||
{
|
{
|
||||||
$$=$1;
|
$$=$1;
|
||||||
}
|
}
|
||||||
/* |importdeclarations typedeclarations
|
|importdeclarations typedeclarations
|
||||||
{
|
{
|
||||||
$2.addImports($1);
|
$2.addImports($1);
|
||||||
$$=$2;
|
$$=$2;
|
||||||
@ -346,7 +346,7 @@ compilationunit : typedeclarations
|
|||||||
this.testPair.add(new Pair($1,$2));
|
this.testPair.add(new Pair($1,$2));
|
||||||
$$=$3;
|
$$=$3;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
packagedeclaration : PACKAGE name ';' ;
|
packagedeclaration : PACKAGE name ';' ;
|
||||||
{
|
{
|
||||||
// SCJU: Package
|
// SCJU: Package
|
||||||
|
@ -5,6 +5,7 @@ package mycompiler;
|
|||||||
// ino.module.SourceFile.8722.import
|
// ino.module.SourceFile.8722.import
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@ -690,6 +691,27 @@ public class SourceFile
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Alle Generischen Typvariablen in TPH umwandeln:
|
||||||
|
HashMap<GenericTypeVar,TypePlaceholder> gtv2tph = new HashMap<GenericTypeVar,TypePlaceholder>();
|
||||||
|
for(Pair pair : constraints){
|
||||||
|
if(pair.TA1 instanceof GenericTypeVar){
|
||||||
|
TypePlaceholder tph = gtv2tph.get(pair.TA1);
|
||||||
|
if(tph == null){
|
||||||
|
tph = TypePlaceholder.fresh();
|
||||||
|
gtv2tph.put((GenericTypeVar)pair.TA1, tph);
|
||||||
|
}
|
||||||
|
pair.TA1 = tph;
|
||||||
|
}
|
||||||
|
if(pair.TA2 instanceof GenericTypeVar){
|
||||||
|
TypePlaceholder tph = gtv2tph.get(pair.TA2);
|
||||||
|
if(tph == null){
|
||||||
|
tph = TypePlaceholder.fresh();
|
||||||
|
gtv2tph.put((GenericTypeVar)pair.TA2, tph);
|
||||||
|
}
|
||||||
|
pair.TA2 = tph;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Erst die Unifizierung erstellen:
|
//Erst die Unifizierung erstellen:
|
||||||
Vector<Pair> constraintsClone = (Vector<Pair>)constraints.clone();
|
Vector<Pair> constraintsClone = (Vector<Pair>)constraints.clone();
|
||||||
Vector<Vector<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure);
|
Vector<Vector<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure);
|
||||||
|
@ -1250,6 +1250,10 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public RefType getType() {
|
public RefType getType() {
|
||||||
|
Vector<Type> parameter = new Vector<Type>();
|
||||||
|
for(Type param : this.get_ParaList()){
|
||||||
|
parameter.add(((GenericTypeVar)param).getTypePlaceHolder());//(TypePlaceholder.fresh()); //Hier ist kein ReplacementListener notwendig. Der Typ soll nie eingesetzt werden. Der TPH wird nur gebraucht, damit das Unifizieren funktioniert.
|
||||||
|
}
|
||||||
return new RefType(this.getName(), this.get_ParaList(), 0);
|
return new RefType(this.getName(), this.get_ParaList(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,7 +705,9 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
|||||||
public boolean equals(Object obj){
|
public boolean equals(Object obj){
|
||||||
if(!(obj instanceof Method))return false;
|
if(!(obj instanceof Method))return false;
|
||||||
Method equals = (Method) obj;
|
Method equals = (Method) obj;
|
||||||
if(!this.returntype.equals(equals.returntype))return false;
|
if((this.returntype!=null && equals.returntype==null))return false;
|
||||||
|
if((this.returntype==null && equals.returntype!=null))return false;
|
||||||
|
if(this.returntype!=null && equals.returntype!=null)if(!this.returntype.equals(equals.returntype))return false;
|
||||||
if(!this.parameterlist.equals(equals.parameterlist))return false;
|
if(!this.parameterlist.equals(equals.parameterlist))return false;
|
||||||
return super.equals(obj);
|
return super.equals(obj);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -323,7 +323,7 @@ compilationunit : typedeclarations
|
|||||||
{
|
{
|
||||||
$$=$1;
|
$$=$1;
|
||||||
}
|
}
|
||||||
/* |importdeclarations typedeclarations
|
|importdeclarations typedeclarations
|
||||||
{
|
{
|
||||||
$2.addImports($1);
|
$2.addImports($1);
|
||||||
$$=$2;
|
$$=$2;
|
||||||
@ -346,7 +346,7 @@ compilationunit : typedeclarations
|
|||||||
this.testPair.add(new Pair($1,$2));
|
this.testPair.add(new Pair($1,$2));
|
||||||
$$=$3;
|
$$=$3;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
packagedeclaration : PACKAGE name ';' ;
|
packagedeclaration : PACKAGE name ';' ;
|
||||||
{
|
{
|
||||||
// SCJU: Package
|
// SCJU: Package
|
||||||
|
@ -36,10 +36,16 @@ import org.apache.log4j.Logger;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import typinferenz.ConstraintsSet;
|
import typinferenz.ConstraintsSet;
|
||||||
import typinferenz.FreshTypeVariable;
|
import typinferenz.FreshTypeVariable;
|
||||||
import typinferenz.JavaCodeResult;
|
import typinferenz.JavaCodeResult;
|
||||||
|
import typinferenz.OderConstraint;
|
||||||
import typinferenz.ResultSet;
|
import typinferenz.ResultSet;
|
||||||
|
import typinferenz.UndConstraint;
|
||||||
|
import typinferenz.assumptions.FieldAssumption;
|
||||||
import typinferenz.assumptions.TypeAssumptions;
|
import typinferenz.assumptions.TypeAssumptions;
|
||||||
|
|
||||||
|
|
||||||
@ -103,18 +109,24 @@ public class InstVar extends Expr
|
|||||||
super(offset,variableLength);
|
super(offset,variableLength);
|
||||||
Iterator namen = ui.get_Name().iterator();
|
Iterator namen = ui.get_Name().iterator();
|
||||||
LocalOrFieldVar innerLOFV = new LocalOrFieldVar((String)namen.next(),getOffset());
|
LocalOrFieldVar innerLOFV = new LocalOrFieldVar((String)namen.next(),getOffset());
|
||||||
innerLOFV.setType(TypePlaceholder.fresh(this));
|
//innerLOFV.setType(TypePlaceholder.fresh(this));
|
||||||
InstVar INSTVA = new InstVar(innerLOFV, (String)namen.next(),offset);
|
InstVar INSTVA = new InstVar(innerLOFV, (String)namen.next(),offset);
|
||||||
INSTVA.setType(TypePlaceholder.fresh(this));
|
//INSTVA.setType(TypePlaceholder.fresh(this));
|
||||||
while(namen.hasNext()) {
|
while(namen.hasNext()) {
|
||||||
INSTVA = new InstVar(INSTVA, (String)namen.next(),offset);
|
INSTVA = new InstVar(INSTVA, (String)namen.next(),offset);
|
||||||
INSTVA.setType(TypePlaceholder.fresh(this));
|
//INSTVA.setType(TypePlaceholder.fresh(this));
|
||||||
}
|
}
|
||||||
expr = INSTVA.expr;
|
expr = INSTVA.expr;
|
||||||
usedid = INSTVA.usedid;
|
usedid = INSTVA.usedid;
|
||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void parserPostProcessing(SyntaxTreeNode parent) {
|
||||||
|
super.parserPostProcessing(parent);
|
||||||
|
if(this.getType()==null)this.set_Type(TypePlaceholder.fresh(this));
|
||||||
|
}
|
||||||
|
|
||||||
// ino.method.sc_check.25417.definition
|
// ino.method.sc_check.25417.definition
|
||||||
public void sc_check(Vector<Class> classname, Hashtable ch, Hashtable<String, String> bh, boolean ext, Hashtable parach, Hashtable<String, Hashtable> parabh)
|
public void sc_check(Vector<Class> classname, Hashtable ch, Hashtable<String, String> bh, boolean ext, Hashtable parach, Hashtable<String, Hashtable> parabh)
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -152,7 +164,7 @@ public class InstVar extends Expr
|
|||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.get_Name.25420.body
|
// ino.method.get_Name.25420.body
|
||||||
{
|
{
|
||||||
return null;
|
return this.usedid.get_Name_1Element();
|
||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
@ -267,14 +279,27 @@ public class InstVar extends Expr
|
|||||||
@Override
|
@Override
|
||||||
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
||||||
ConstraintsSet ret = new ConstraintsSet();
|
ConstraintsSet ret = new ConstraintsSet();
|
||||||
|
if(this.expr == null){
|
||||||
|
this.expr = new This(0, 0);
|
||||||
|
}
|
||||||
ret.add(expr.TYPEExpr(assumptions));
|
ret.add(expr.TYPEExpr(assumptions));
|
||||||
this.setType(TypePlaceholder.fresh(this));
|
this.setType(TypePlaceholder.fresh(this));
|
||||||
return null;
|
OderConstraint oderConstraint = new OderConstraint();
|
||||||
|
for(FieldAssumption fa : assumptions.getFieldVars(this.get_Name())){
|
||||||
|
UndConstraint undConstraint = new UndConstraint();
|
||||||
|
undConstraint.addConstraint(fa.getAssumedType(),this.getType());
|
||||||
|
undConstraint.addConstraint(this.expr.getType(),fa.getParentClass().getType());
|
||||||
|
oderConstraint.addConstraint(undConstraint);
|
||||||
|
}
|
||||||
|
ret.add(oderConstraint);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
||||||
return new JavaCodeResult().attach(this.expr.printJavaCode(resultSet)).attach("."+this.usedid.get_Name_1Element());
|
JavaCodeResult ret = new JavaCodeResult();
|
||||||
|
if(this.expr != null)ret.attach(this.expr.printJavaCode(resultSet)).attach(".");
|
||||||
|
return ret.attach(this.usedid.get_Name_1Element());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,6 +33,7 @@ public class GenericTypeVar extends Type
|
|||||||
// ino.method.GenericTypeVar.26509.defdescription type=line
|
// ino.method.GenericTypeVar.26509.defdescription type=line
|
||||||
// private Hashtable<String, Vector<GenericTypeVar>> m_TypeErasureList;
|
// private Hashtable<String, Vector<GenericTypeVar>> m_TypeErasureList;
|
||||||
// ino.end
|
// ino.end
|
||||||
|
private TypePlaceholder tph;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -134,6 +135,11 @@ public class GenericTypeVar extends Type
|
|||||||
return new JavaCodeResult(this.name);
|
return new JavaCodeResult(this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TypePlaceholder getTypePlaceHolder() {
|
||||||
|
if(this.tph == null)this.tph = TypePlaceholder.fresh();
|
||||||
|
return this.tph;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ public class RefType extends Type implements IMatchable
|
|||||||
{
|
{
|
||||||
super(offset);
|
super(offset);
|
||||||
this.setName(fullyQualifiedName);
|
this.setName(fullyQualifiedName);
|
||||||
if(parameter != null && parameter.size()>0)this.parameter = parameter;
|
if(parameter != null && parameter.size()>0)this.set_ParaList(parameter);
|
||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ public class RefType extends Type implements IMatchable
|
|||||||
super(offset);
|
super(offset);
|
||||||
// otth: Copy-Konstruktor
|
// otth: Copy-Konstruktor
|
||||||
this.setName(R.getTypeName());
|
this.setName(R.getTypeName());
|
||||||
this.parameter = R.get_ParaList();
|
this.set_ParaList(R.get_ParaList());
|
||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
@ -196,6 +196,19 @@ public class RefType extends Type implements IMatchable
|
|||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wandelt die Parameter des RefTypes in TPHs um, sofern es sich um Generische Variablen handelt.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public void GTV2TPH(){
|
||||||
|
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());
|
||||||
|
else paralist.add(t);
|
||||||
|
}
|
||||||
|
this.set_ParaList(paralist);
|
||||||
|
}
|
||||||
|
|
||||||
// ino.method.setName.26655.definition
|
// ino.method.setName.26655.definition
|
||||||
public void setName( String name )
|
public void setName( String name )
|
||||||
// ino.end
|
// ino.end
|
||||||
@ -241,12 +254,23 @@ public class RefType extends Type implements IMatchable
|
|||||||
}
|
}
|
||||||
// ino.end
|
// ino.end
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fügt eine Parameterliste an und tauscht zuvor alle GenerictTypeVars durch TPH aus.
|
||||||
|
* In einem RefType dürfen keine GTVs enthalten sein.
|
||||||
|
* @param v
|
||||||
|
*/
|
||||||
// ino.method.set_ParaList.26661.definition
|
// ino.method.set_ParaList.26661.definition
|
||||||
public void set_ParaList(Vector<Type> v)
|
public void set_ParaList(Vector<Type> v)
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.method.set_ParaList.26661.body
|
// ino.method.set_ParaList.26661.body
|
||||||
{
|
{
|
||||||
this.parameter = v;
|
/*
|
||||||
|
Vector<Type> paralist = new Vector<Type>();
|
||||||
|
if(v!=null)for(Type t : v){
|
||||||
|
if(t instanceof GenericTypeVar)paralist.add(((GenericTypeVar)t).getTypePlaceHolder());
|
||||||
|
else paralist.add(t);
|
||||||
|
}*/
|
||||||
|
this.parameter = v;//paralist;
|
||||||
parserlog.debug("T->Type.java->set_ParaList->parameter: " + parameter);
|
parserlog.debug("T->Type.java->set_ParaList->parameter: " + parameter);
|
||||||
parserlog.debug("T->Type.java->get_Type: " + getName());
|
parserlog.debug("T->Type.java->get_Type: " + getName());
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,10 @@ public class FunNInterface extends Class{
|
|||||||
super("Fun"+N);
|
super("Fun"+N);
|
||||||
Vector<Type> paralist = new Vector<Type>();
|
Vector<Type> paralist = new Vector<Type>();
|
||||||
paralist.add(new GenericTypeVar("R",0));
|
paralist.add(new GenericTypeVar("R",0));
|
||||||
|
//paralist.add(TypePlaceholder.fresh());
|
||||||
for(int i = 1; i<=N;i++){
|
for(int i = 1; i<=N;i++){
|
||||||
paralist.add(new GenericTypeVar("T"+i,0));
|
paralist.add(new GenericTypeVar("T"+i,0));
|
||||||
|
//paralist.add(TypePlaceholder.fresh());
|
||||||
}
|
}
|
||||||
this.set_ParaList(paralist);
|
this.set_ParaList(paralist);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package typinferenz;
|
|||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import typinferenz.exceptions.TypinferenzException;
|
import typinferenz.exceptions.TypinferenzException;
|
||||||
|
import mycompiler.mytype.GenericTypeVar;
|
||||||
import mycompiler.mytype.Pair;
|
import mycompiler.mytype.Pair;
|
||||||
import mycompiler.mytype.RefType;
|
import mycompiler.mytype.RefType;
|
||||||
import mycompiler.mytype.Type;
|
import mycompiler.mytype.Type;
|
||||||
@ -48,9 +49,19 @@ public class SingleConstraint extends UndConstraint{
|
|||||||
Type p2 = toAdd.TA2;
|
Type p2 = toAdd.TA2;
|
||||||
if(p1==null || p2 == null)throw new NullPointerException();
|
if(p1==null || p2 == null)throw new NullPointerException();
|
||||||
|
|
||||||
|
|
||||||
|
//Hier werden die GTVs zu TPH gewandelt.
|
||||||
|
if(p1 instanceof RefType)((RefType)p1).GTV2TPH();
|
||||||
|
if(p2 instanceof RefType)((RefType)p2).GTV2TPH();
|
||||||
|
|
||||||
|
if((p1 instanceof GenericTypeVar))
|
||||||
|
p1 = ((GenericTypeVar)p1).getTypePlaceHolder();
|
||||||
|
if((p2 instanceof GenericTypeVar))
|
||||||
|
p2 = ((GenericTypeVar)p2).getTypePlaceHolder();
|
||||||
|
|
||||||
// BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert.
|
// BaseTypes werden in RefTypes umgewandelt. Constraints dürfen nur RefTypes oder TypePlaceholder enthalten, da sonst der Unify-Algorithmus nicht funktioniert.
|
||||||
if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder))p1 = new RefType(p1);
|
if(!(p1 instanceof RefType) && !(p1 instanceof TypePlaceholder) && !(p1 instanceof GenericTypeVar))p1 = new RefType(p1);
|
||||||
if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder))p2 = new RefType(p2);
|
if(!(p2 instanceof RefType) && !(p2 instanceof TypePlaceholder) && !(p2 instanceof GenericTypeVar))p2 = new RefType(p2);
|
||||||
|
|
||||||
//if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2)))
|
//if(!(TypePlaceholder.class.isInstance(p1)) || !(RefType.class.isInstance(p1)) || !(TypePlaceholder.class.isInstance(p2)) || !(RefType.class.isInstance(p2)))
|
||||||
//{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind:
|
//{//Wenn die beiden übergebenen Typen weder RefTypes noch TypePlaceholder sind:
|
||||||
|
@ -31,7 +31,8 @@ public class MethodAssumption extends FieldAssumption {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Type getParameterType(int i) {
|
public Type getParameterType(int i) {
|
||||||
return this.method.getParameterList().getParameterAt(i).getType();
|
Type ret = this.method.getParameterList().getParameterAt(i).getType();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type getParentClassType() {
|
public Type getParentClassType() {
|
||||||
|
@ -93,15 +93,19 @@ public class TypeAssumptions {
|
|||||||
* @param withName
|
* @param withName
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
public Vector<FieldAssumption> getFieldVars(String withName){
|
||||||
public Vector<FieldAssumption> getFieldVars2(String withName){
|
Vector<FieldAssumption> ret = new Vector<FieldAssumption>();
|
||||||
//TODO: Implementieren
|
for(FieldAssumption fa : this.fieldAssumptions){
|
||||||
return new Vector<FieldAssumption>();
|
if(fa.getIdentifier().equals(withName))ret.add(fa);
|
||||||
}
|
}
|
||||||
@Deprecated
|
return ret;
|
||||||
public Type getTypeOfFieldVar2(String withName, Class inClass){
|
}
|
||||||
//TODO: Implementieren
|
|
||||||
return null;
|
public Type getTypeOfFieldVar(String withName, Class inClass){
|
||||||
|
for(FieldAssumption fa : this.getFieldVars(withName)){
|
||||||
|
if(fa.getParentClass().equals(inClass))return fa.getAssumedType();
|
||||||
|
}
|
||||||
|
throw new TypinferenzException("Das Feld "+withName+" ist in der Klasse "+inClass.getName()+" nicht vorhanden.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,6 +29,7 @@ public class GeneralParserTest{
|
|||||||
public void run(){
|
public void run(){
|
||||||
Vector<String> filenames = new Vector<String>();
|
Vector<String> filenames = new Vector<String>();
|
||||||
filenames.add("FieldInitializationTest.jav");
|
filenames.add("FieldInitializationTest.jav");
|
||||||
|
filenames.add("ImportTest.jav");
|
||||||
MyCompilerAPI compiler = MyCompiler.getAPI();
|
MyCompilerAPI compiler = MyCompiler.getAPI();
|
||||||
try{
|
try{
|
||||||
for(String filename : filenames)
|
for(String filename : filenames)
|
||||||
|
4
test/parser/ImportTest.jav
Normal file
4
test/parser/ImportTest.jav
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
class ImportTest{
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
class GTVTest<GTV1>{
|
||||||
|
GTVTest2<String> var;
|
||||||
|
|
||||||
|
methode(){
|
||||||
|
return var.var2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GTVTest2<GTV2>{
|
||||||
|
GTV2 var2;
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package plugindevelopment.TypeInsertTests;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class GenericTypeVarTest {
|
||||||
|
|
||||||
|
private static final String TEST_FILE = "GenericTypeVarTest.jav";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void run(){
|
||||||
|
Vector<String> mustContain = new Vector<String>();
|
||||||
|
mustContain.add("String methode");
|
||||||
|
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -11,7 +11,7 @@ public class LambdaTest1 {
|
|||||||
@Test
|
@Test
|
||||||
public void run(){
|
public void run(){
|
||||||
Vector<String> mustContain = new Vector<String>();
|
Vector<String> mustContain = new Vector<String>();
|
||||||
mustContain.add("Fun0<Fun1<String, Fun2<LambdaTest, String>>> op");
|
mustContain.add("Fun0<Fun1<String, Fun2<G, LambdaTest, String>>> op");
|
||||||
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
|
MultipleTypesInsertTester.test(this.TEST_FILE, mustContain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15930
tools/y.output
15930
tools/y.output
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user