Merge branch 'refactoring' into antlr

This commit is contained in:
JanUlrich 2014-09-09 17:48:06 +02:00
commit 35b12402c7
428 changed files with 5232 additions and 14749 deletions

View File

@ -4,10 +4,10 @@
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> <booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/> <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/JavaCompilerCore/tools/AntParserBuilderWindows.xml"/> <listEntry value="/JavaCompilerCore"/>
</listAttribute> </listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/> <listEntry value="4"/>
</listAttribute> </listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> <booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>

View File

@ -1,5 +1,5 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
encoding//src/mycompiler/mystatement/LambdaExpression.java=UTF-8 encoding//src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java=UTF-8
encoding//src/typinferenz/SingleConstraint.java=UTF-8 encoding//src/de/dhbwstuttgart/typeinference/SingleConstraint.java=UTF-8
encoding//src/typinferenz/UndConstraint.java=UTF-8 encoding//src/de/dhbwstuttgart/typeinference/UndConstraint.java=UTF-8
encoding/<project>=ISO-8859-1 encoding/<project>=ISO-8859-1

2
TODO.md Normal file
View File

@ -0,0 +1,2 @@
Nächste Aufgaben:

10
bin/.gitignore vendored
View File

@ -1,8 +1,6 @@
/mycompiler /de
/typinferenz
/userinterface
/bytecode
/myJvmDisassembler
/parser
/plugindevelopment /plugindevelopment
/mycompiler
/mytypereconstruction
/syntaxTree /syntaxTree
/userinterface

View File

@ -0,0 +1,6 @@
class FieldTest{
String var;
String methode(String para1){
return var;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
class Matrix{
<A extends B, C extends B> String op = "String";
}

View File

@ -0,0 +1,3 @@
class FieldInitializationTest{
String var = "hallo";
}

View File

@ -0,0 +1,3 @@
class Test{
<A> A var;
}

View File

@ -0,0 +1,4 @@
import java.util.*;
class ImportTest{
}

View File

@ -1,4 +1,4 @@
package myJvmDisassembler; package de.dhbwstuttgart.JvmDisassembler;

View File

@ -1,4 +1,4 @@
package myJvmDisassembler; package de.dhbwstuttgart.JvmDisassembler;
import java.util.*; import java.util.*;
import java.io.*; import java.io.*;

View File

@ -1,5 +1,5 @@
// ino.module.Attribute.8529.package // ino.module.Attribute.8529.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.Attribute.8529.import // ino.module.Attribute.8529.import
@ -7,11 +7,11 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import mycompiler.myexception.JVMCodeException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.myexception.JVMCodeException;
// ino.class.Attribute.21446.declaration // ino.class.Attribute.21446.declaration
public abstract class Attribute implements ClassFileMember public abstract class Attribute implements ClassFileMember
// ino.end // ino.end

View File

@ -1,5 +1,5 @@
// ino.module.AttributeInfo.8530.package // ino.module.AttributeInfo.8530.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.AttributeInfo.8530.import // ino.module.AttributeInfo.8530.import
@ -8,8 +8,7 @@ import java.io.OutputStream;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.Vector; import java.util.Vector;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.JVMCodeException;
// ino.end
// ino.class.AttributeInfo.21467.declaration // ino.class.AttributeInfo.21467.declaration
public class AttributeInfo extends Attribute public class AttributeInfo extends Attribute

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Class_info.8533.package // ino.module.CONSTANT_Class_info.8533.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Class_info.8533.import // ino.module.CONSTANT_Class_info.8533.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Double_info.8534.package // ino.module.CONSTANT_Double_info.8534.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Double_info.8534.import // ino.module.CONSTANT_Double_info.8534.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Fieldref_info.8535.package // ino.module.CONSTANT_Fieldref_info.8535.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Fieldref_info.8535.import // ino.module.CONSTANT_Fieldref_info.8535.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Float_info.8536.package // ino.module.CONSTANT_Float_info.8536.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Float_info.8536.import // ino.module.CONSTANT_Float_info.8536.import
import java.io.IOException; import java.io.IOException;

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Integer_info.8537.package // ino.module.CONSTANT_Integer_info.8537.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Integer_info.8537.import // ino.module.CONSTANT_Integer_info.8537.import
import java.io.FileOutputStream; import java.io.FileOutputStream;

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_InterfaceMethodref_info.8538.package // ino.module.CONSTANT_InterfaceMethodref_info.8538.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_InterfaceMethodref_info.8538.import // ino.module.CONSTANT_InterfaceMethodref_info.8538.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Long_info.8539.package // ino.module.CONSTANT_Long_info.8539.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Long_info.8539.import // ino.module.CONSTANT_Long_info.8539.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Methodref_info.8540.package // ino.module.CONSTANT_Methodref_info.8540.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Methodref_info.8540.import // ino.module.CONSTANT_Methodref_info.8540.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_NameAndType_info.8541.package // ino.module.CONSTANT_NameAndType_info.8541.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_NameAndType_info.8541.import // ino.module.CONSTANT_NameAndType_info.8541.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_String_info.8542.package // ino.module.CONSTANT_String_info.8542.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_String_info.8542.import // ino.module.CONSTANT_String_info.8542.import

View File

@ -1,5 +1,5 @@
// ino.module.CONSTANT_Utf8_info.8543.package // ino.module.CONSTANT_Utf8_info.8543.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CONSTANT_Utf8_info.8543.import // ino.module.CONSTANT_Utf8_info.8543.import

View File

@ -1,5 +1,5 @@
// ino.module.CPInfo.8544.package // ino.module.CPInfo.8544.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CPInfo.8544.import // ino.module.CPInfo.8544.import

View File

@ -3,7 +3,7 @@
// ino.module.ClassFile.8531.package // ino.module.ClassFile.8531.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.ClassFile.8531.import // ino.module.ClassFile.8531.import
import java.io.File; import java.io.File;
@ -13,20 +13,27 @@ import java.io.OutputStream;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.Vector; import java.util.Vector;
import mycompiler.myclass.ParameterList;
import mycompiler.myclass.UsedId;
import mycompiler.MyCompiler;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myinterface.Interface;
import mycompiler.mystatement.Assign;
import mycompiler.mystatement.Block;
import mycompiler.mytype.Type;
import mycompiler.SourceFile;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.core.MyCompiler;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.syntaxtree.Interface;
import de.dhbwstuttgart.syntaxtree.ParameterList;
import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.statement.Assign;
import de.dhbwstuttgart.syntaxtree.statement.Block;
import de.dhbwstuttgart.syntaxtree.type.Type;
// ino.class.ClassFile.21492.description type=javadoc // ino.class.ClassFile.21492.description type=javadoc
/** /**
* Darstellung einer Klassendatei aus Sicht fuer die JVM. * Darstellung einer Klassendatei aus Sicht fuer die JVM.

View File

@ -1,9 +1,9 @@
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.myexception.JVMCodeException;
public interface ClassFileMember { public interface ClassFileMember {
public void codegen(ClassFile cf, OutputStream out) throws JVMCodeException, IOException; public void codegen(ClassFile cf, OutputStream out) throws JVMCodeException, IOException;

View File

@ -4,7 +4,7 @@
//muss wieder einkommentiert werden //muss wieder einkommentiert werden
// ino.module.CodeAttribute.8532.package // ino.module.CodeAttribute.8532.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.CodeAttribute.8532.import // ino.module.CodeAttribute.8532.import
@ -14,10 +14,9 @@ import java.io.OutputStream;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.Vector; import java.util.Vector;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.syntaxtree.type.Type;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mytype.Type;
// ino.end
// ino.class.CodeAttribute.21681.declaration // ino.class.CodeAttribute.21681.declaration
public class CodeAttribute extends Attribute public class CodeAttribute extends Attribute

View File

@ -1,5 +1,5 @@
// ino.module.ExceptionTable.8545.package // ino.module.ExceptionTable.8545.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.ExceptionTable.8545.import // ino.module.ExceptionTable.8545.import

View File

@ -1,5 +1,5 @@
// ino.module.FieldInfo.8546.package // ino.module.FieldInfo.8546.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.FieldInfo.8546.import // ino.module.FieldInfo.8546.import
@ -8,11 +8,11 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Vector; import java.util.Vector;
import mycompiler.myexception.JVMCodeException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.myexception.JVMCodeException;
// ino.class.FieldInfo.22068.declaration // ino.class.FieldInfo.22068.declaration
public class FieldInfo implements ClassFileMember public class FieldInfo implements ClassFileMember
// ino.end // ino.end

View File

@ -1,13 +1,16 @@
// ino.module.JVMCode.8547.package // ino.module.JVMCode.8547.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.JVMCode.8547.import // ino.module.JVMCode.8547.import
import java.util.Vector; import java.util.Vector;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mytype.GenericTypeVar;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
// ino.class.JVMCode.22140.description type=javadoc // ino.class.JVMCode.22140.description type=javadoc
/** /**
* Enthaelt die Befehle fuer die Umsetzung in JVM-Code und * Enthaelt die Befehle fuer die Umsetzung in JVM-Code und

View File

@ -1,5 +1,5 @@
// ino.module.Key.8548.package // ino.module.Key.8548.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.Key.8548.import // ino.module.Key.8548.import

View File

@ -1,5 +1,5 @@
// ino.module.MethodInfo.8549.package // ino.module.MethodInfo.8549.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.MethodInfo.8549.import // ino.module.MethodInfo.8549.import
@ -8,11 +8,11 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Vector; import java.util.Vector;
import mycompiler.myexception.JVMCodeException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.myexception.JVMCodeException;
// ino.class.MethodInfo.22923.declaration // ino.class.MethodInfo.22923.declaration
public class MethodInfo implements ClassFileMember public class MethodInfo implements ClassFileMember
// ino.end // ino.end

View File

@ -1,5 +1,5 @@
// ino.module.SignatureInfo.8550.package // ino.module.SignatureInfo.8550.package
package mycompiler.mybytecode; package de.dhbwstuttgart.bytecode;
// ino.end // ino.end
// ino.module.SignatureInfo.8550.import // ino.module.SignatureInfo.8550.import
@ -8,17 +8,20 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Vector; import java.util.Vector;
import mycompiler.myclass.ParameterList;
import mycompiler.myclass.UsedId;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mytype.BoundedGenericTypeVar;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.syntaxtree.ParameterList;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.type.BoundedGenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
// ino.class.SignatureInfo.22968.description type=javadoc // ino.class.SignatureInfo.22968.description type=javadoc

View File

@ -1,18 +1,24 @@
// ino.module.AClassOrInterface.8526.package // ino.module.AClassOrInterface.8526.package
package mycompiler; package de.dhbwstuttgart.core;
// ino.end // ino.end
// ino.module.AClassOrInterface.8526.import // ino.module.AClassOrInterface.8526.import
import java.util.Vector; import java.util.Vector;
import mycompiler.myclass.UsedId;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mymodifier.Modifiers;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.parser.JavaClassName;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
// ino.class.AClassOrInterface.21186.description type=javadoc // ino.class.AClassOrInterface.21186.description type=javadoc
/** /**
* Superklasse von Class und Interface. Beinhaltet gemeinsame Attribute * Superklasse von Class und Interface. Beinhaltet gemeinsame Attribute
@ -28,7 +34,7 @@ public interface AClassOrInterface
// ino.class.AClassOrInterface.21186.body // ino.class.AClassOrInterface.21186.body
{ {
public String getName(); public JavaClassName getName();
public Vector<UsedId> getSuperInterfaces(); public Vector<UsedId> getSuperInterfaces();
public void setSuperInterfaces(Vector<UsedId> vector); public void setSuperInterfaces(Vector<UsedId> vector);

View File

@ -1,19 +1,15 @@
package userinterface; package de.dhbwstuttgart.core;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.util.Vector;
import mycompiler.MyCompiler;
import mycompiler.MyCompilerAPI;
import mycompiler.mytypereconstruction.TypeinferenceResultSet;
import typinferenz.exceptions.TypeinferenceException;
import java.util.*; import java.util.*;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.log4j.varia.NullAppender; import org.apache.log4j.varia.NullAppender;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
public class ConsoleInterface { public class ConsoleInterface {
private static final String directory = System.getProperty("user.dir"); private static final String directory = System.getProperty("user.dir");

View File

@ -1,5 +1,5 @@
// ino.module.IItemWithOffset.8527.package // ino.module.IItemWithOffset.8527.package
package mycompiler; package de.dhbwstuttgart.core;
// ino.end // ino.end
// ino.class.IItemWithOffset.21249.declaration // ino.class.IItemWithOffset.21249.declaration

View File

@ -1,5 +1,5 @@
// ino.module.MyCompiler.8569.package // ino.module.MyCompiler.8569.package
package mycompiler; package de.dhbwstuttgart.core;
// ino.end // ino.end
@ -13,42 +13,41 @@ import java.io.Reader;
import java.io.StringReader; import java.io.StringReader;
import java.util.Vector; import java.util.Vector;
import mycompiler.mybytecode.ClassFile;
import mycompiler.myclass.Class;
import mycompiler.myclass.ClassBody;
import mycompiler.myclass.DeclId;
import mycompiler.myclass.FormalParameter;
import mycompiler.myclass.ImportDeclarations;
import mycompiler.myclass.Method;
import mycompiler.myclass.ParameterList;
import mycompiler.myclass.UsedId;
import mycompiler.myexception.CTypeReconstructionException;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myparser.JavaParser;
import mycompiler.myparser.Scanner;
import mycompiler.myparser.JavaParser.yyException;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.IMatchable;
import mycompiler.mytype.ITypeContainer;
import mycompiler.mytype.Pair;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytypereconstruction.TypeinferenceResultSet;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator; import org.apache.log4j.xml.DOMConfigurator;
import com.sun.corba.se.spi.orbutil.fsm.Guard.Result; import com.sun.corba.se.spi.orbutil.fsm.Guard.Result;
import com.sun.org.apache.xerces.internal.impl.xs.identity.Field; import com.sun.org.apache.xerces.internal.impl.xs.identity.Field;
import typinferenz.FunNInterface; import de.dhbwstuttgart.bytecode.ClassFile;
import typinferenz.ResultSet; import de.dhbwstuttgart.myexception.CTypeReconstructionException;
// ino.end import de.dhbwstuttgart.myexception.JVMCodeException;
import typinferenz.assumptions.TypeAssumptions; import de.dhbwstuttgart.parser.JavaParser;
import typinferenz.exceptions.DebugException; import de.dhbwstuttgart.parser.Scanner;
import typinferenz.exceptions.ParserError; import de.dhbwstuttgart.parser.JavaParser.yyException;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.syntaxtree.Class;
import de.dhbwstuttgart.syntaxtree.ClassBody;
import de.dhbwstuttgart.syntaxtree.FormalParameter;
import de.dhbwstuttgart.syntaxtree.ImportDeclarations;
import de.dhbwstuttgart.syntaxtree.Method;
import de.dhbwstuttgart.syntaxtree.ParameterList;
import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.IMatchable;
import de.dhbwstuttgart.syntaxtree.type.ITypeContainer;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.FunNInterface;
import de.dhbwstuttgart.typeinference.Pair;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
import de.dhbwstuttgart.typeinference.exceptions.ParserError;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
@ -175,7 +174,7 @@ public class MyCompiler implements MyCompilerAPI
// Klasse existiert, darf aber keine Parameterliste in der Definition haben // Klasse existiert, darf aber keine Parameterliste in der Definition haben
if( KlassenVektor.elementAt(k).get_ParaList().size() == 0 ) if( KlassenVektor.elementAt(k).get_ParaList().size() == 0 )
{ {
RefType RNeu = new RefType( TempParameter.getName(), null,TempParameter.getOffset()); RefType RNeu = new RefType( TempParameter.getName().toString(), null,TempParameter.getOffset());
inferencelog.debug( "Vorher: " + Parameter ); inferencelog.debug( "Vorher: " + Parameter );
// i-te Stelle ersetzen // i-te Stelle ersetzen
Parameter.set( i, RNeu ); Parameter.set( i, RNeu );
@ -562,7 +561,7 @@ public class MyCompiler implements MyCompilerAPI
* Generiert den Bytecode und das Class-File ¿½r den Syntaxbaum. * Generiert den Bytecode und das Class-File ¿½r den Syntaxbaum.
* @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden * @throws NullPointerException Wenn noch kein abstrakter Syntaxbaum vorhanden
* ist. * ist.
*/
@Override @Override
public Vector<ClassFile> codeGeneration(ResultSet result) public Vector<ClassFile> codeGeneration(ResultSet result)
throws NullPointerException, JVMCodeException throws NullPointerException, JVMCodeException
@ -580,7 +579,8 @@ public class MyCompiler implements MyCompilerAPI
codegenlog.info("Codegenerierung beendet!"); codegenlog.info("Codegenerierung beendet!");
return ret; return ret;
} }*/
// ino.method.main.21313.defdescription type=javadoc // ino.method.main.21313.defdescription type=javadoc
/** /**
@ -658,7 +658,7 @@ public class MyCompiler implements MyCompilerAPI
return OutputDir; return OutputDir;
} }
// ino.end // ino.end
/*
// ino.method.getFullyQualifiedNameFromClassname.21322.definition // ino.method.getFullyQualifiedNameFromClassname.21322.definition
public static String getFullyQualifiedNameFromClassname(String typ, ImportDeclarations declarations) public static String getFullyQualifiedNameFromClassname(String typ, ImportDeclarations declarations)
// ino.end // ino.end
@ -669,7 +669,7 @@ public class MyCompiler implements MyCompilerAPI
for(int j=0;j<declarations.size();j++){ for(int j=0;j<declarations.size();j++){
UsedId impDecl=declarations.elementAt(j); UsedId impDecl=declarations.elementAt(j);
if(impDecl.getSimpleName().equals(typ)){ if(impDecl.getSimpleName().equals(typ)){
ret=(impDecl.getQualifiedName()); ret=(impDecl.getQualifiedName().toString());
break; break;
} }
@ -677,7 +677,7 @@ public class MyCompiler implements MyCompilerAPI
return ret; return ret;
} }
// ino.end // ino.end
*/
// ino.method.makeRefTypesFullyQualified.21325.defdescription type=javadoc // ino.method.makeRefTypesFullyQualified.21325.defdescription type=javadoc
/** /**
* @author HOTI * @author HOTI
@ -686,7 +686,7 @@ public class MyCompiler implements MyCompilerAPI
* @param containedTypes Alle Typen, die die Klasse beinhaltet * @param containedTypes Alle Typen, die die Klasse beinhaltet
* @param name Alle Klassen, die es in den BasicAssumptions und im * @param name Alle Klassen, die es in den BasicAssumptions und im
* AbstractSyntaxTree gibt @param declarations Alle Import-Declarations * AbstractSyntaxTree gibt @param declarations Alle Import-Declarations
*/
// ino.end // ino.end
// ino.method.makeRefTypesFullyQualified.21325.definition // ino.method.makeRefTypesFullyQualified.21325.definition
public static void makeRefTypesFullyQualified(Vector<Type> containedTypes, ImportDeclarations declarations) public static void makeRefTypesFullyQualified(Vector<Type> containedTypes, ImportDeclarations declarations)
@ -716,7 +716,7 @@ public class MyCompiler implements MyCompilerAPI
} }
} }
// ino.end // ino.end
*/
/** /**
* @author Arne Lüdtke * @author Arne Lüdtke
* Ersetzt alle GTVs durch TPHs mit gleichem Namen. Arbeitet Rekursiv. * Ersetzt alle GTVs durch TPHs mit gleichem Namen. Arbeitet Rekursiv.
@ -737,7 +737,7 @@ public class MyCompiler implements MyCompilerAPI
if(tt instanceof GenericTypeVar) if(tt instanceof GenericTypeVar)
{ {
GenericTypeVar gtv = (GenericTypeVar)tt; GenericTypeVar gtv = (GenericTypeVar)tt;
paras.set(i,TypePlaceholder.backdoorCreate(gtv.getName())); paras.set(i,TypePlaceholder.backdoorCreate(gtv.getName().toString()));
} }
else else
{ {
@ -854,5 +854,12 @@ public class MyCompiler implements MyCompilerAPI
this.m_AbstractSyntaxTree.add(ret); this.m_AbstractSyntaxTree.add(ret);
return ret; return ret;
} }
@Override
public Vector<ClassFile> codeGeneration(ResultSet result)
throws NullPointerException, JVMCodeException {
// TODO Auto-generated method stub
return null;
}
} }
// ino.end // ino.end

View File

@ -1,5 +1,5 @@
// ino.module.MyCompilerAPI.8570.package // ino.module.MyCompilerAPI.8570.package
package mycompiler; package de.dhbwstuttgart.core;
// ino.end // ino.end
// ino.module.MyCompilerAPI.8570.import // ino.module.MyCompilerAPI.8570.import
@ -8,15 +8,15 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.Vector; import java.util.Vector;
import typinferenz.ResultSet; import de.dhbwstuttgart.bytecode.ClassFile;
import typinferenz.exceptions.ParserError; import de.dhbwstuttgart.myexception.CTypeReconstructionException;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.myexception.JVMCodeException;
import mycompiler.mybytecode.ClassFile; import de.dhbwstuttgart.parser.JavaParser;
import mycompiler.myexception.CTypeReconstructionException; import de.dhbwstuttgart.syntaxtree.SourceFile;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.typeinference.ResultSet;
import mycompiler.myparser.JavaParser; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import mycompiler.mytypereconstruction.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.exceptions.ParserError;
// ino.end import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
// ino.class.MyCompilerAPI.21328.description type=javadoc // ino.class.MyCompilerAPI.21328.description type=javadoc
/** /**

View File

@ -1,11 +1,11 @@
// ino.module.CTypeReconstructionException.8572.package // ino.module.CTypeReconstructionException.8572.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.CTypeReconstructionException.8572.import // ino.module.CTypeReconstructionException.8572.import
import java.util.Vector; import java.util.Vector;
import mycompiler.IItemWithOffset;
// ino.end import de.dhbwstuttgart.core.IItemWithOffset;
// ino.class.CTypeReconstructionException.23746.description type=javadoc // ino.class.CTypeReconstructionException.23746.description type=javadoc
/** /**

View File

@ -1,5 +1,5 @@
// ino.module.JVMCodeException.8573.package // ino.module.JVMCodeException.8573.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.class.JVMCodeException.23780.declaration // ino.class.JVMCodeException.23780.declaration
public class JVMCodeException extends Exception public class JVMCodeException extends Exception

View File

@ -1,5 +1,5 @@
// ino.module.MatchException.8574.package // ino.module.MatchException.8574.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.class.MatchException.23790.declaration // ino.class.MatchException.23790.declaration

View File

@ -1,5 +1,5 @@
// ino.module.SCClassBodyException.8575.package // ino.module.SCClassBodyException.8575.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.SCClassBodyException.8575.import // ino.module.SCClassBodyException.8575.import
import java.util.Vector; import java.util.Vector;

View File

@ -1,5 +1,5 @@
// ino.module.SCClassException.8576.package // ino.module.SCClassException.8576.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.SCClassException.8576.import // ino.module.SCClassException.8576.import
import java.util.Enumeration; import java.util.Enumeration;

View File

@ -1,5 +1,5 @@
// ino.module.SCExcept.8577.package // ino.module.SCExcept.8577.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.SCExcept.8577.import // ino.module.SCExcept.8577.import

View File

@ -1,5 +1,5 @@
// ino.module.SCException.8578.package // ino.module.SCException.8578.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.SCException.8578.import // ino.module.SCException.8578.import
import java.util.Enumeration; import java.util.Enumeration;

View File

@ -1,5 +1,5 @@
// ino.module.SCMethodException.8579.package // ino.module.SCMethodException.8579.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.SCMethodException.8579.import // ino.module.SCMethodException.8579.import
import java.util.Vector; import java.util.Vector;

View File

@ -1,5 +1,5 @@
// ino.module.SCStatementException.8580.package // ino.module.SCStatementException.8580.package
package mycompiler.myexception; package de.dhbwstuttgart.myexception;
// ino.end // ino.end
// ino.module.SCStatementException.8580.import // ino.module.SCStatementException.8580.import
import java.util.Vector; import java.util.Vector;

View File

@ -1,9 +1,9 @@
package mycompiler.myparser; package de.dhbwstuttgart.parser;
import java.util.Vector; import java.util.Vector;
import mycompiler.mytype.RefType; import de.dhbwstuttgart.syntaxtree.type.RefType;
import mycompiler.mytype.Type; import de.dhbwstuttgart.syntaxtree.type.Type;
public class BoundedClassIdentifierList extends Vector<Type>{ public class BoundedClassIdentifierList extends Vector<Type>{
@ -20,6 +20,6 @@ public class BoundedClassIdentifierList extends Vector<Type>{
} }
public void addOffsetOff(RefType refType) { public void addOffsetOff(RefType refType) {
this.endOffset = refType.getOffset() + refType.getName().length(); this.endOffset = refType.getOffset() + refType.getName().toString().length();
} }
} }

View File

@ -1,12 +1,12 @@
// ino.module.ClassAndParameter.8613.package // ino.module.ClassAndParameter.8613.package
package mycompiler.myparser; package de.dhbwstuttgart.parser;
// ino.end // ino.end
// ino.module.ClassAndParameter.8613.import // ino.module.ClassAndParameter.8613.import
import java.util.Vector; import java.util.Vector;
import mycompiler.mytype.ParaList;
import mycompiler.mytype.Type; import de.dhbwstuttgart.syntaxtree.type.ParaList;
// ino.end import de.dhbwstuttgart.syntaxtree.type.Type;
// ino.class.ClassAndParameter.24323.description type=javadoc // ino.class.ClassAndParameter.24323.description type=javadoc
/** /**

View File

@ -1,9 +1,9 @@
package mycompiler.myparser; package de.dhbwstuttgart.parser;
import java.util.Vector; import java.util.Vector;
import typinferenz.exceptions.DebugException; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.typeinference.exceptions.DebugException;
public class GenericVarDeclarationList { public class GenericVarDeclarationList {

View File

@ -1,12 +1,12 @@
// ino.module.InterfaceAndParameter.8614.package // ino.module.InterfaceAndParameter.8614.package
package mycompiler.myparser; package de.dhbwstuttgart.parser;
// ino.end // ino.end
// ino.module.InterfaceAndParameter.8614.import // ino.module.InterfaceAndParameter.8614.import
import java.util.Vector; import java.util.Vector;
import mycompiler.mytype.ParaList;
import mycompiler.mytype.Type; import de.dhbwstuttgart.syntaxtree.type.ParaList;
// ino.end import de.dhbwstuttgart.syntaxtree.type.Type;
// ino.class.InterfaceAndParameter.24353.description type=javadoc // ino.class.InterfaceAndParameter.24353.description type=javadoc
/** /**

View File

@ -1,11 +1,11 @@
// ino.module.InterfaceList.8615.package // ino.module.InterfaceList.8615.package
package mycompiler.myparser; package de.dhbwstuttgart.parser;
// ino.end // ino.end
// ino.module.InterfaceList.8615.import // ino.module.InterfaceList.8615.import
import java.util.Vector; import java.util.Vector;
import mycompiler.myclass.UsedId;
// ino.end import de.dhbwstuttgart.syntaxtree.misc.UsedId;
// ino.class.InterfaceList.24383.description type=javadoc // ino.class.InterfaceList.24383.description type=javadoc
/** /**

View File

@ -0,0 +1,123 @@
package de.dhbwstuttgart.parser;
import java.util.Vector;
import de.dhbwstuttgart.syntaxtree.type.RefType;
/**
* Stellt den Namen einer Java Klasse dar.
* Dieser kann auch den Packagenamen mit beinhalten: java.util.Vector
*
* @author janulrich
*
*/
public class JavaClassName {
private String name;
private PackageName packageName;
public JavaClassName(String name){
String[] names = name.split("[.]");
boolean match = true;
if(names.length == 1){
//packageName = new PackageName();
this.name = name;
}else {
name = names[names.length-1];
Vector<String> packageNames = new Vector<String>();
for(int i = 0; i<names.length-1;i++){
packageNames.add(names[i]);
}
packageName = new PackageName(packageNames);
this.name = names[names.length-1];
}
}
//Auto-generated hashCode:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
//result = prime * result
// + ((packageName == null) ? 0 : packageName.hashCode()); //PackageName does not infect hashCode
return result;
}
/**
* Namen sind nur gleich, wenn bei den beiden zu vergleichenden JavaClassNames auch das Package angegeben ist
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if(obj instanceof String)
return this.toString().equals(obj) || (this.name != null && this.name.equals(obj)); //Auch mit Strings als Klassennamen kompatibel TODO: sollte bald obsolet sein
if (getClass() != obj.getClass())
return false;
JavaClassName other = (JavaClassName) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (packageName != null && other.packageName != null) {
if (!packageName.equals(other.packageName))
return false;//Spezialfall, nicht beide Typen müssen eindeutig mit Packagenamen angegeben werden
}
return true;
}
@Override
public String toString() {
return (packageName!=null ? packageName.toString() : "") + name;
}
}
class PackageName{
Vector<String> names = new Vector<String>();
public PackageName(Vector<String> packageNames) {
names = packageNames;
}
public PackageName() {
//Do nothing
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((names == null) ? 0 : names.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PackageName other = (PackageName) obj;
if (names == null) {
if (other.names != null)
return false;
} else if (!names.equals(other.names))
return false;
return true;
}
@Override
public String toString() {
String ret = "";
if(names == null)return "";
for(String n : names)ret+=n+".";
return ret;
}
}

View File

@ -6,7 +6,7 @@
* * * *
********************************************/ ********************************************/
// user code: // user code:
package mycompiler.myparser; package de.dhbwstuttgart.parser;
public class JavaLexer { public class JavaLexer {

View File

@ -7,7 +7,7 @@
********************************************/ ********************************************/
// user code: // user code:
package mycompiler.myparser; package de.dhbwstuttgart.parser;
%% %%

View File

@ -4,105 +4,25 @@
Backup von JavaParser.jay 10.April 17 Uhr Backup von JavaParser.jay 10.April 17 Uhr
*/ */
package mycompiler.myparser; package de.dhbwstuttgart.parser;
import mycompiler.myclass.FieldDeclaration; import de.dhbwstuttgart.core.AClassOrInterface;
import mycompiler.myclass.GenericDeclarationList; import de.dhbwstuttgart.syntaxtree.Class;
import mycompiler.myclass.Field; import de.dhbwstuttgart.syntaxtree.ImportDeclarations;
import de.dhbwstuttgart.syntaxtree.Interface;
import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.typeinference.Pair;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.Void;
import de.dhbwstuttgart.*;
import de.dhbwstuttgart.syntaxtree.*;
import de.dhbwstuttgart.syntaxtree.misc.*;
import de.dhbwstuttgart.syntaxtree.modifier.*;
import de.dhbwstuttgart.syntaxtree.operator.*;
import de.dhbwstuttgart.syntaxtree.type.*;
import de.dhbwstuttgart.syntaxtree.statement.*;
import java.util.Vector; import java.util.Vector;
import mycompiler.SourceFile;
import mycompiler.AClassOrInterface;
import mycompiler.myclass.Class;
import mycompiler.myclass.ClassBody;
import mycompiler.myclass.Constructor;
import mycompiler.myclass.Constant;
import mycompiler.myclass.ImportDeclarations;
import mycompiler.myclass.DeclId;
import mycompiler.myclass.ExceptionList;
import mycompiler.myclass.FormalParameter;
import mycompiler.myclass.Method;
import mycompiler.myclass.ParameterList;
import mycompiler.myclass.UsedId;
import mycompiler.myinterface.Interface;
import mycompiler.myinterface.InterfaceBody;
import mycompiler.mymodifier.Abstract;
import mycompiler.mymodifier.Final;
import mycompiler.mymodifier.Modifier;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mymodifier.Private;
import mycompiler.mymodifier.Protected;
import mycompiler.mymodifier.Public;
import mycompiler.mymodifier.Static;
import mycompiler.myoperator.AndOp;
import mycompiler.myoperator.DivideOp;
import mycompiler.myoperator.EqualOp;
import mycompiler.myoperator.GreaterEquOp;
import mycompiler.myoperator.GreaterOp;
import mycompiler.myoperator.LessEquOp;
import mycompiler.myoperator.LessOp;
import mycompiler.myoperator.MinusOp;
import mycompiler.myoperator.ModuloOp;
import mycompiler.myoperator.NotEqualOp;
import mycompiler.myoperator.Operator;
import mycompiler.myoperator.OrOp;
import mycompiler.myoperator.PlusOp;
import mycompiler.myoperator.TimesOp;
import mycompiler.mystatement.ArgumentList;
import mycompiler.mystatement.Assign;
import mycompiler.mystatement.Binary;
import mycompiler.mystatement.Block;
import mycompiler.mystatement.BoolLiteral;
import mycompiler.mystatement.FloatLiteral;
import mycompiler.mystatement.DoubleLiteral;
import mycompiler.mystatement.LongLiteral;
import mycompiler.mystatement.CastExpr;
import mycompiler.mystatement.CharLiteral;
import mycompiler.mystatement.EmptyStmt;
import mycompiler.mystatement.Expr;
import mycompiler.mystatement.ExprStmt;
import mycompiler.mystatement.IfStmt;
import mycompiler.mystatement.InstanceOf;
import mycompiler.mystatement.IntLiteral;
import mycompiler.mystatement.Literal;
import mycompiler.mystatement.InstVar;
import mycompiler.mystatement.LocalOrFieldVar;
import mycompiler.mystatement.LocalVarDecl;
import mycompiler.mystatement.MethodCall;
import mycompiler.mystatement.NegativeExpr;
import mycompiler.mystatement.NewClass;
import mycompiler.mystatement.NotExpr;
import mycompiler.mystatement.Null;
import mycompiler.mystatement.PositivExpr;
import mycompiler.mystatement.PostDecExpr;
import mycompiler.mystatement.PostIncExpr;
import mycompiler.mystatement.PreDecExpr;
import mycompiler.mystatement.PreIncExpr;
import mycompiler.mystatement.Receiver;
import mycompiler.mystatement.Return;
import mycompiler.mystatement.Statement;
import mycompiler.mystatement.StringLiteral;
import mycompiler.mystatement.This;
import mycompiler.mystatement.UnaryMinus;
import mycompiler.mystatement.UnaryNot;
import mycompiler.mystatement.UnaryPlus;
import mycompiler.mystatement.WhileStmt;
import mycompiler.mystatement.ForStmt;
import mycompiler.mystatement.LambdaExpression;
import mycompiler.mytype.BaseType;
import mycompiler.mytype.BooleanType;
import mycompiler.mytype.CharacterType;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.BoundedGenericTypeVar;
import mycompiler.mytype.IntegerType;
import mycompiler.mytype.ParaList;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytype.Void;
import mycompiler.mytype.WildcardType;
import mycompiler.mytype.ExtendsWildcardType;
import mycompiler.mytype.SuperWildcardType;
import mycompiler.mytype.Pair;
public class JavaParser{ public class JavaParser{
public Vector path = new Vector(); public Vector path = new Vector();
@ -226,6 +146,7 @@ public Vector<Pair> testPair = new Vector<Pair>();
%type <DeclId> variabledeclarator %type <DeclId> variabledeclarator
%type <DeclId> variabledeclaratorid %type <DeclId> variabledeclaratorid
%type <UsedId> simplename %type <UsedId> simplename
%type <UsedId> typename
%type <UsedId> qualifiedname %type <UsedId> qualifiedname
%type <UsedId> importqualifiedname %type <UsedId> importqualifiedname
%type <UsedId> importdeclaration %type <UsedId> importdeclaration
@ -562,7 +483,7 @@ paralist : IDENTIFIER
ParaList pl = new ParaList(); ParaList pl = new ParaList();
/* #JB# 05.04.2005 */ /* #JB# 05.04.2005 */
/* ########################################################### */ /* ########################################################### */
pl.getParalist().addElement(new GenericTypeVar($1.getLexem(), $1.getOffset())); pl.getParalist().addElement(new GenericTypeVar($1.getLexem(),null, $1.getOffset()));
//pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) ); //pl.getParalist().addElement( new TypePlaceholder($1.getLexem()) );
/* ########################################################### */ /* ########################################################### */
org.apache.log4j.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + $1.getLexem() + " TV"); org.apache.log4j.Logger.getLogger("parser").debug( "IDENTIFIER --> Paralist f�r " + $1.getLexem() + " TV");
@ -588,7 +509,7 @@ paralist : IDENTIFIER
/* #JB# 05.04.2005 */ /* #JB# 05.04.2005 */
/* ########################################################### */ /* ########################################################### */
$1.getParalist().addElement(new GenericTypeVar($3.getLexem(),$3.getOffset())); $1.getParalist().addElement(new GenericTypeVar($3.getLexem(), null,$3.getOffset()));
//$1.getParalist().addElement(new TypePlaceholder($3.getLexem())); //$1.getParalist().addElement(new TypePlaceholder($3.getLexem()));
/* ########################################################### */ /* ########################################################### */
org.apache.log4j.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + $3.getLexem() + ": TV"); org.apache.log4j.Logger.getLogger("parser").debug( "paralist ',' IDENTIFIER --> Paralist f�r " + $3.getLexem() + ": TV");
@ -786,7 +707,8 @@ classbodydeclaration : classmemberdeclaration
$$=$1; $$=$1;
} }
//*/ //*/
classorinterfacetype : simplename parameter
classorinterfacetype : name parameter
{ {
if ($2 != null) { if ($2 != null) {
//$1.set_ParaList($2.get_ParaList()); //$1.set_ParaList($2.get_ParaList());
@ -808,11 +730,22 @@ typelist : type
$1.add($3); $1.add($3);
$$=$1; $$=$1;
} }
| typelist ',' wildcardparameter
{
$1.add($3);
$$=$1;
}
| wildcardparameter
{
Vector<Type> tl = new Vector<Type>();
tl.add($1);
$$ = tl;
}
/* PL 05-07-28 erg�nzt, weil jeder classorinterfacetype auch parametrisiert sein kann */ /* PL 05-07-28 erg�nzt, weil jeder classorinterfacetype auch parametrisiert sein kann */
//TODO: Das hier ist möglicherweise falsch. Ein Typ hat keine parameterliste, nur eine Liste von RefTypes //TODO: Das hier ist möglicherweise falsch. Ein Typ hat keine parameterliste, nur eine Liste von RefTypes
parameter : { $$ = null; } parameter : { $$ = null; }
| '<'typelist'>'//'<'paralist'>'//typelist statt | '<' typelist '>' //'<'paralist'>'//typelist statt
{ {
$$ = $2; $$ = $2;
} }
@ -1044,11 +977,11 @@ boundedClassParameters : boundedClassParameter
// returns GenericTypeVar // returns GenericTypeVar
boundedMethodParameter : IDENTIFIER boundedMethodParameter : IDENTIFIER
{ {
$$=new GenericTypeVar($1.getLexem(),$1.getOffset()); $$=new GenericTypeVar($1.getLexem(),null,$1.getOffset());
} }
| IDENTIFIER EXTENDS boundedclassidentifierlist | IDENTIFIER EXTENDS boundedclassidentifierlist
{ {
BoundedGenericTypeVar gtv=new BoundedGenericTypeVar($1.getLexem(), $3, $1.getOffset() ,$3.getEndOffset()); BoundedGenericTypeVar gtv=new BoundedGenericTypeVar($1.getLexem(), $3,null, $1.getOffset() ,$3.getEndOffset());
//gtv.setBounds($3); //gtv.setBounds($3);
$$=gtv; $$=gtv;
} }
@ -1058,7 +991,7 @@ boundedclassidentifierlist : referencetype
Vector<Type> vec=new Vector<Type>(); Vector<Type> vec=new Vector<Type>();
vec.addElement($1); vec.addElement($1);
containedTypes.addElement($1); containedTypes.addElement($1);
$$=new BoundedClassIdentifierList(vec, $1.getOffset()+$1.getName().length()); $$=new BoundedClassIdentifierList(vec, $1.getOffset()+$1.getName().toString().length());
} }
| boundedclassidentifierlist '&' referencetype | boundedclassidentifierlist '&' referencetype
{ {
@ -1357,6 +1290,28 @@ primitivetype :BOOLEAN
$$=$1; $$=$1;
} }
referencelongtype : typename parameter
{
if ($2 != null) {
//$1.set_ParaList($2.get_ParaList());
$1.set_ParaList($2);//Änderung von Andreas Stadelmeier. Type statt GenericVarType
/* otth: originale (also diese) Parameterliste retten */
//((UsedId)$1).vParaOrg = new Vector<Type>( $2.get_ParaList() );
}
UsedId uid = $1;
RefType RT = new RefType(uid.getOffset());
RT.set_ParaList(uid.get_RealParaList());
RT.setName(uid.getQualifiedName());
//PL 05-07-30 eingefuegt containedTypes ANFANG
containedTypes.addElement(RT);
//PL 05-07-30 eingefuegt containedTypes ENDE
$$=RT;
}
referencetype :classorinterfacetype referencetype :classorinterfacetype
{ {
org.apache.log4j.Logger.getLogger("parser").debug("T->Parser->referenctype: " + $1); org.apache.log4j.Logger.getLogger("parser").debug("T->Parser->referenctype: " + $1);
@ -1375,6 +1330,8 @@ referencetype :classorinterfacetype
$$=RT; $$=RT;
} }
/* 05-07-28 PL Parameterdeklarationen zur classorinterfacetype verschoben */ /* 05-07-28 PL Parameterdeklarationen zur classorinterfacetype verschoben */
variabledeclarator : variabledeclaratorid variabledeclarator : variabledeclaratorid

View File

@ -1,5 +1,5 @@
// ino.module.Scanner.8618.package // ino.module.Scanner.8618.package
package mycompiler.myparser; package de.dhbwstuttgart.parser;
// ino.end // ino.end
// ino.class.Scanner.24842.declaration // ino.class.Scanner.24842.declaration
public class Scanner extends JavaLexer implements JavaParser.yyInput public class Scanner extends JavaLexer implements JavaParser.yyInput

View File

@ -1,5 +1,5 @@
// ino.module.Token.8619.package // ino.module.Token.8619.package
package mycompiler.myparser; package de.dhbwstuttgart.parser;
// ino.end // ino.end
// ino.class.Token.24859.declaration // ino.class.Token.24859.declaration
public class Token public class Token

View File

@ -1,10 +1,9 @@
// ino.module.BasicAssumptionClass.8552.package // ino.module.BasicAssumptionClass.8552.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.BasicAssumptionClass.8552.import // ino.module.BasicAssumptionClass.8552.import
import mycompiler.mymodifier.Modifiers; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
// ino.end
// ino.class.BasicAssumptionClass.23000.declaration // ino.class.BasicAssumptionClass.23000.declaration
public class BasicAssumptionClass extends Class public class BasicAssumptionClass extends Class

View File

@ -1,5 +1,5 @@
// ino.module.Class.8553.package // ino.module.Class.8553.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.Class.8553.import // ino.module.Class.8553.import
import java.util.ArrayList; import java.util.ArrayList;
@ -9,81 +9,31 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import mycompiler.AClassOrInterface;
import mycompiler.IItemWithOffset;
import mycompiler.SyntaxTreeNode;
import mycompiler.mybytecode.ClassFile;
import mycompiler.myexception.CTypeReconstructionException;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myexception.SCClassBodyException;
import mycompiler.myexception.SCClassException;
import mycompiler.myexception.SCExcept;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mystatement.*;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.Pair;
import mycompiler.mytype.RefType;
import mycompiler.mytype.SuperWildcardType;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytype.WildcardType;
import mycompiler.mytypereconstruction.CReconstructionTuple;
import mycompiler.mytypereconstruction.CSubstitution;
import mycompiler.mytypereconstruction.CSupportData;
import mycompiler.mytypereconstruction.CTriple;
import mycompiler.mytypereconstruction.TypeinferenceResultSet;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent;
import mycompiler.mytypereconstruction.set.CReconstructionTupleSet;
import mycompiler.mytypereconstruction.set.CSubstitutionSet;
import mycompiler.mytypereconstruction.set.CTripleSet;
import mycompiler.mytypereconstruction.set.CTypeAssumptionSet;
import mycompiler.mytypereconstruction.set.IHashSetKey;
import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption;
import mycompiler.mytypereconstruction.typeassumptionkey.CMethodKey;
import mycompiler.mytypereconstruction.unify.FC_TTO;
import mycompiler.mytypereconstruction.unify.Unify;
import mycompiler.SourceFile;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end
import de.dhbwstuttgart.core.AClassOrInterface;
import de.dhbwstuttgart.core.IItemWithOffset;
import de.dhbwstuttgart.parser.JavaClassName;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import de.dhbwstuttgart.syntaxtree.statement.Block;
import de.dhbwstuttgart.syntaxtree.statement.Expr;
import de.dhbwstuttgart.syntaxtree.statement.Statement;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.syntaxtree.type.WildcardType;
import de.dhbwstuttgart.typeinference.*;
import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
import de.dhbwstuttgart.typeinference.unify.FC_TTO;
import de.dhbwstuttgart.typeinference.unify.Unify;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import typinferenz.ConstraintsSet;
import typinferenz.JavaCodeResult;
import typinferenz.OderConstraint;
import typinferenz.ResultSet;
import typinferenz.Typeable;
import typinferenz.UndConstraint;
import typinferenz.FunN;
import typinferenz.assumptions.ClassAssumption;
import typinferenz.assumptions.TypeAssumptions;
import typinferenz.exceptions.DebugException;
import typinferenz.exceptions.TypeinferenceException;
import typinferenz.typedeployment.TypeInsertPoint;
import typinferenz.*;
// ino.class.Class.23010.declaration // ino.class.Class.23010.declaration
@ -111,9 +61,9 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
{ {
this.pkgName = pkgName; this.pkgName = pkgName;
} }
public String getName() public JavaClassName getName()
{ {
return name; return new JavaClassName((this.pkgName!=null ? this.pkgName.toString() +"." : "") +this.name);
} }
public void setName(String strName) public void setName(String strName)
{ {
@ -325,7 +275,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
* @param typeinferenceResult - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen. * @param typeinferenceResult - Das ResultSet einer Typinferierung oder null, falls alle Typen eindeutig feststehen.
* @return * @return
* @throws JVMCodeException * @throws JVMCodeException
*/
// ino.method.codegen.23071.definition // ino.method.codegen.23071.definition
public ClassFile codegen(ResultSet typeinferenceResult) public ClassFile codegen(ResultSet typeinferenceResult)
throws JVMCodeException throws JVMCodeException
@ -351,7 +301,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
//geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen: //geändert von Andreas Stadelmeier: pkgName wird nicht mehr aus dem SourceFile ausgelesen:
String packageName = ""; String packageName = "";
if(pkgName != null) packageName = pkgName.get_Name_1Element(); if(pkgName != null) packageName = pkgName.get_Name_1Element();
classfile.add_class(getName(), packageName, superClass, getAccessFlags()); classfile.add_class(getName(), superClass, getAccessFlags());
// Handling fuer Superinterfaces // Handling fuer Superinterfaces
classfile.addSuperInterfaces(getSuperInterfaces()); classfile.addSuperInterfaces(getSuperInterfaces());
@ -375,25 +325,8 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
codegenlog.info("Compilierung erfolgreich abgeschlossen, "+ getName() + ".class erstellt."); codegenlog.info("Compilierung erfolgreich abgeschlossen, "+ getName() + ".class erstellt.");
return classfile; return classfile;
} }
*/
public void codegen(ClassFile classfile, Vector paralist)
throws JVMCodeException
{
for(int i=0 ; i < this.getFields().size() ; i++)
{
/*
* if(this.fielddecl.elementAt(i) instanceof InstVarDecl)
{
((InstVarDecl)this.fielddecl.elementAt(i)).codegen(classfile, paralist);
}
else
*/
{
this.fielddecl.elementAt(i).codegen(classfile, paralist);
}
}
}
public void set_UsedId (UsedId uid) public void set_UsedId (UsedId uid)
// ino.end // ino.end
// ino.method.set_UsedId.23074.body // ino.method.set_UsedId.23074.body
@ -451,7 +384,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
// ino.method.get_Superclass_Name.23086.definition // ino.method.get_Superclass_Name.23086.definition
public String get_Superclass_Name() public JavaClassName get_Superclass_Name()
// ino.end // ino.end
// ino.method.get_Superclass_Name.23086.body // ino.method.get_Superclass_Name.23086.body
{ {
@ -644,7 +577,6 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
// ino.end // ino.end
// ino.method.TRProg.23110.definition // ino.method.TRProg.23110.definition
public ConstraintsSet typeReconstruction(FC_TTO supportData, TypeAssumptions globalAssumptions) public ConstraintsSet typeReconstruction(FC_TTO supportData, TypeAssumptions globalAssumptions)
throws CTypeReconstructionException
// ino.end // ino.end
// ino.method.TRProg.23110.body // ino.method.TRProg.23110.body
{ {
@ -655,6 +587,8 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
// Und los geht's: // Und los geht's:
////////////////////////////// //////////////////////////////
inferencelog.info("Rufe TRStart()..."); inferencelog.info("Rufe TRStart()...");
typinferenzLog.debug("Erstellte FiniteClosure: "+supportData);
////////////////////////////// //////////////////////////////
// Ab hier ... // Ab hier ...
// @author A10023 - Andreas Stadelmeier: // @author A10023 - Andreas Stadelmeier:
@ -882,7 +816,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden. this.typeAssumptions = assumptions; //Diese müssen anschließend nicht wieder generiert werden.
return assumptions; return assumptions;
} }
/*
public ConstraintsSet TYPE(Vector<Method> methodList, Vector<Expr> fielddeclarationList, TypeAssumptions assumptions){ public ConstraintsSet TYPE(Vector<Method> methodList, Vector<Expr> fielddeclarationList, TypeAssumptions assumptions){
ConstraintsSet ret = new ConstraintsSet(); ConstraintsSet ret = new ConstraintsSet();
// Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode. // Die Felddeklarationen werden zu den Assumptions hinzugefügt und gelten danach für jede Methode.
@ -897,31 +831,8 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
} }
return ret; return ret;
} }
*/
// ino.method.clear.23113.defdescription type=javadoc
/**
* Entfernt Annahmen ¿½r lokale Variablen, die ¿½r Methodenparameter erzeugt
* worden sind. (siehe Algorithmus 5.17 TRProg, Martin Pl�micke)
* <br/>Author: ¿½rg ¿½uerle
* @param V
* @param locals
*/
// ino.end
// ino.method.clear.23113.definition
void clear(CTypeAssumptionSet V, Vector<CTypeAssumption> locals)
// ino.end
// ino.method.clear.23113.body
{
Iterator<CTypeAssumption> localsIt = locals.iterator();
while(localsIt.hasNext()){
CTypeAssumption local = localsIt.next();
CTypeAssumption assum = V.getElement(local.getHashSetKey());
if(assum!=null){
V.removeElement(local.getHashSetKey());
}
}
}
// ino.end
// ino.method.RetType.23119.defdescription type=javadoc // ino.method.RetType.23119.defdescription type=javadoc
/** /**
@ -931,7 +842,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
* @param me * @param me
* @param V * @param V
* @return * @return
*/
// ino.end // ino.end
// ino.method.RetType.23119.definition // ino.method.RetType.23119.definition
private Type RetType(Method me, CTypeAssumptionSet V) private Type RetType(Method me, CTypeAssumptionSet V)
@ -946,6 +857,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
} }
// ino.end // ino.end
*/
// ino.method.toString.23125.defdescription type=javadoc // ino.method.toString.23125.defdescription type=javadoc
/** /**
* <br/>Author: Martin Pl�micke * <br/>Author: Martin Pl�micke
@ -1023,128 +935,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
// //
// } // }
// ino.method.addOffsetsToAssumption.23131.defdescription type=javadoc
/**
* Methode ¿½gt zu einer CTypeAssumption alle
* Offsets hinzu, wo die Variable benutzt wird.
* <br/>Author: Thomas Hornberger 07.04.2006
* <br/>Author: Arne Lüdtke 20.01.2007, Auf Polymorphie erweitert.
* Wird nicht mehr verwendet. In Block ausgelagert.
* @return
*/
// ino.end
// ino.method.addOffsetsToAssumption.23131.definition
public static void addOffsetsToAssumption(CTypeAssumption localAssumption, Block localBlock,String NameVariable,boolean isMemberVariable)
// ino.end
// ino.method.addOffsetsToAssumption.23131.body
{
/*if(localBlock!=null){
for(Object vectorObjekt : localBlock.statements) //durchlaufe alle Statements dieses Blocks
{
if(vectorObjekt instanceof Block) //Bei Block
{
Block b = (Block)vectorObjekt;
addOffsetsToAssumption(localAssumption,b,NameVariable,isMemberVariable);//rekursiver Aufruf
}
else
{
String Name_Superklasse = vectorObjekt.getClass().getSuperclass().getSimpleName();
if(Name_Superklasse.equals("Statement")) //Bei Statement
{
Statement s = (Statement)vectorObjekt;
try{
if(addOffsetsToStatement(localAssumption,s,NameVariable,isMemberVariable)==false)
{break;}}
catch(NullPointerException NPE){}
}
else if(Name_Superklasse.equals("Expr") || Name_Superklasse.equals("BinaryExpr") || Name_Superklasse.equals("UnaryExpr")) //Bei Expression
{
Expr e = (Expr)vectorObjekt;
try{
addOffsetsToExpression(localAssumption,e,NameVariable,isMemberVariable);}
catch(NullPointerException NPE){}
}
}
}}*/
}
// ino.end
// ino.method.addOffsetsToStatement.23134.defdescription type=javadoc
/**
* Hilfs-Methode ¿½r die Offset-Zuweisung
* durchsucht ein Statement rekursiv
* <br/>Author: Thomas Hornberger 08.04.2006
* <br/>Author: Arne Lüdtke 20.10.2007, Auf Polymorphie umgebaut.
* @return
*/
// ino.end
// ino.method.addOffsetsToStatement.23134.definition
public static boolean addOffsetsToStatement(CTypeAssumption localAssumption,Statement statement, String NameVariable, boolean isMemberVariable)
// ino.end
// ino.method.addOffsetsToStatement.23134.body
{
return statement.addOffsetsToStatement(localAssumption,NameVariable,isMemberVariable);
/*if(statement instanceof Block) //Wenn Block
{
Block b = (Block)statement;
addOffsetsToAssumption(localAssumption,b,NameVariable,isMemberVariable);
}
else if(statement instanceof IfStmt)//Wenn if
{
IfStmt i = (IfStmt)statement;
addOffsetsToExpression(localAssumption,i.expr,NameVariable,isMemberVariable);
addOffsetsToStatement(localAssumption,i.else_block,NameVariable,isMemberVariable);
addOffsetsToStatement(localAssumption,i.then_block,NameVariable,isMemberVariable);
}
else if(statement instanceof Return)//Wenn Return
{
Return r = (Return)statement;
addOffsetsToExpression(localAssumption,r.retexpr,NameVariable,isMemberVariable);
}
else if(statement instanceof WhileStmt)//Wenn While
{
WhileStmt w = (WhileStmt)statement;
addOffsetsToExpression(localAssumption,w.expr,NameVariable,isMemberVariable);
addOffsetsToStatement(localAssumption,w.loop_block,NameVariable,isMemberVariable);
}
else if(statement instanceof LocalVarDecl)//Wenn Lokale-Variable-Deklaration
{
isMemberVariable=true;//hoth 02.05.06
if(isMemberVariable)//Wenn Objektvariable
{
LocalVarDecl l = (LocalVarDecl)statement;
if(l.get_Name().equals(NameVariable))
{
if(isFirstLocalVarDecl==false)
{return false;}//Wenn jetzt lokale Variable kommt, dann springe raus
else
{isFirstLocalVarDecl=false;}
}
}
}
return true;*/
}
// ino.end
// ino.method.addOffsetsToExpression.23137.defdescription type=javadoc
/**
* Hilfs-Methode ¿½r die Offset-Zuweisung
* durchsucht eine Expression rekursiv
* <br/>Author: Thomas Hornberger 07.04.2006
* <br/>Authos: Arne Lüdtke 20.01.2007, Auf Polymorphie umgebaut.
* @return
*/
// ino.end
// ino.method.addOffsetsToExpression.23137.definition
public static void addOffsetsToExpression(CTypeAssumption localAssumption,Expr expression, String NameVariable,boolean isMemberVariable)
// ino.end
// ino.method.addOffsetsToExpression.23137.body
{
expression.addOffsetsToExpression(localAssumption,NameVariable,isMemberVariable);
}
// ino.end
// ino.method.getSimpleName.23140.defdescription type=javadoc // ino.method.getSimpleName.23140.defdescription type=javadoc
/** /**
* HOTI * HOTI
@ -1159,7 +950,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
// ino.end // ino.end
// ino.method.getSimpleName.23140.body // ino.method.getSimpleName.23140.body
{ {
return UsedId.createFromQualifiedName(getName(),-1).getSimpleName(); return UsedId.createFromQualifiedName(getName().toString(),-1).getSimpleName();
} }
// ino.end // ino.end
@ -1281,7 +1072,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
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. 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().toString(), this.get_ParaList(), 0);
} }
@ -1334,10 +1125,19 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
} }
} }
if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden: if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden:
Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName(), this)); Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this));
this.addField(standardKonstruktor); this.addField(standardKonstruktor);
} }
if(this.genericClassParameters == null)this.setGenericParameter(new GenericDeclarationList(new Vector<GenericTypeVar>(), 0));
for(Type t : this.get_ParaList()){
if(t instanceof GenericTypeVar)this.genericClassParameters.add((GenericTypeVar)t);
else this.genericClassParameters.add(new GenericTypeVar(t.get_Name(),this,-1));
}
for(GenericTypeVar gtv : this.getGenericParameter()){
gtv.setParentClass(this);;
}
//TODO: Umwandlung zu RefTypes funktioniert noch nicht richtig. (siehe LambdaTest2) //TODO: Umwandlung zu RefTypes funktioniert noch nicht richtig. (siehe LambdaTest2)
//Als RefType geparste Generische Variablen umwandeln: //Als RefType geparste Generische Variablen umwandeln:
this.wandleRefTypeAttributes2GenericAttributes(); this.wandleRefTypeAttributes2GenericAttributes();
@ -1353,6 +1153,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
Vector<SyntaxTreeNode> ret = new Vector<SyntaxTreeNode>(); Vector<SyntaxTreeNode> ret = new Vector<SyntaxTreeNode>();
for(Field f : this.getFields()){ for(Field f : this.getFields()){
ret.add(f); ret.add(f);
ret.addAll(this.getGenericParameter());
} }
return ret; return ret;
} }
@ -1367,7 +1168,7 @@ public class Class extends SyntaxTreeNode implements AClassOrInterface, IItemWit
} }
@Override @Override
public Iterable<GenericTypeVar> getGenericParameter() { public Vector<GenericTypeVar> getGenericParameter() {
if(this.genericClassParameters == null)return new Vector<GenericTypeVar>(); if(this.genericClassParameters == null)return new Vector<GenericTypeVar>();
return this.genericClassParameters; return this.genericClassParameters;
} }

View File

@ -1,22 +1,28 @@
// ino.module.ClassBody.8554.package // ino.module.ClassBody.8554.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.ClassBody.8554.import // ino.module.ClassBody.8554.import
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Vector; import java.util.Vector;
import mycompiler.mybytecode.ClassFile;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myexception.SCClassBodyException;
import mycompiler.myexception.SCExcept;
import mycompiler.myexception.SCMethodException;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import typinferenz.JavaCodeResult;
import typinferenz.ResultSet;
import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.myexception.SCClassBodyException;
import de.dhbwstuttgart.myexception.SCExcept;
import de.dhbwstuttgart.myexception.SCMethodException;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
@ -157,7 +163,7 @@ throws SCClassBodyException
SCExcept e = new SCExcept(); SCExcept e = new SCExcept();
e.set_error("unbekannte Klasse "+t.getName()+"."); e.set_error("unbekannte Klasse "+t.getName()+".");
e.set_function("complete_parahashtable() --> is_declared()"); e.set_function("complete_parahashtable() --> is_declared()");
e.set_statement(t.getName()); e.set_statement(t.getName().toString());
ex.addException(e); ex.addException(e);
throw ex; throw ex;
} }

View File

@ -1,13 +1,13 @@
// ino.module.ClassHelper.8555.package // ino.module.ClassHelper.8555.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.ClassHelper.8555.import // ino.module.ClassHelper.8555.import
import java.util.Vector; import java.util.Vector;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.RefType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import mycompiler.mytype.Type; import de.dhbwstuttgart.syntaxtree.type.RefType;
// ino.end import de.dhbwstuttgart.syntaxtree.type.Type;
// ino.class.ClassHelper.23206.declaration // ino.class.ClassHelper.23206.declaration
public class ClassHelper public class ClassHelper

View File

@ -1,25 +1,24 @@
// ino.module.Constant.8556.package // ino.module.Constant.8556.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.Constant.8556.import // ino.module.Constant.8556.import
import java.util.Vector; import java.util.Vector;
import de.dhbwstuttgart.bytecode.AttributeInfo;
import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.bytecode.JVMCode;
import de.dhbwstuttgart.core.MyCompiler;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.parser.JavaClassName;
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import de.dhbwstuttgart.syntaxtree.statement.Expr;
import de.dhbwstuttgart.syntaxtree.statement.Literal;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import typinferenz.JavaCodeResult;
import typinferenz.ResultSet;
import typinferenz.assumptions.TypeAssumptions;
import mycompiler.mybytecode.AttributeInfo;
import mycompiler.mybytecode.ClassFile;
import mycompiler.mybytecode.JVMCode;
import mycompiler.MyCompiler;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mystatement.Expr;
import mycompiler.mystatement.Literal;
import mycompiler.mytype.Type;
// ino.end
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent;
// ino.class.Constant.23212.description type=javadoc // ino.class.Constant.23212.description type=javadoc
/** /**
@ -118,11 +117,11 @@ public class Constant extends Method
// ino.end // ino.end
// ino.method.getTypeName.23243.definition // ino.method.getTypeName.23243.definition
public String getTypeName() public JavaClassName getTypeName()
// ino.end // ino.end
// ino.method.getTypeName.23243.body // ino.method.getTypeName.23243.body
{ {
return name; return new JavaClassName(name);
} }
// ino.end // ino.end
@ -169,7 +168,7 @@ public class Constant extends Method
{ {
// Zugehoerigen Typ (I, Z, C, Ljava/lang/String;) fuer den Typ ermitteln // Zugehoerigen Typ (I, Z, C, Ljava/lang/String;) fuer den Typ ermitteln
String bcgType = JVMCode.get_codegen_Type(typ.getName(), paralist); String bcgType = JVMCode.get_codegen_Type(typ.getName().toString(), paralist);
if (getValue() == null || !(getValue() instanceof Literal) ) { if (getValue() == null || !(getValue() instanceof Literal) ) {
throw new JVMCodeException("Die Generierung der Konstante wird nicht unterstuetzt!"); throw new JVMCodeException("Die Generierung der Konstante wird nicht unterstuetzt!");
@ -224,11 +223,6 @@ public class Constant extends Method
//return null; //return null;
} }
@Override
public void replaceType(CReplaceTypeEvent e) {
// TODO Auto-generated method stub
}
@Override @Override
public int getTypeLineNumber() { public int getTypeLineNumber() {

View File

@ -1,24 +1,24 @@
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
import java.util.Vector; import java.util.Vector;
import mycompiler.SyntaxTreeNode; import de.dhbwstuttgart.bytecode.ClassFile;
import mycompiler.mybytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.parser.JavaClassName;
import mycompiler.mymodifier.Modifiers; import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import mycompiler.mystatement.Block; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.statement.Block;
import mycompiler.mytype.RefType; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import mycompiler.mytype.Type; import de.dhbwstuttgart.syntaxtree.type.RefType;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; import de.dhbwstuttgart.syntaxtree.type.Type;
import typinferenz.ConstraintsSet; import de.dhbwstuttgart.typeinference.ConstraintsSet;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
import typinferenz.SingleConstraint; import de.dhbwstuttgart.typeinference.SingleConstraint;
import typinferenz.assumptions.ConstructorAssumption; import de.dhbwstuttgart.typeinference.assumptions.ConstructorAssumption;
import typinferenz.assumptions.MethodAssumption; import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption;
import typinferenz.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
public class Constructor extends Method { public class Constructor extends Method {
private Method methode; private Method methode;
@ -56,7 +56,7 @@ public class Constructor extends Method {
} }
@Override @Override
public String getTypeName() { public JavaClassName getTypeName() {
return this.getType().getName(); return this.getType().getName();
} }
@ -178,12 +178,6 @@ public class Constructor extends Method {
this.methode.setOffset(Offset); this.methode.setOffset(Offset);
} }
@Override
public void replaceType(CReplaceTypeEvent e) {
this.methode.replaceType(e);
}
@Override @Override
public int getTypeLineNumber() { public int getTypeLineNumber() {
@ -222,7 +216,6 @@ public class Constructor extends Method {
public ConstraintsSet TYPE(TypeAssumptions ass) { public ConstraintsSet TYPE(TypeAssumptions ass) {
ConstraintsSet ret = new ConstraintsSet(); ConstraintsSet ret = new ConstraintsSet();
ret.add(this.methode.get_Block().TYPEStmt(ass)); ret.add(this.methode.get_Block().TYPEStmt(ass));
return ret; return ret;
} }

View File

@ -1,10 +1,10 @@
// ino.module.ExceptionList.8559.package // ino.module.ExceptionList.8559.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.ExceptionList.8559.import // ino.module.ExceptionList.8559.import
import java.util.Vector; import java.util.Vector;
import mycompiler.mytype.RefType;
// ino.end import de.dhbwstuttgart.syntaxtree.type.RefType;

View File

@ -1,23 +1,22 @@
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
import java.util.Vector; import java.util.Vector;
import mycompiler.SyntaxTreeNode; import de.dhbwstuttgart.bytecode.ClassFile;
import mycompiler.mybytecode.ClassFile; import de.dhbwstuttgart.myexception.JVMCodeException;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import mycompiler.mytype.RefType; import de.dhbwstuttgart.syntaxtree.type.RefType;
import mycompiler.mytype.Type; import de.dhbwstuttgart.syntaxtree.type.Type;
import mycompiler.mytype.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; import de.dhbwstuttgart.typeinference.ConstraintsSet;
import typinferenz.ConstraintsSet; import de.dhbwstuttgart.typeinference.GenericTypeInsertable;
import typinferenz.GenericTypeInsertable; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.ResultSet;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.TypeInsertable;
import typinferenz.Typeable; import de.dhbwstuttgart.typeinference.Typeable;
import typinferenz.TypeInsertable; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import typinferenz.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
import typinferenz.typedeployment.TypeInsertPoint;
public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{ public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Typeable, Generic, GenericTypeInsertable{
@ -55,7 +54,7 @@ public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Ty
throws JVMCodeException; throws JVMCodeException;
@Override @Override
public Iterable<GenericTypeVar> getGenericParameter() { public Vector<GenericTypeVar> getGenericParameter() {
Vector<GenericTypeVar> ret = new Vector<>(); Vector<GenericTypeVar> ret = new Vector<>();
if(this.genericParameters == null)return ret; if(this.genericParameters == null)return ret;
ret.addAll(this.genericParameters); ret.addAll(this.genericParameters);
@ -154,10 +153,16 @@ public abstract class Field extends SyntaxTreeNode implements TypeInsertable, Ty
return this.offset; return this.offset;
} }
} }
@Override
public Vector<SyntaxTreeNode> getChildren() {
Vector<SyntaxTreeNode> ret = new Vector<>();
if(this.getType()!=null)ret.add(this.getType());
return ret;
}
@Override @Override
public void setGenericParameter(GenericDeclarationList params) { public void setGenericParameter(GenericDeclarationList params) {
this.genericParameters = params; this.genericParameters = params;
} }
} }

View File

@ -1,24 +1,24 @@
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
import java.util.Vector; import java.util.Vector;
import typinferenz.ConstraintsSet; import de.dhbwstuttgart.bytecode.ClassFile;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.myexception.JVMCodeException;
import typinferenz.OderConstraint; import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import typinferenz.ResultSet; import de.dhbwstuttgart.syntaxtree.statement.Expr;
import typinferenz.SingleConstraint; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import typinferenz.assumptions.FieldAssumption; import de.dhbwstuttgart.syntaxtree.type.RefType;
import typinferenz.assumptions.TypeAssumptions; import de.dhbwstuttgart.syntaxtree.type.Type;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import mycompiler.SyntaxTreeNode; import de.dhbwstuttgart.typeinference.ConstraintType;
import mycompiler.mybytecode.ClassFile; import de.dhbwstuttgart.typeinference.ConstraintsSet;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import mycompiler.mystatement.Expr; import de.dhbwstuttgart.typeinference.OderConstraint;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.typeinference.ResultSet;
import mycompiler.mytype.RefType; import de.dhbwstuttgart.typeinference.SingleConstraint;
import mycompiler.mytype.Type; import de.dhbwstuttgart.typeinference.assumptions.FieldAssumption;
import mycompiler.mytype.TypePlaceholder; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
/** /**
* Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung * Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung
@ -106,28 +106,19 @@ public class FieldDeclaration extends Field{
@Override @Override
public Vector<SyntaxTreeNode> getChildren() { public Vector<SyntaxTreeNode> getChildren() {
Vector<SyntaxTreeNode> ret = new Vector<SyntaxTreeNode>(); Vector<SyntaxTreeNode> ret = super.getChildren();
if(this.wert!=null)ret.add(this.wert); if(this.wert!=null)ret.add(this.wert);
return ret; return ret;
} }
@Override
public void replaceType(CReplaceTypeEvent e) {
// TODO Auto-generated method stub
}
@Override
public int getTypeLineNumber() {
// TODO Auto-generated method stub
return 0;
}
public int getVariableLength() public int getVariableLength()
{ {
return declid.elementAt(0).get_Name().length(); return declid.elementAt(0).get_Name().length();
} }
@Override @Override
public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) { public ConstraintsSet TYPE(TypeAssumptions publicAssumptions) {
if(this.wert == null && (this.getType() == null || this.getType() instanceof TypePlaceholder))
throw new TypeinferenceException("Typlose Felder müssen mit Wert initialisiert werden", this);
ConstraintsSet ret = new ConstraintsSet(); ConstraintsSet ret = new ConstraintsSet();
TypeAssumptions localAssumptions = publicAssumptions.clone(); TypeAssumptions localAssumptions = publicAssumptions.clone();
@ -146,7 +137,7 @@ public class FieldDeclaration extends Field{
*/ */
//TypeCheck, falls es sich um einen RefType handelt: //TypeCheck, falls es sich um einen RefType handelt:
this.getType().checkType(localAssumptions, this); ConstraintType thisType = this.getType().TYPE(localAssumptions, this);
/* /*
if(this.getType()!=null && (this.getType() instanceof RefType)){ if(this.getType()!=null && (this.getType() instanceof RefType)){
Type replaceType = null; Type replaceType = null;
@ -156,13 +147,13 @@ public class FieldDeclaration extends Field{
} }
*/ */
SingleConstraint c1 = new SingleConstraint(this.getType(), this.getType()); SingleConstraint c1 = new SingleConstraint(thisType, thisType);
ret.add(c1); //Damit die TypVariable des Felds in den Constraints auftaucht ret.add(c1); //Damit die TypVariable des Felds in den Constraints auftaucht
if(this.wert!=null){ if(this.wert!=null){
//Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement: //Falls bei der Deklaration ein Wert zugewiesen wird, verhält sich das Constraintserzeugen wie bei dem Assign-Statement:
ret.add(this.wert.TYPEExpr(localAssumptions)); ret.add(this.wert.TYPEExpr(localAssumptions));
ret.add(new SingleConstraint(this.wert.getType(), this.getType())); ret.add(new SingleConstraint(this.wert.getType().TYPE(localAssumptions,this), thisType));
} }
return ret; return ret;
} }

View File

@ -1,45 +1,27 @@
// ino.module.FormalParameter.8561.package // ino.module.FormalParameter.8561.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.FormalParameter.8561.import // ino.module.FormalParameter.8561.import
import java.util.Vector; import java.util.Vector;
import mycompiler.SyntaxTreeNode;
import mycompiler.mybytecode.ClassFile;
import mycompiler.mybytecode.CodeAttribute;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent;
import mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.bytecode.CodeAttribute;
import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeInsertable;
import de.dhbwstuttgart.typeinference.Typeable;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import typinferenz.JavaCodeResult;
import typinferenz.ResultSet;
import typinferenz.Typeable;
import typinferenz.TypeInsertable;
import typinferenz.exceptions.TypeinferenceException;
import typinferenz.typedeployment.TypeInsertPoint;
import typinferenz.typedeployment.TypeInsertSet;
// ino.class.FormalParameter.23391.declaration // ino.class.FormalParameter.23391.declaration
public class FormalParameter extends SyntaxTreeNode implements ITypeReplacementListener, Typeable, TypeInsertable public class FormalParameter extends SyntaxTreeNode implements Typeable, TypeInsertable
// ino.end // ino.end
// ino.class.FormalParameter.23391.body // ino.class.FormalParameter.23391.body
{ {
@ -60,7 +42,7 @@ public class FormalParameter extends SyntaxTreeNode implements ITypeReplacementL
@Override @Override
public boolean equals(Object object) { public boolean equals(Object object) {
if(!super.equals(object))return false; //if(!super.equals(object))return false; //Nicht die Position im SyntaxBaum prüfen.
if(!(object instanceof FormalParameter))return false; if(!(object instanceof FormalParameter))return false;
FormalParameter equals = (FormalParameter)object; FormalParameter equals = (FormalParameter)object;
if((this.type==null)!=(equals.type == null))return false; if((this.type==null)!=(equals.type == null))return false;
@ -82,13 +64,6 @@ public class FormalParameter extends SyntaxTreeNode implements ITypeReplacementL
// ino.end // ino.end
// ino.method.setType.23404.body // ino.method.setType.23404.body
{ {
if(this.type instanceof TypePlaceholder){
((TypePlaceholder)this.type).removeReplacementListener(this);
}
if(t instanceof TypePlaceholder){
((TypePlaceholder)t).addReplacementListener(this);
}
this.type = t; this.type = t;
} }
// ino.end // ino.end
@ -134,7 +109,7 @@ public class FormalParameter extends SyntaxTreeNode implements ITypeReplacementL
// ino.end // ino.end
// ino.method.getTypeName.23416.body // ino.method.getTypeName.23416.body
{ if(this.getType() == null)return ""; { if(this.getType() == null)return "";
return this.getType().getName(); return this.getType().getName().toString();
} }
// ino.end // ino.end
@ -179,24 +154,6 @@ public class FormalParameter extends SyntaxTreeNode implements ITypeReplacementL
} }
// ino.end // ino.end
// ino.method.replaceType.23428.defdescription type=javadoc
/**
* <br>Author: J<EFBFBD>rg B<EFBFBD>uerle
* @param e
*/
// ino.end
// ino.method.replaceType.23428.definition
public void replaceType(CReplaceTypeEvent e)
// ino.end
// ino.method.replaceType.23428.body
{
inferencelog.debug("Ersetze Typ in FormalParameter \""+this.getIdentifier()+"\"");
if(type instanceof TypePlaceholder){
((TypePlaceholder)type).removeReplacementListener(this);
}
this.setType(e.getNewType());
}
// ino.end
// ino.method.getTypeLineNumber.23431.defdescription type=javadoc // ino.method.getTypeLineNumber.23431.defdescription type=javadoc
/** /**

View File

@ -1,9 +1,9 @@
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
/** /**
* Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field) * Wird von allen Klassen implementiert, welche generische Parameter halten können. (Class, Method und Field)

View File

@ -1,9 +1,9 @@
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
import java.util.Vector; import java.util.Vector;
import mycompiler.myparser.GenericVarDeclarationList; import de.dhbwstuttgart.parser.GenericVarDeclarationList;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
/** /**

View File

@ -1,11 +1,13 @@
// ino.module.ImportDeclarations.8562.package // ino.module.ImportDeclarations.8562.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.ImportDeclarations.8562.import // ino.module.ImportDeclarations.8562.import
import java.util.Vector; import java.util.Vector;
// ino.end // ino.end
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
// ino.class.ImportDeclarations.23434.description type=javadoc // ino.class.ImportDeclarations.23434.description type=javadoc
/** /**

View File

@ -1,32 +1,19 @@
// ino.module.Interface.8582.package // ino.module.Interface.8582.package
package mycompiler.myinterface; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.Interface.8582.import // ino.module.Interface.8582.import
import java.util.Vector; import java.util.Vector;
import mycompiler.AClassOrInterface; import de.dhbwstuttgart.bytecode.ClassFile;
import mycompiler.mybytecode.ClassFile; import de.dhbwstuttgart.core.AClassOrInterface;
import mycompiler.myclass.Class; import de.dhbwstuttgart.myexception.JVMCodeException;
import mycompiler.myclass.ClassHelper; import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import mycompiler.myclass.Constant; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import mycompiler.myclass.FormalParameter; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import mycompiler.myclass.Method; import de.dhbwstuttgart.syntaxtree.type.RefType;
import mycompiler.myclass.ParameterList; import de.dhbwstuttgart.syntaxtree.type.Type;
import mycompiler.myclass.UsedId; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import mycompiler.mytypereconstruction.CIntersectionType;
import mycompiler.mytypereconstruction.TypeinferenceResultSet;
import mycompiler.mytypereconstruction.set.CTypeAssumptionSet;
import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption;
import mycompiler.SourceFile;
// ino.end
/** /**
* Ein Interface ist eine abstrakte Klasse, erbt daher von Class * Ein Interface ist eine abstrakte Klasse, erbt daher von Class

View File

@ -1,18 +1,13 @@
// ino.module.InterfaceBody.8583.package // ino.module.InterfaceBody.8583.package
package mycompiler.myinterface; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.InterfaceBody.8583.import // ino.module.InterfaceBody.8583.import
import java.util.Vector; import java.util.Vector;
import mycompiler.myclass.Field; import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.myexception.JVMCodeException;
import mycompiler.mybytecode.ClassFile; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import mycompiler.myclass.Constant;
import mycompiler.myclass.Method;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mymodifier.Modifiers;
// ino.end
// ino.class.InterfaceBody.23984.description type=javadoc // ino.class.InterfaceBody.23984.description type=javadoc
/** /**

View File

@ -1,5 +1,5 @@
// ino.module.Method.8564.package // ino.module.Method.8564.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.Method.8564.import // ino.module.Method.8564.import
import java.util.Enumeration; import java.util.Enumeration;
@ -7,41 +7,33 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import mycompiler.IItemWithOffset;
import mycompiler.SyntaxTreeNode;
import mycompiler.mybytecode.ClassFile;
import mycompiler.MyCompiler;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myexception.SCMethodException;
import mycompiler.myexception.SCStatementException;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mystatement.Block;
import mycompiler.mystatement.Return;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent;
import mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListener;
import mycompiler.mytypereconstruction.set.CTypeAssumptionSet;
import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CLocalVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.bytecode.ClassFile;
import typinferenz.SingleConstraint; import de.dhbwstuttgart.core.IItemWithOffset;
import typinferenz.ConstraintsSet; import de.dhbwstuttgart.core.MyCompiler;
import typinferenz.ResultSet; import de.dhbwstuttgart.myexception.JVMCodeException;
import typinferenz.TypeInsertable; import de.dhbwstuttgart.myexception.SCMethodException;
import typinferenz.assumptions.MethodAssumption; import de.dhbwstuttgart.myexception.SCStatementException;
import typinferenz.assumptions.ParameterAssumption; import de.dhbwstuttgart.parser.JavaClassName;
import typinferenz.assumptions.TypeAssumptions; import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import typinferenz.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.syntaxtree.statement.Block;
import de.dhbwstuttgart.syntaxtree.statement.Return;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.typeinference.ConstraintsSet;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.SingleConstraint;
import de.dhbwstuttgart.typeinference.TypeInsertable;
import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption;
import de.dhbwstuttgart.typeinference.assumptions.ParameterAssumption;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
@ -172,7 +164,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// ino.end // ino.end
// ino.method.getTypeName.23533.definition // ino.method.getTypeName.23533.definition
public String getTypeName() public JavaClassName getTypeName()
// ino.end // ino.end
// ino.method.getTypeName.23533.body // ino.method.getTypeName.23533.body
{ {
@ -203,14 +195,6 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
// ino.end // ino.end
// ino.method.setReturnType.23539.body // ino.method.setReturnType.23539.body
{ {
if(this.returntype instanceof TypePlaceholder){
((TypePlaceholder)this.returntype).removeReplacementListener(this);
}
if(type instanceof TypePlaceholder){
((TypePlaceholder)type).addReplacementListener(this);
}
// this.returntype = type; //auskommentiert von Andreas Stadelmeier (a10023)
this.returntype = type; this.returntype = type;
} }
// ino.end // ino.end
@ -422,24 +406,6 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
} }
// ino.end // ino.end
// ino.method.replaceType.23599.defdescription type=javadoc
/**
* <br>Author: Jrg Buerle
* @param e
*/
// ino.end
// ino.method.replaceType.23599.definition
public void replaceType(CReplaceTypeEvent e)
// ino.end
// ino.method.replaceType.23599.body
{
inferencelog.debug("Ersetze Typ in Method \""+this.get_Method_Name()+"()\"\n");
if(returntype instanceof TypePlaceholder){
((TypePlaceholder)returntype).removeReplacementListener(this);
}
this.setReturnType(e.getNewType());
}
// ino.end
// ino.method.getTypeLineNumber.23602.defdescription type=javadoc // ino.method.getTypeLineNumber.23602.defdescription type=javadoc
/** /**
@ -561,7 +527,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
} }
//TypeCheck, falls es sich um einen RefType handelt: //TypeCheck, falls es sich um einen RefType handelt:
this.returntype = this.returntype.checkType(localAss, this); this.returntype = this.returntype.TYPE(localAss, this).getType();
/* /*
if(this.returntype!=null && (this.returntype instanceof RefType)&& if(this.returntype!=null && (this.returntype instanceof RefType)&&
!(this.returntype instanceof mycompiler.mytype.Void)){//Sonderfall der Methode: Ihr Typ darf Void definiert werden. !(this.returntype instanceof mycompiler.mytype.Void)){//Sonderfall der Methode: Ihr Typ darf Void definiert werden.
@ -574,7 +540,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
//Die Parameter zu den Assumptions hinzufügen: //Die Parameter zu den Assumptions hinzufügen:
if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){ if(this.parameterlist!=null)for(FormalParameter param : this.parameterlist){
param.setType(param.getType().checkType(localAss, this)); param.setType(param.getType().TYPE(localAss, this).getType());
/* /*
if(param.getType() instanceof RefType) if(param.getType() instanceof RefType)
{ {
@ -590,7 +556,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
} }
ret.add(this.block.TYPEStmt(localAss)); ret.add(this.block.TYPEStmt(localAss));
//eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode: //eine Verknüpfung mit der Type Assumption aus dem Assumption Set und dem ermittelten Typ der Methode:
ret.add(new SingleConstraint(this.block.getType(), this.returntype)); ret.add(new SingleConstraint(this.block.getType().TYPE(localAss, this), this.returntype.TYPE(localAss, this)));
return ret; return ret;
} }
@ -717,6 +683,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
for(FormalParameter param : this.parameterlist){ for(FormalParameter param : this.parameterlist){
ret.add(param); ret.add(param);
} }
ret.addAll(this.getGenericParameter());
return ret; return ret;
} }

View File

@ -1,17 +1,19 @@
// ino.module.ParameterList.8565.package // ino.module.ParameterList.8565.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.ParameterList.8565.import // ino.module.ParameterList.8565.import
import java.util.Vector; import java.util.Vector;
import typinferenz.JavaCodeResult;
import typinferenz.ResultSet;
import mycompiler.mybytecode.ClassFile;
import mycompiler.mybytecode.CodeAttribute;
import mycompiler.mytype.*;
import java.util.Iterator; import java.util.Iterator;
import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.bytecode.CodeAttribute;
import de.dhbwstuttgart.syntaxtree.type.BaseType;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end // ino.end

View File

@ -1,5 +1,5 @@
// ino.module.SourceFile.8722.package // ino.module.SourceFile.8722.package
package mycompiler; package de.dhbwstuttgart.syntaxtree;
// ino.end // ino.end
// ino.module.SourceFile.8722.import // ino.module.SourceFile.8722.import
@ -10,56 +10,44 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import mycompiler.mybytecode.ClassFile;
import mycompiler.myclass.BasicAssumptionClass;
import mycompiler.myclass.Class;
import mycompiler.myclass.Constructor;
import mycompiler.myclass.Field;
import mycompiler.myclass.FieldDeclaration;
import mycompiler.myclass.ImportDeclarations;
import mycompiler.myclass.UsedId;
import mycompiler.myexception.CTypeReconstructionException;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myexception.SCClassException;
import mycompiler.myexception.SCException;
import mycompiler.myinterface.Interface;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mymodifier.Public;
import mycompiler.mytype.BooleanType;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.Pair;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytype.Void;
import mycompiler.mytypereconstruction.CIntersectionType;
import mycompiler.mytypereconstruction.CSupportData;
import mycompiler.mytypereconstruction.TypeinferenceResultSet;
import mycompiler.mytypereconstruction.typeassumption.CInstVarTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CMethodTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CParaTypeAssumption;
import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption;
import mycompiler.mytypereconstruction.unify.FC_TTO;
import mycompiler.mytypereconstruction.unify.Unify;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import mycompiler.myclass.*; import de.dhbwstuttgart.bytecode.ClassFile;
import mycompiler.*; import de.dhbwstuttgart.core.AClassOrInterface;
import de.dhbwstuttgart.core.MyCompiler;
import de.dhbwstuttgart.myexception.CTypeReconstructionException;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.myexception.SCClassException;
import de.dhbwstuttgart.myexception.SCException;
import de.dhbwstuttgart.parser.JavaClassName;
import de.dhbwstuttgart.syntaxtree.misc.DeclId;
import de.dhbwstuttgart.syntaxtree.misc.UsedId;
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import de.dhbwstuttgart.syntaxtree.modifier.Public;
import de.dhbwstuttgart.syntaxtree.type.BooleanType;
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import de.dhbwstuttgart.syntaxtree.type.Void;
import de.dhbwstuttgart.typeinference.ConstraintsSet;
import de.dhbwstuttgart.typeinference.FunN;
import de.dhbwstuttgart.typeinference.FunNInterface;
import de.dhbwstuttgart.typeinference.FunNMethod;
import de.dhbwstuttgart.typeinference.Pair;
import de.dhbwstuttgart.typeinference.ResultSet;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import de.dhbwstuttgart.typeinference.UndConstraint;
import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption;
import de.dhbwstuttgart.typeinference.assumptions.MethodAssumption;
import de.dhbwstuttgart.typeinference.assumptions.ParameterAssumption;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
import de.dhbwstuttgart.typeinference.unify.FC_TTO;
import de.dhbwstuttgart.typeinference.unify.Unify;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import sun.reflect.generics.reflectiveObjects.TypeVariableImpl; import sun.reflect.generics.reflectiveObjects.TypeVariableImpl;
import typinferenz.ConstraintsSet;
import typinferenz.FunN;
import typinferenz.FunNInterface;
import typinferenz.FunNMethod;
import typinferenz.ResultSet;
import typinferenz.UndConstraint;
import typinferenz.assumptions.ClassAssumption;
import typinferenz.assumptions.MethodAssumption;
import typinferenz.assumptions.ParameterAssumption;
import typinferenz.assumptions.TypeAssumptions;
import typinferenz.exceptions.DebugException;
import typinferenz.exceptions.TypeinferenceException;
@ -227,7 +215,7 @@ public class SourceFile
* Startet die Bytecodegenerierung fuer alle in der Datei * Startet die Bytecodegenerierung fuer alle in der Datei
* enthaltenen Klassen und Interfaces. * enthaltenen Klassen und Interfaces.
* *
*/
// ino.end // ino.end
// ino.method.codegen.21397.definition // ino.method.codegen.21397.definition
public Vector<ClassFile> codegen(ResultSet result) public Vector<ClassFile> codegen(ResultSet result)
@ -250,7 +238,7 @@ public class SourceFile
return ret; return ret;
} }
// ino.end // ino.end
*/
// ino.method.createPairFromClassAndSuperclass.21400.defdescription type=javadoc // ino.method.createPairFromClassAndSuperclass.21400.defdescription type=javadoc
/** /**
* Erstellt ein Typ-Paar, welches im 1. Durchlauf in die Menge der Finite Closure * Erstellt ein Typ-Paar, welches im 1. Durchlauf in die Menge der Finite Closure
@ -260,7 +248,7 @@ public class SourceFile
*/ */
// ino.end // ino.end
// ino.method.createPairFromClassAndSuperclass.21400.definition // ino.method.createPairFromClassAndSuperclass.21400.definition
private Pair createPairFromClassAndSuperclass(String className, String superclassName, Vector classParaOrg, Vector superclassParaOrg) private Pair createPairFromClassAndSuperclass(JavaClassName className, JavaClassName superclassName, Vector classParaOrg, Vector superclassParaOrg)
// ino.end // ino.end
// ino.method.createPairFromClassAndSuperclass.21400.body // ino.method.createPairFromClassAndSuperclass.21400.body
{ {
@ -272,15 +260,15 @@ public class SourceFile
superclassParaOrg=null; superclassParaOrg=null;
} }
Pair P = new Pair( Pair P = new Pair(
new RefType( className, classParaOrg,-1), new RefType( className.toString(), classParaOrg,-1),
new RefType( superclassName, superclassParaOrg,-1) new RefType( superclassName.toString(), superclassParaOrg,-1)
); );
//PL 04-12-29 freshe Variablen ANFANG //PL 04-12-29 freshe Variablen ANFANG
RefType r1 = (RefType)P.getTA1Copy(); RefType r1 = (RefType)P.getTA1Copy();
RefType r2 = (RefType)P.getTA2Copy(); RefType r2 = (RefType)P.getTA2Copy();
// #JB# 05.04.2005 // #JB# 05.04.2005
// ########################################################### // ###########################################################
Hashtable<String,Type> substHash = new Hashtable<String,Type>(); //fuer jedes Paar komplett neue Variablen Hashtable<JavaClassName,Type> substHash = new Hashtable<JavaClassName,Type>(); //fuer jedes Paar komplett neue Variablen
Unify.varSubst(r1, substHash); Unify.varSubst(r1, substHash);
Unify.varSubst(r2, substHash); Unify.varSubst(r2, substHash);
// ########################################################### // ###########################################################
@ -326,7 +314,7 @@ public class SourceFile
Iterator<UsedId> interfaceIterator=tempKlasse.getSuperInterfaces().iterator(); Iterator<UsedId> interfaceIterator=tempKlasse.getSuperInterfaces().iterator();
while(interfaceIterator.hasNext()){ while(interfaceIterator.hasNext()){
UsedId intf=interfaceIterator.next(); UsedId intf=interfaceIterator.next();
String interfaceName=intf.getQualifiedName(); JavaClassName interfaceName=intf.getQualifiedName();
Pair P=createPairFromClassAndSuperclass(tempKlasse.getName(),interfaceName,tempKlasse.get_ParaList(),intf.get_ParaList()); Pair P=createPairFromClassAndSuperclass(tempKlasse.getName(),interfaceName,tempKlasse.get_ParaList(),intf.get_ParaList());
vFC.add( P ); vFC.add( P );
@ -339,7 +327,7 @@ public class SourceFile
Iterator<UsedId> interfaceIterator=intf.getSuperInterfaces().iterator(); Iterator<UsedId> interfaceIterator=intf.getSuperInterfaces().iterator();
while(interfaceIterator.hasNext()){ while(interfaceIterator.hasNext()){
UsedId superintf=interfaceIterator.next(); UsedId superintf=interfaceIterator.next();
String superinterfaceName=superintf.getQualifiedName(); JavaClassName superinterfaceName=superintf.getQualifiedName();
Pair P=createPairFromClassAndSuperclass(intf.getName(),superinterfaceName,intf.getParaList(), superintf.get_ParaList()); Pair P=createPairFromClassAndSuperclass(intf.getName(),superinterfaceName,intf.getParaList(), superintf.get_ParaList());
vFC.add( P ); vFC.add( P );
@ -452,7 +440,7 @@ public class SourceFile
//es werden alle Parameter in einem Typeterm, der //es werden alle Parameter in einem Typeterm, der
//der Argumente hat ersetzt PL 04-12-28 //der Argumente hat ersetzt PL 04-12-28
Hashtable<String,Type> hts = new Hashtable<String,Type>(); Hashtable<JavaClassName,Type> hts = new Hashtable<JavaClassName,Type>();
//for(int u = nSubstStelle; u < vPara.size(); u++) { //for(int u = nSubstStelle; u < vPara.size(); u++) {
for(int u = 0; u < vPara.size(); u++) { for(int u = 0; u < vPara.size(); u++) {
try { try {
@ -463,7 +451,7 @@ public class SourceFile
// ########################################################### // ###########################################################
inferencelog.debug("Typterm_Name: " + vPara.elementAt(u)); inferencelog.debug("Typterm_Name: " + vPara.elementAt(u));
inferencelog.debug("Typterm_Name: " + ((Type)vPara.elementAt(u)).Type2String()); inferencelog.debug("Typterm_Name: " + ((Type)vPara.elementAt(u)).Type2String());
hts.put(((RefType)PSuchen.TA1).getParaN(u), vPara.elementAt(u)); hts.put(new JavaClassName(((RefType)PSuchen.TA1).getParaN(u)), vPara.elementAt(u));
} }
catch( Exception E ) { catch( Exception E ) {
inferencelog.error(E.getMessage()); inferencelog.error(E.getMessage());
@ -528,7 +516,7 @@ public class SourceFile
RefType RSuch = (RefType)PSuch.TA1; RefType RSuch = (RefType)PSuch.TA1;
//if( R.getName().equals(RSuch.getName()) ) //if( R.getName().equals(RSuch.getName()) )
if (R.is_Equiv(RSuch, new Hashtable<String,Type>())) //eingefuegt PL 05-01-07 if (R.is_Equiv(RSuch, new Hashtable<JavaClassName,Type>())) //eingefuegt PL 05-01-07
{ {
// Paar einfuegen, falls noch nicht vorhanden // Paar einfuegen, falls noch nicht vorhanden
RefType L1 = (RefType)PTemp.getTA1Copy(); RefType L1 = (RefType)PTemp.getTA1Copy();
@ -539,10 +527,10 @@ public class SourceFile
//zunaechst Variablen disjunkt machen ANFANG //zunaechst Variablen disjunkt machen ANFANG
// #JB# 05.04.2005 // #JB# 05.04.2005
// ########################################################### // ###########################################################
Hashtable<String,Type> substHash1 = new Hashtable<String,Type>(); Hashtable<JavaClassName,Type> substHash1 = new Hashtable<JavaClassName,Type>();
Unify.varSubst(L1, substHash1); Unify.varSubst(L1, substHash1);
Unify.varSubst(L2, substHash1); Unify.varSubst(L2, substHash1);
Hashtable<String,Type> substHash2 = new Hashtable<String,Type>(); Hashtable<JavaClassName,Type> substHash2 = new Hashtable<JavaClassName,Type>();
Unify.varSubst(R1, substHash2); Unify.varSubst(R1, substHash2);
Unify.varSubst(R2, substHash2); Unify.varSubst(R2, substHash2);
// ########################################################### // ###########################################################
@ -553,9 +541,9 @@ public class SourceFile
// #JB# 05.04.2005 // #JB# 05.04.2005
// ########################################################### // ###########################################################
Hashtable<String,Type> h = new Hashtable<String,Type>(); Hashtable<JavaClassName,Type> h = new Hashtable<JavaClassName,Type>();
L2.Equiv2Equal(R1, h); L2.Equiv2Equal(R1, h);
Hashtable<String,Type> substHash3 = h; Hashtable<JavaClassName,Type> substHash3 = h;
Unify.varSubst(L1, substHash3); Unify.varSubst(L1, substHash3);
Unify.varSubst(R2, substHash3); Unify.varSubst(R2, substHash3);
// ########################################################### // ###########################################################
@ -687,6 +675,8 @@ public class SourceFile
} }
typinferenzLog.debug("Karthesisches Produkt der Constraints: "+xConstraints); typinferenzLog.debug("Karthesisches Produkt der Constraints: "+xConstraints);
finiteClosure.generateFullyNamedTypes(globalAssumptions);
////////////////////////////// //////////////////////////////
// Unifizierung der Constraints: // Unifizierung der Constraints:
////////////////////////////// //////////////////////////////
@ -730,25 +720,27 @@ public class SourceFile
//Erst die Unifizierung erstellen: //Erst die Unifizierung erstellen:
Vector<Pair> constraintsClone = (Vector<Pair>)constraints.clone(); Vector<Pair> constraintsClone = (Vector<Pair>)constraints.clone();
/*
//Typen kontrollieren: //Typen kontrollieren:
for(Pair p : constraintsClone){ for(Pair p : constraintsClone){
Type t = p.TA1; Type t = p.TA1;
//TypeCheck, falls es sich um einen RefType handelt: //TypeCheck, falls es sich um einen RefType handelt:
if(t!=null && (t instanceof RefType)&& if(t!=null && (t instanceof RefType)&&
!(t instanceof mycompiler.mytype.Void)){ !(t instanceof de.dhbwstuttgart.syntaxtree.type.Void)){
Type replaceType = null; Type replaceType = null;
replaceType = globalAssumptions.getTypeFor((RefType)t); replaceType = globalAssumptions.getTypeFor((RefType)t, null);
if(!(replaceType == null))p.TA1 = replaceType; if(!(replaceType == null))p.TA1 = replaceType;
} }
t = p.TA2; t = p.TA2;
//TypeCheck, falls es sich um einen RefType handelt: //TypeCheck, falls es sich um einen RefType handelt:
if(t!=null && (t instanceof RefType)&& if(t!=null && (t instanceof RefType)&&
!(t instanceof mycompiler.mytype.Void)){ !(t instanceof de.dhbwstuttgart.syntaxtree.type.Void)){
Type replaceType = null; Type replaceType = null;
replaceType = globalAssumptions.getTypeFor((RefType)t); replaceType = globalAssumptions.getTypeFor((RefType)t, null);
if(!(replaceType == null))p.TA2 = replaceType; if(!(replaceType == null))p.TA2 = replaceType;
} }
} }
*/
Vector<Vector<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure); Vector<Vector<Pair>> unifyResult = Unify.unify(constraintsClone, finiteClosure);
//Dann den Ergebnissen anfügen //Dann den Ergebnissen anfügen
@ -933,7 +925,7 @@ public class SourceFile
/** /**
* Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet * Erstellt die Basic Assumptions (siehe MakeBasicAssumptions) als AssumptionSet
* @return * @return
*/
@Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt @Deprecated //angefügt von Andreas Stadelmeier. Grund: Die Funktion wurde neu als makeBasicAssumptionsFromJRE angelegt
private TypeAssumptions getBasicAssumptions() { private TypeAssumptions getBasicAssumptions() {
TypeAssumptions ret = new TypeAssumptions(null); TypeAssumptions ret = new TypeAssumptions(null);
@ -954,7 +946,7 @@ public class SourceFile
// Properties laden // Properties laden
java.lang.Class<?> x; java.lang.Class<?> x;
try { try {
x = java.lang.Class.forName(importDecl.getQualifiedName()); x = java.lang.Class.forName(importDecl.getQualifiedName().toString());
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
throw new CTypeReconstructionException("Fehlerhafte Import-Declaration: "+e.getMessage(),importDecl); throw new CTypeReconstructionException("Fehlerhafte Import-Declaration: "+e.getMessage(),importDecl);
} }
@ -1046,7 +1038,7 @@ public class SourceFile
for(int k=0;k<gpt.length;k++){ for(int k=0;k<gpt.length;k++){
Type type=createTypeFromJavaGenericType(gpt[k],pt[k],jreSpiderRegistry); Type type=createTypeFromJavaGenericType(gpt[k],pt[k],jreSpiderRegistry);
// Fixme HOTI beachte overloaded id // Fixme HOTI beachte overloaded id
method.addParaAssumption(new CParaTypeAssumption(className, methodName, pt.length,0,type.getName(), type, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>())); method.addParaAssumption(new CParaTypeAssumption(className, methodName, pt.length,0,type.getName().toString(), type, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>()));
} }
//basicAssumptions.addMethodIntersectionType(new CIntersectionType(method)); //basicAssumptions.addMethodIntersectionType(new CIntersectionType(method));
//ret.add(method); //auskommentiert von Andreas Stadelmeier //ret.add(method); //auskommentiert von Andreas Stadelmeier
@ -1076,7 +1068,7 @@ public class SourceFile
imports.addAll(doneImports); imports.addAll(doneImports);
return ret; return ret;
} }*/
// ino.method.makeBasicAssumptionsFromJRE.21409.definition // ino.method.makeBasicAssumptionsFromJRE.21409.definition
private TypeAssumptions makeBasicAssumptionsFromJRE(Vector<UsedId> imports) private TypeAssumptions makeBasicAssumptionsFromJRE(Vector<UsedId> imports)
@ -1094,7 +1086,6 @@ public class SourceFile
mod.addModifier(new Public()); mod.addModifier(new Public());
//Für Object: //Für Object:
//TODO: toString()-Methode gerät nicht in die BasicAssumptions
imports.add(new UsedId("java.lang.Object",-1)); imports.add(new UsedId("java.lang.Object",-1));
// Für jede einzelne Klasse // Für jede einzelne Klasse
@ -1104,7 +1095,7 @@ public class SourceFile
// Properties laden // Properties laden
java.lang.Class<?> x; java.lang.Class<?> x;
try { try {
x = java.lang.Class.forName(importDecl.getQualifiedName()); x = java.lang.Class.forName(importDecl.getQualifiedName().toString());
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
throw new CTypeReconstructionException("Fehlerhafte Import-Declaration: "+e.getMessage(),importDecl); throw new CTypeReconstructionException("Fehlerhafte Import-Declaration: "+e.getMessage(),importDecl);
} }
@ -1116,19 +1107,19 @@ public class SourceFile
//String className=x.getSimpleName(); //String className=x.getSimpleName();
String className=x.getName(); String className=x.getName();
// Generische Typen erzeugen
Class parentClass = new Class(className, mod, 0);
// Generische Typen erzeugen
Hashtable<String,GenericTypeVar> jreSpiderRegistry=new Hashtable<String,GenericTypeVar>(); Hashtable<String,GenericTypeVar> jreSpiderRegistry=new Hashtable<String,GenericTypeVar>();
Vector<GenericTypeVar> typeGenPara = new Vector<GenericTypeVar>(); Vector<GenericTypeVar> typeGenPara = new Vector<GenericTypeVar>();
for(int j=0;j<tvs.length;j++){ for(int j=0;j<tvs.length;j++){
GenericTypeVar gtv=new GenericTypeVar(tvs[j].getName(),-1); GenericTypeVar gtv=new GenericTypeVar(tvs[j].getName(), parentClass,-1);
typeGenPara.addElement(gtv); typeGenPara.addElement(gtv);
jreSpiderRegistry.put(tvs[j].getName(),gtv); jreSpiderRegistry.put(tvs[j].getName(),gtv);
} }
//BasicAssumptionClass myCl = new BasicAssumptionClass(className, mod); //BasicAssumptionClass myCl = new BasicAssumptionClass(className, mod);
Class parentClass = new Class(className, mod, 0);
if(typeGenPara.size()>0){ if(typeGenPara.size()>0){
//auskommentiert von Andreas Stadelmeier: //auskommentiert von Andreas Stadelmeier:
@ -1158,7 +1149,7 @@ public class SourceFile
java.lang.reflect.TypeVariable[] superclassTVS=superClass.getTypeParameters(); java.lang.reflect.TypeVariable[] superclassTVS=superClass.getTypeParameters();
Vector<Type> supertypeGenPara = new Vector<Type>(); Vector<Type> supertypeGenPara = new Vector<Type>();
for(int tvi=0;tvi<superclassTVS.length;tvi++){ for(int tvi=0;tvi<superclassTVS.length;tvi++){
GenericTypeVar newGTV=new GenericTypeVar(superclassTVS[tvi].getName(),-1); GenericTypeVar newGTV=new GenericTypeVar(superclassTVS[tvi].getName(),parentClass,-1);
supertypeGenPara.addElement(newGTV); supertypeGenPara.addElement(newGTV);
} }
@ -1177,30 +1168,27 @@ public class SourceFile
for(int j=0;j<fields.length;j++){ for(int j=0;j<fields.length;j++){
if(java.lang.reflect.Modifier.isPublic(fields[j].getModifiers())){ if(java.lang.reflect.Modifier.isPublic(fields[j].getModifiers())){
//CInstVarTypeAssumption instVar = new CInstVarTypeAssumption(className, fields[j].getName(), new RefType(fields[j].getType().getSimpleName()), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>()); parentClass.addField(new FieldDeclaration(fields[j].getName(),new RefType(fields[j].getType().getName(),-1)));
CInstVarTypeAssumption instVar = new CInstVarTypeAssumption(className, fields[j].getName(), new RefType(fields[j].getType().getName(),-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>());
//basicAssumptions.addFieldOrLocalVarAssumption(instVar);
parentClass.addField(new FieldDeclaration(fields[j].getName(),new RefType(fields[j].getType().getName(),-1)));
} }
} }
for(int j=0;j<methods.length;j++){ for(int j=0;j<methods.length;j++){
if(java.lang.reflect.Modifier.isPublic(methods[j].getModifiers())){ if(java.lang.reflect.Modifier.isPublic(methods[j].getModifiers())){
String methodName=methods[j].getName(); String methodName=methods[j].getName();
if(methodName.equals("add")){ //if(methodName.equals("add")){
java.lang.reflect.Type genericReturnType=methods[j].getGenericReturnType(); java.lang.reflect.Type genericReturnType=methods[j].getGenericReturnType();
Type returnType=createTypeFromJavaGenericType(genericReturnType,methods[j].getReturnType(),jreSpiderRegistry); Type returnType=createTypeFromJavaGenericType(genericReturnType,methods[j].getReturnType(),jreSpiderRegistry, parentClass);
java.lang.reflect.Type[] gpt=methods[j].getGenericParameterTypes(); java.lang.reflect.Type[] gpt=methods[j].getGenericParameterTypes();
java.lang.Class[] pt=methods[j].getParameterTypes(); java.lang.Class[] pt=methods[j].getParameterTypes();
//CMethodTypeAssumption method = new CMethodTypeAssumption(new RefType(className, 0), methodName, returnType, pt.length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>(),null); //CMethodTypeAssumption method = new CMethodTypeAssumption(new RefType(className, 0), methodName, returnType, pt.length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>(),null);
Method method = mycompiler.myclass.Method.createEmptyMethod(methodName, parentClass); Method method = de.dhbwstuttgart.syntaxtree.Method.createEmptyMethod(methodName, parentClass);
method.setType(returnType); method.setType(returnType);
ParameterList parameterList = new ParameterList(); ParameterList parameterList = new ParameterList();
for(int k=0;k<gpt.length;k++){ for(int k=0;k<gpt.length;k++){
Type type=createTypeFromJavaGenericType(gpt[k],pt[k],jreSpiderRegistry); Type type=createTypeFromJavaGenericType(gpt[k],pt[k],jreSpiderRegistry, parentClass);
// Fixme HOTI beachte overloaded id // Fixme HOTI beachte overloaded id
//method.addParaAssumption(new CParaTypeAssumption(className, methodName, pt.length,0,type.getName(), type, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>())); //method.addParaAssumption(new CParaTypeAssumption(className, methodName, pt.length,0,type.getName(), type, MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>()));
FormalParameter parameter = new FormalParameter(new DeclId(type.get_Name())); FormalParameter parameter = new FormalParameter(new DeclId(type.get_Name()));
@ -1211,22 +1199,25 @@ public class SourceFile
//basicAssumptions.addMethodIntersectionType(new CIntersectionType(method)); //basicAssumptions.addMethodIntersectionType(new CIntersectionType(method));
parentClass.addField(method); parentClass.addField(method);
} //}
} }
} }
for(int j=0;j<constructors.length;j++){ for(int j=0;j<constructors.length;j++){
if(java.lang.reflect.Modifier.isPublic(constructors[j].getModifiers())){ if(java.lang.reflect.Modifier.isPublic(constructors[j].getModifiers())){
String methodName="<init>"; String methodName=className;
CMethodTypeAssumption constructor = new CMethodTypeAssumption(new RefType(className, 0), methodName, new RefType(className,-1), constructors[j].getParameterTypes().length,MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>(),null); ParameterList paraList = new ParameterList();
for(int k=0;k<constructors[j].getParameterTypes().length;k++){ for(int k=0;k<constructors[j].getParameterTypes().length;k++){
String paraType=constructors[j].getParameterTypes()[k].getName(); String paraType=constructors[j].getParameterTypes()[k].getName();
//String paraType=constructors[j].getParameterTypes()[k].getSimpleName(); //String paraType=constructors[j].getParameterTypes()[k].getSimpleName();
// Fixme HOTI beachte overloaded id // Fixme HOTI beachte overloaded id
constructor.addParaAssumption(new CParaTypeAssumption(className, methodName, constructors[j].getParameterTypes().length,0,paraType, new RefType(paraType,-1), MyCompiler.NO_LINENUMBER,MyCompiler.NO_LINENUMBER,new Vector<Integer>())); FormalParameter fpara = new FormalParameter(new DeclId("p"+k));
fpara.setType(new RefType(paraType,-1));
paraList.formalparameter.add(fpara);
} }
//basicAssumptions.addMethodIntersectionType(new CIntersectionType(constructor)); //basicAssumptions.addMethodIntersectionType(new CIntersectionType(constructor));
Method constructorMethod = mycompiler.myclass.Method.createEmptyMethod(methodName, parentClass); Method constructorMethod = de.dhbwstuttgart.syntaxtree.Method.createEmptyMethod(methodName, parentClass);
constructorMethod.parameterlist = paraList;
parentClass.addField(new Constructor(constructorMethod)); parentClass.addField(new Constructor(constructorMethod));
} }
} }
@ -1235,7 +1226,6 @@ public class SourceFile
basicAssumptions.addClassAssumption(new ClassAssumption(parentClass)); basicAssumptions.addClassAssumption(new ClassAssumption(parentClass));
imports.removeElement(importDecl); imports.removeElement(importDecl);
doneImports.addElement(importDecl); doneImports.addElement(importDecl);
} }
imports.addAll(doneImports); imports.addAll(doneImports);
return basicAssumptions; return basicAssumptions;
@ -1262,7 +1252,7 @@ public class SourceFile
boolean found = false; boolean found = false;
for(UsedId id : searchVector) for(UsedId id : searchVector)
{ {
String s = id.getQualifiedName(); String s = id.getQualifiedName().toString();
found |= s.equals(searchString); found |= s.equals(searchString);
} }
return found; return found;
@ -1270,13 +1260,13 @@ public class SourceFile
// ino.method.createTypeFromJavaGenericType.21415.definition // ino.method.createTypeFromJavaGenericType.21415.definition
private Type createTypeFromJavaGenericType(java.lang.reflect.Type type, java.lang.Class<?> cl, Hashtable<String,GenericTypeVar>jreSpiderRegistry) private Type createTypeFromJavaGenericType(java.lang.reflect.Type type, java.lang.Class<?> cl, Hashtable<String,GenericTypeVar>jreSpiderRegistry, Class parentClass)
// ino.end // ino.end
// ino.method.createTypeFromJavaGenericType.21415.body // ino.method.createTypeFromJavaGenericType.21415.body
{ {
if(type instanceof TypeVariableImpl){ if(type instanceof TypeVariableImpl){
TypeVariableImpl tvi=((TypeVariableImpl)type); TypeVariableImpl tvi=((TypeVariableImpl)type);
return(new GenericTypeVar(jreSpiderRegistry.get(tvi.getName()).getName(),-1)); return(new GenericTypeVar(jreSpiderRegistry.get(tvi.getName()).getName().toString(),parentClass,-1));
}else{ }else{
//String jccNameForClass=baseTypeTranslationTable.get(cl.getSimpleName()); //String jccNameForClass=baseTypeTranslationTable.get(cl.getSimpleName());
String jccNameForClass=baseTypeTranslationTable.get(cl.getName()); String jccNameForClass=baseTypeTranslationTable.get(cl.getName());
@ -1641,5 +1631,21 @@ public class SourceFile
//this.filename = filename; //this.filename = filename;
} }
@Override
public int getOffset() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getVariableLength() {
// TODO Auto-generated method stub
return 0;
}
} }
// ino.end // ino.end

View File

@ -1,22 +1,21 @@
package mycompiler; package de.dhbwstuttgart.syntaxtree;
import java.util.Vector; import java.util.Vector;
import typinferenz.ResultSet; import de.dhbwstuttgart.core.IItemWithOffset;
import typinferenz.TypeInsertable; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
import typinferenz.exceptions.DebugException; import de.dhbwstuttgart.syntaxtree.type.Type;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
import typinferenz.typedeployment.GenericTypeInsertPoint; import de.dhbwstuttgart.typeinference.Pair;
import typinferenz.typedeployment.TypeInsertPoint; import de.dhbwstuttgart.typeinference.ResultSet;
import typinferenz.typedeployment.TypeInsertSet; import de.dhbwstuttgart.typeinference.TypeInsertable;
import mycompiler.myclass.Class; import de.dhbwstuttgart.typeinference.exceptions.DebugException;
import mycompiler.myclass.Generic; import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
import mycompiler.mytype.GenericTypeVar; import de.dhbwstuttgart.typeinference.typedeployment.GenericTypeInsertPoint;
import mycompiler.mytype.Pair; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
import mycompiler.mytype.Type; import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;
import mycompiler.mytype.TypePlaceholder;
public abstract class SyntaxTreeNode{ public abstract class SyntaxTreeNode implements IItemWithOffset{
protected SyntaxTreeNode parent; protected SyntaxTreeNode parent;
@ -31,7 +30,8 @@ public abstract class SyntaxTreeNode{
*/ */
public void parserPostProcessing(SyntaxTreeNode parent) { public void parserPostProcessing(SyntaxTreeNode parent) {
this.parent = parent; this.parent = parent;
for(SyntaxTreeNode node : this.getChildren())node.parserPostProcessing(this); for(SyntaxTreeNode node : this.getChildren())
if(node!=null)node.parserPostProcessing(this);
} }
public SyntaxTreeNode getParent() { public SyntaxTreeNode getParent() {

View File

@ -1,30 +1,39 @@
// ino.module.DeclId.8558.package // ino.module.DeclId.8558.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree.misc;
// ino.end // ino.end
// ino.module.DeclId.8558.import // ino.module.DeclId.8558.import
import java.util.Vector; import java.util.Vector;
import mycompiler.mybytecode.Attribute;
import mycompiler.mybytecode.ClassFile;
import mycompiler.mybytecode.CodeAttribute;
import mycompiler.mybytecode.JVMCode;
import mycompiler.mybytecode.SignatureInfo;
import mycompiler.MyCompiler;
import mycompiler.myexception.JVMCodeException;
import mycompiler.mymodifier.Final;
import mycompiler.mymodifier.Modifiers;
import mycompiler.mystatement.Assign;
import mycompiler.mystatement.Expr;
import mycompiler.mystatement.ExprStmt;
import mycompiler.mystatement.InstVar;
import mycompiler.mystatement.LocalOrFieldVar;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
// ino.end // ino.end
import de.dhbwstuttgart.bytecode.Attribute;
import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.bytecode.CodeAttribute;
import de.dhbwstuttgart.bytecode.JVMCode;
import de.dhbwstuttgart.bytecode.SignatureInfo;
import de.dhbwstuttgart.core.MyCompiler;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.syntaxtree.Constant;
import de.dhbwstuttgart.syntaxtree.modifier.Final;
import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
import de.dhbwstuttgart.syntaxtree.statement.Assign;
import de.dhbwstuttgart.syntaxtree.statement.Expr;
import de.dhbwstuttgart.syntaxtree.statement.ExprStmt;
import de.dhbwstuttgart.syntaxtree.statement.InstVar;
import de.dhbwstuttgart.syntaxtree.statement.LocalOrFieldVar;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
// ino.class.DeclId.23280.declaration // ino.class.DeclId.23280.declaration
public class DeclId public class DeclId
// ino.end // ino.end
@ -205,7 +214,7 @@ public class DeclId
if (type instanceof RefType) if (type instanceof RefType)
codegen_type = ((RefType)type).get_codegen_Type(null); codegen_type = ((RefType)type).get_codegen_Type(null);
else else
codegen_type = JVMCode.get_codegen_Type(type.getName(), paralist); codegen_type = JVMCode.get_codegen_Type(type.getName().toString(), paralist);
// Instanzvariable genenerieren // Instanzvariable genenerieren
@ -216,7 +225,7 @@ public class DeclId
if(wert instanceof Expr) { if(wert instanceof Expr) {
classfile.add_field_ref(name, null, codegen_type); classfile.add_field_ref(name, null, codegen_type);
Assign assign = new Assign(getOffset(),name.length()); Assign assign = new Assign(getOffset(),name.length());
assign.set_Expr(new InstVar(name, type.getName(),getOffset()), (Expr)wert); assign.set_Expr(new InstVar(name, type.getName().toString(),getOffset()), (Expr)wert);
classfile.add_classblock_Element(assign); classfile.add_classblock_Element(assign);
} }
else throw new JVMCodeException("Wertzuweisung der Instanzvariable kann nicht uebersetzt werden!"); else throw new JVMCodeException("Wertzuweisung der Instanzvariable kann nicht uebersetzt werden!");

View File

@ -1,10 +1,7 @@
// ino.module.Status.8566.package // ino.module.Status.8566.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree.misc;
// ino.end // ino.end
// ino.module.Status.8566.import
import mycompiler.unused.Import;
// ino.end
// ino.class.Status.23644.declaration // ino.class.Status.23644.declaration
public abstract class Status public abstract class Status
@ -14,9 +11,6 @@ public abstract class Status
// ino.attribute.userdef.23647.declaration // ino.attribute.userdef.23647.declaration
protected UserDef userdef; protected UserDef userdef;
// ino.end // ino.end
// ino.attribute.imp.23650.declaration
protected Import imp;
// ino.end
// ino.method.set_UserDef.23653.definition // ino.method.set_UserDef.23653.definition
public void set_UserDef( UserDef userdef) public void set_UserDef( UserDef userdef)
@ -26,13 +20,6 @@ public abstract class Status
this.userdef = userdef; this.userdef = userdef;
} }
// ino.end // ino.end
// ino.method.set_Import.23656.definition
public void set_Import(Import imp)
// ino.end
// ino.method.set_Import.23656.body
{
this.imp = imp;
}
// ino.end
} }
// ino.end // ino.end

View File

@ -1,17 +1,17 @@
// ino.module.UsedId.8567.package // ino.module.UsedId.8567.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree.misc;
// ino.end // ino.end
// ino.module.UsedId.8567.import // ino.module.UsedId.8567.import
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.bytecode.JVMCode;
import typinferenz.ResultSet; import de.dhbwstuttgart.core.IItemWithOffset;
import typinferenz.exceptions.TypeinferenceException; import de.dhbwstuttgart.parser.JavaClassName;
import mycompiler.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.type.Type;
import mycompiler.mybytecode.JVMCode; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import mycompiler.mytype.Type; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
// ino.class.UsedId.23659.declaration // ino.class.UsedId.23659.declaration
@ -183,7 +183,7 @@ public class UsedId implements IItemWithOffset
// ino.end // ino.end
// ino.method.getSignatureUsedId.23717.body // ino.method.getSignatureUsedId.23717.body
{ {
String basis = JVMCode.get_codegen_Type(getQualifiedName(),null); String basis = JVMCode.get_codegen_Type(getQualifiedName().toString(),null);
if (paralist == null || paralist.size() ==0) if (paralist == null || paralist.size() ==0)
return basis; return basis;
@ -242,7 +242,7 @@ public class UsedId implements IItemWithOffset
// ino.end // ino.end
// ino.method.getQualifiedName.23726.definition // ino.method.getQualifiedName.23726.definition
public String getQualifiedName() public JavaClassName getQualifiedName()
// ino.end // ino.end
// ino.method.getQualifiedName.23726.body // ino.method.getQualifiedName.23726.body
{ {
@ -254,7 +254,7 @@ public class UsedId implements IItemWithOffset
sb.append("."); sb.append(".");
} }
} }
return(sb.toString()); return new JavaClassName(sb.toString());
} }
// ino.end // ino.end
@ -312,8 +312,8 @@ public class UsedId implements IItemWithOffset
// ino.end // ino.end
public JavaCodeResult printJavaCode(ResultSet resultSet) { public JavaCodeResult printJavaCode(ResultSet resultSet) {
if(this.name.size()>1)throw new TypeinferenceException("Es kann maximal nur eine Superklasse pro Klasse geben", this); if(this.name.size()>1)throw new TypeinferenceException("Es kann maximal nur eine Superklasse pro Klasse geben", null);
JavaCodeResult ret = new JavaCodeResult(this.getQualifiedName()); JavaCodeResult ret = new JavaCodeResult(this.getQualifiedName().toString());
if(this.paralist != null){ if(this.paralist != null){
ret.attach( "<" ); ret.attach( "<" );
Iterator<Type> it = this.paralist.iterator(); Iterator<Type> it = this.paralist.iterator();

View File

@ -1,5 +1,5 @@
// ino.module.UserDef.8568.package // ino.module.UserDef.8568.package
package mycompiler.myclass; package de.dhbwstuttgart.syntaxtree.misc;
// ino.end // ino.end
// ino.class.UserDef.23741.declaration // ino.class.UserDef.23741.declaration
public class UserDef extends Status public class UserDef extends Status

View File

@ -1,9 +1,8 @@
// ino.module.Abstract.8585.package // ino.module.Abstract.8585.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end
// ino.class.Abstract.24015.description type=javadoc // ino.class.Abstract.24015.description type=javadoc

View File

@ -1,9 +1,8 @@
// ino.module.Final.8586.package // ino.module.Final.8586.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end
// ino.class.Final.24022.description type=javadoc // ino.class.Final.24022.description type=javadoc

View File

@ -1,10 +1,10 @@
/** /**
* *
*/ */
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
/** /**
* @author Daniel * @author Daniel

View File

@ -1,8 +1,8 @@
// ino.module.Modifier.8587.package // ino.module.Modifier.8587.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end // ino.end
// ino.class.Modifier.24029.declaration // ino.class.Modifier.24029.declaration

View File

@ -1,15 +1,15 @@
// ino.module.Modifiers.8588.package // ino.module.Modifiers.8588.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
// ino.end // ino.end
// ino.module.Modifiers.8588.import // ino.module.Modifiers.8588.import
import java.util.Vector; import java.util.Vector;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.syntaxtree.type.BaseType;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end // ino.end
import mycompiler.mytype.BaseType;
// ino.class.Modifiers.24035.description type=javadoc // ino.class.Modifiers.24035.description type=javadoc
/** /**

View File

@ -1,9 +1,8 @@
// ino.module.Private.8589.package // ino.module.Private.8589.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end
// ino.class.Private.24059.declaration // ino.class.Private.24059.declaration

View File

@ -1,9 +1,8 @@
// ino.module.Protected.8590.package // ino.module.Protected.8590.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end
// ino.class.Protected.24066.declaration // ino.class.Protected.24066.declaration

View File

@ -1,9 +1,8 @@
// ino.module.Public.8591.package // ino.module.Public.8591.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end
// ino.class.Public.24073.declaration // ino.class.Public.24073.declaration

View File

@ -1,9 +1,8 @@
// ino.module.Static.8592.package // ino.module.Static.8592.package
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
// ino.end
// ino.class.Static.24080.declaration // ino.class.Static.24080.declaration

View File

@ -1,10 +1,10 @@
/** /**
* *
*/ */
package mycompiler.mymodifier; package de.dhbwstuttgart.syntaxtree.modifier;
import typinferenz.JavaCodeResult; import de.dhbwstuttgart.typeinference.JavaCodeResult;
import typinferenz.ResultSet; import de.dhbwstuttgart.typeinference.ResultSet;
/** /**
* @author Daniel * @author Daniel

View File

@ -0,0 +1,75 @@
// ino.module.AddOp.8594.package
package de.dhbwstuttgart.syntaxtree.operator;
// ino.end
// ino.module.AddOp.8594.import
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;
import de.dhbwstuttgart.bytecode.ClassFile;
import de.dhbwstuttgart.bytecode.CodeAttribute;
import de.dhbwstuttgart.myexception.CTypeReconstructionException;
import de.dhbwstuttgart.myexception.JVMCodeException;
import de.dhbwstuttgart.syntaxtree.statement.Binary;
import de.dhbwstuttgart.syntaxtree.statement.Expr;
import de.dhbwstuttgart.syntaxtree.type.IntegerType;
import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.typeinference.ConstraintType;
import de.dhbwstuttgart.typeinference.ConstraintsSet;
import de.dhbwstuttgart.typeinference.Pair;
import de.dhbwstuttgart.typeinference.SingleConstraint;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
import de.dhbwstuttgart.typeinference.exceptions.DebugException;
import de.dhbwstuttgart.typeinference.unify.Unify;
// ino.class.AddOp.24088.declaration
public abstract class AddOp extends Operator
// ino.end
// ino.class.AddOp.24088.body
{
// ino.method.AddOp.24092.definition
public AddOp(int offset, int variableLength)
// ino.end
// ino.method.AddOp.24092.body
{
super(offset,variableLength);
}
// ino.end
// ino.method.codegen.24095.declaration
public abstract void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean neg, Vector paralist)
throws JVMCodeException;
// ino.end
@Override
protected Hashtable<RefType,RefType> getOperatorTypes() {
Hashtable<RefType, RefType> types = new Hashtable<RefType, RefType>();
types.put(new RefType("java.lang.Integer",-1),new RefType("java.lang.Integer",-1));
types.put(new RefType("java.lang.Double",-1),new RefType("java.lang.Double",-1));
types.put(new RefType("java.lang.Float",-1), new RefType("java.lang.Float",-1));
types.put(new RefType("java.lang.Long",-1), new RefType("java.lang.Long",-1));
types.put(new RefType("java.lang.String",-1), new RefType("java.lang.String",-1));
return types;
}
@Override
public HashMap<ConstraintType,ConstraintType> getReturnTypes(TypeAssumptions ass) {
HashMap<ConstraintType,ConstraintType> ret = new HashMap<ConstraintType,ConstraintType>();
ret.put(ass.getTypeFor(new RefType("java.lang.Integer",-1), this), ass.getTypeFor(new RefType("java.lang.Integer",-1),this));
ret.put(ass.getTypeFor(new RefType("java.lang.Double",-1), this), ass.getTypeFor(new RefType("java.lang.Double",-1),this));
ret.put(ass.getTypeFor(new RefType("java.lang.Float",-1), this), ass.getTypeFor(new RefType("java.lang.Float",-1),this));
ret.put(ass.getTypeFor(new RefType("java.lang.Long",-1), this), ass.getTypeFor(new RefType("java.lang.Long",-1),this));
ret.put(ass.getTypeFor(new RefType("java.lang.String",-1),this), ass.getTypeFor(new RefType("java.lang.String",-1),this));
return ret;
}
}
// ino.end

View File

@ -0,0 +1,32 @@
// ino.module.AndOp.8595.package
package de.dhbwstuttgart.syntaxtree.operator;
import java.util.Vector;
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
import de.dhbwstuttgart.syntaxtree.statement.Expr;
import de.dhbwstuttgart.syntaxtree.type.BooleanType;
import de.dhbwstuttgart.syntaxtree.type.IntegerType;
import de.dhbwstuttgart.syntaxtree.type.Type;
import de.dhbwstuttgart.typeinference.ConstraintsSet;
import de.dhbwstuttgart.typeinference.SingleConstraint;
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
// ino.class.AndOp.24101.declaration
public class AndOp extends LogOp
// ino.end
// ino.class.AndOp.24101.body
{
// ino.method.AndOp.24105.definition
public AndOp(int offset, int variableLength)
// ino.end
// ino.method.AndOp.24105.body
{
super(offset,variableLength);
}
// ino.end
}
// ino.end

View File

@ -1,15 +1,16 @@
// ino.module.DivideOp.8596.package // ino.module.DivideOp.8596.package
package mycompiler.myoperator; package de.dhbwstuttgart.syntaxtree.operator;
// ino.end // ino.end
// ino.module.DivideOp.8596.import // ino.module.DivideOp.8596.import
import java.util.Vector; import java.util.Vector;
import mycompiler.mybytecode.ClassFile;
import mycompiler.mybytecode.CodeAttribute; import de.dhbwstuttgart.bytecode.ClassFile;
import mycompiler.mybytecode.JVMCode; import de.dhbwstuttgart.bytecode.CodeAttribute;
import mycompiler.myexception.JVMCodeException; import de.dhbwstuttgart.bytecode.JVMCode;
import mycompiler.mystatement.Binary; import de.dhbwstuttgart.myexception.JVMCodeException;
import mycompiler.mystatement.Expr; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
// ino.end import de.dhbwstuttgart.syntaxtree.statement.Binary;
import de.dhbwstuttgart.syntaxtree.statement.Expr;
@ -41,7 +42,7 @@ public class DivideOp extends MulOp
code.add_code(JVMCode.ndiv(expr1.getTypeName())); code.add_code(JVMCode.ndiv(expr1.getTypeName()));
} }
// ino.end // ino.end
} }

Some files were not shown because too many files have changed in this diff Show More