From 2b62ac43e64634f195860f4b70c59809d764f817 Mon Sep 17 00:00:00 2001
From: "Fikus, Evelyn (WWI2012D)" <wi12292@lehre.dhbw-stuttgart.de>
Date: Thu, 21 May 2015 17:10:04 +0200
Subject: [PATCH 1/3] =?UTF-8?q?21.05.15=20-=20Konferenz=20Call;=20Class.ja?=
 =?UTF-8?q?va=20GenByteCode=20Methode=20-=20Zusatz:=20R=C3=BCckgabewert=20?=
 =?UTF-8?q?sollte=20ByteCode=20sein;=20Entsprechend=20muss=20=C3=A4hnlich?=
 =?UTF-8?q?=20JavaCodeResult=20Klasse=20eine=20ByteCodeResult=20Klasse=20e?=
 =?UTF-8?q?rstellt=20werden...?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .classpath                                    | 21 +++---
 .settings/org.eclipse.jdt.core.prefs          | 26 +++----
 bin/log4j.xml                                 | 70 +++++++++----------
 bin/log4jTesting.xml                          | 48 ++++++-------
 src/de/dhbwstuttgart/syntaxtree/Class.java    | 17 ++++-
 .../dhbwstuttgart/syntaxtree/ClassBody.java   |  3 +-
 6 files changed, 100 insertions(+), 85 deletions(-)

diff --git a/.classpath b/.classpath
index 45b378ef..17feec47 100755
--- a/.classpath
+++ b/.classpath
@@ -1,10 +1,11 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry excluding=".classpath|.cvsignore|.externalToolBuilders/|.project|.settings/|Papers/|bin/|doc/|examples/|lib/|notizen/|src/|test/|tools/" including="log4j.xml" kind="src" path=""/>
-	<classpathentry kind="src" path="test"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.0%Foundation-1.0"/>
-	<classpathentry kind="lib" path="lib/junit-4.0.jar" sourcepath="/home/janulrich/.m2/repository/junit/junit/4.0/junit-4.0-sources.jar"/>
-	<classpathentry kind="lib" path="lib/cloning.jar"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry excluding=".classpath|.cvsignore|.externalToolBuilders/|.project|.settings/|Papers/|bin/|doc/|examples/|lib/|notizen/|src/|test/|tools/" including="log4j.xml" kind="src" path=""/>
+	<classpathentry kind="src" path="test"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="lib" path="lib/junit-4.0.jar" sourcepath="/home/janulrich/.m2/repository/junit/junit/4.0/junit-4.0-sources.jar"/>
+	<classpathentry kind="lib" path="lib/cloning.jar"/>
+	<classpathentry kind="lib" path="C:/Users/fikus/Desktop/bcel-5.2/bcel-5.2.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 2e8ab188..f307ce3c 100755
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,13 +1,13 @@
-eclipse.preferences.version=1
-instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+eclipse.preferences.version=1
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/bin/log4j.xml b/bin/log4j.xml
index 64e7c5db..f36fb342 100755
--- a/bin/log4j.xml
+++ b/bin/log4j.xml
@@ -1,35 +1,35 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
- <appender name="CONSOLE" class="de.dhbwstuttgart.logger.ConsoleAppender">
-    <param name="Target" value="System.out"/>
-
-    <layout class="de.dhbwstuttgart.logger.PatternLayout">
-      <param name="ConversionPattern" value="%-15C{1} %-5p [%-9c] %m%n"/>
-    </layout>	    
- </appender>
-
- <logger name="codegen">
-       <level value="INFO"/>
-       <appender-ref ref="CONSOLE"/>
- </logger>
-
- <logger name="parser">
-       <level value="OFF"/>
-       <appender-ref ref="CONSOLE"/>
- </logger>
- 
-  <logger name="inference">
-       <level value="WARN"/>
-       <appender-ref ref="CONSOLE"/>
- </logger>
- 
-
- <logger name="bytecode">
-       <level value="INFO"/>
-       <appender-ref ref="CONSOLE"/>
- </logger>
-
-</log4j:configuration>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
+
+ <appender name="CONSOLE" class="de.dhbwstuttgart.logger.ConsoleAppender">
+    <param name="Target" value="System.out"/>
+
+    <layout class="de.dhbwstuttgart.logger.PatternLayout">
+      <param name="ConversionPattern" value="%-15C{1} %-5p [%-9c] %m%n"/>
+    </layout>	    
+ </appender>
+
+ <logger name="codegen">
+       <level value="INFO"/>
+       <appender-ref ref="CONSOLE"/>
+ </logger>
+
+ <logger name="parser">
+       <level value="OFF"/>
+       <appender-ref ref="CONSOLE"/>
+ </logger>
+ 
+  <logger name="inference">
+       <level value="WARN"/>
+       <appender-ref ref="CONSOLE"/>
+ </logger>
+ 
+
+ <logger name="bytecode">
+       <level value="INFO"/>
+       <appender-ref ref="CONSOLE"/>
+ </logger>
+
+</log4j:configuration>
diff --git a/bin/log4jTesting.xml b/bin/log4jTesting.xml
index dc30c245..ef849218 100755
--- a/bin/log4jTesting.xml
+++ b/bin/log4jTesting.xml
@@ -1,24 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
-
- <appender name="CONSOLE" class="de.dhbwstuttgart.logger.ConsoleAppender">
-    <param name="Target" value="System.out"/>
-
-    <layout class="de.dhbwstuttgart.logger.PatternLayout">
-      <param name="ConversionPattern" value="%-15C{1} %-5p [%-9c] %m%n"/>
-    </layout>	    
- </appender>
-
- <logger name="trtest">
-       <level value="DEBUG"/>
-       <appender-ref ref="CONSOLE"/>
- </logger>
- 
-  <logger name="funcTest">
-       <level value="DEBUG"/>
-       <appender-ref ref="CONSOLE"/>
- </logger>
-
-</log4j:configuration>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
+
+ <appender name="CONSOLE" class="de.dhbwstuttgart.logger.ConsoleAppender">
+    <param name="Target" value="System.out"/>
+
+    <layout class="de.dhbwstuttgart.logger.PatternLayout">
+      <param name="ConversionPattern" value="%-15C{1} %-5p [%-9c] %m%n"/>
+    </layout>	    
+ </appender>
+
+ <logger name="trtest">
+       <level value="DEBUG"/>
+       <appender-ref ref="CONSOLE"/>
+ </logger>
+ 
+  <logger name="funcTest">
+       <level value="DEBUG"/>
+       <appender-ref ref="CONSOLE"/>
+ </logger>
+
+</log4j:configuration>
diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java
index 09d44797..2858dc9b 100755
--- a/src/de/dhbwstuttgart/syntaxtree/Class.java
+++ b/src/de/dhbwstuttgart/syntaxtree/Class.java
@@ -7,6 +7,9 @@ import java.util.Collection;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Iterator;
+
+import org.apache.bcel.generic.ClassGen;
+
 import de.dhbwstuttgart.typeinference.Menge;
 
 import de.dhbwstuttgart.logger.Logger;
@@ -33,7 +36,10 @@ 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 org.apache.bcel.generic.*;
+import org.apache.bcel.classfile.*;
+import org.apache.bcel.*;
+import java.io.*;
 
 // ino.class.Class.23010.declaration 
 public class Class extends GTVDeclarationContext implements AClassOrInterface, IItemWithOffset, Generic, GenericTypeInsertable
@@ -49,6 +55,15 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
     protected UsedId pkgName;
     protected Modifiers modifiers;
     protected String name;
+   /* private ClassGen _cg;
+    
+    public ClassGen genByteCode() {
+    	ByteCodeResult bc = new ByteCodeResult();
+    	_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] {  });
+    //_cg zur�ckgeben
+    	bc.append(BCELByteCodeOutput);
+    	return _cg;
+    }*/
 
     private Menge<Type> superif = new Menge<Type>();
 
diff --git a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java
index cbac8f9f..1c96052f 100755
--- a/src/de/dhbwstuttgart/syntaxtree/ClassBody.java
+++ b/src/de/dhbwstuttgart/syntaxtree/ClassBody.java
@@ -345,8 +345,7 @@ public void istParameterOK( Menge Parameter, Menge<Class> KlassenVektor  )
 		return ret.attach("}\n");
 
 	}
-
-
+	
 
     
 }

From 57350e2095d94d6067e2ac02841497260f6c411b Mon Sep 17 00:00:00 2001
From: "Fikus, Evelyn (WWI2012D)" <wi12292@lehre.dhbw-stuttgart.de>
Date: Fri, 22 May 2015 13:50:43 +0200
Subject: [PATCH 2/3] Fertige class.java ByteCode Generierung

---
 .classpath                                    |  2 +-
 .settings/org.eclipse.jdt.core.prefs          |  6 +-
 src/de/dhbwstuttgart/syntaxtree/Class.java    | 44 +++++++++++--
 .../typeinference/ByteCodeResult.java         | 64 +++++++++++++++++++
 4 files changed, 107 insertions(+), 9 deletions(-)
 create mode 100644 src/de/dhbwstuttgart/typeinference/ByteCodeResult.java

diff --git a/.classpath b/.classpath
index 17feec47..a88ba6e0 100755
--- a/.classpath
+++ b/.classpath
@@ -3,7 +3,7 @@
 	<classpathentry kind="src" path="src"/>
 	<classpathentry excluding=".classpath|.cvsignore|.externalToolBuilders/|.project|.settings/|Papers/|bin/|doc/|examples/|lib/|notizen/|src/|test/|tools/" including="log4j.xml" kind="src" path=""/>
 	<classpathentry kind="src" path="test"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
 	<classpathentry kind="lib" path="lib/junit-4.0.jar" sourcepath="/home/janulrich/.m2/repository/junit/junit/4.0/junit-4.0-sources.jar"/>
 	<classpathentry kind="lib" path="lib/cloning.jar"/>
 	<classpathentry kind="lib" path="C:/Users/fikus/Desktop/bcel-5.2/bcel-5.2.jar"/>
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index f307ce3c..37e3515b 100755
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -2,12 +2,12 @@ eclipse.preferences.version=1
 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java
index 2858dc9b..155337f9 100755
--- a/src/de/dhbwstuttgart/syntaxtree/Class.java
+++ b/src/de/dhbwstuttgart/syntaxtree/Class.java
@@ -9,6 +9,11 @@ import java.util.Hashtable;
 import java.util.Iterator;
 
 import org.apache.bcel.generic.ClassGen;
+import org.apache.bcel.generic.ConstantPoolGen;
+import org.apache.bcel.generic.InstructionFactory;
+import org.apache.bcel.generic.InstructionHandle;
+import org.apache.bcel.generic.InstructionList;
+import org.apache.bcel.generic.MethodGen;
 
 import de.dhbwstuttgart.typeinference.Menge;
 
@@ -41,6 +46,8 @@ import org.apache.bcel.classfile.*;
 import org.apache.bcel.*;
 import java.io.*;
 
+
+
 // ino.class.Class.23010.declaration 
 public class Class extends GTVDeclarationContext implements AClassOrInterface, IItemWithOffset, Generic, GenericTypeInsertable
 // ino.end
@@ -55,15 +62,42 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
     protected UsedId pkgName;
     protected Modifiers modifiers;
     protected String name;
-   /* private ClassGen _cg;
+    //For ByteCode Construction
+    private InstructionFactory _factory;
+    private ConstantPoolGen    _cp;
+    private ClassGen           _cg;
     
-    public ClassGen genByteCode() {
-    	ByteCodeResult bc = new ByteCodeResult();
+    //Method created with BCEL to generate ByteCode
+    public ByteCodeResult genByteCode() throws IOException {
+    	
+    	ByteCodeResult code = new ByteCodeResult();
+    	
+    	_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] {  }); //new String necessary?
+        _cp = _cg.getConstantPool();
+        _factory = new InstructionFactory(_cg, _cp);
+    	ByteArrayOutputStream out = new ByteArrayOutputStream(); 
+        
+        InstructionList il = new InstructionList();
+	    MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] {  }, "<init>", "bceltesting.leer", il, _cp);
+
+	    InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor
+	    il.append(_factory.createInvoke("java.lang.Object", "<init>", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL));
+	    InstructionHandle ih_4 = il.append(_factory.createReturn(org.apache.bcel.generic.Type.VOID)); //creates Constructor
+	    method.setMaxStack();
+	    method.setMaxLocals();
+	    _cg.addMethod(method.getMethod());
+	    il.dispose();
+	    _cg.getJavaClass().dump(out);
+	    code.attach(out.toString());
+	    
+        return code;
+        
+    	/*ByteCodeResult bc = new ByteCodeResult();
     	_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] {  });
     //_cg zur�ckgeben
     	bc.append(BCELByteCodeOutput);
-    	return _cg;
-    }*/
+    	return _cg;*/
+    }
 
     private Menge<Type> superif = new Menge<Type>();
 
diff --git a/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java
new file mode 100644
index 00000000..e0f2b382
--- /dev/null
+++ b/src/de/dhbwstuttgart/typeinference/ByteCodeResult.java
@@ -0,0 +1,64 @@
+package de.dhbwstuttgart.typeinference;
+
+import de.dhbwstuttgart.typeinference.Menge;
+
+import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
+
+public class ByteCodeResult{
+
+	private String byteCode = "";
+	//TODO: unresolvedTPHs entfernen. BROKEN!
+	private Menge<TypePlaceholder> unresolvedTPHs = new Menge<TypePlaceholder>();
+	
+	public ByteCodeResult(){
+		
+	}
+	
+	public ByteCodeResult(String byteCode){
+		this.byteCode += byteCode;
+	}
+	
+	public String getByteCode(){
+		return byteCode;
+	}
+	
+	public ByteCodeResult attach(ByteCodeResult byteCodeResult){
+		this.byteCode += byteCodeResult.getByteCode();
+		//Alle TPH anfügen:
+		for(TypePlaceholder tph : byteCodeResult.getUnresolvedTPH())this.addUnresolvedTPH(tph);
+		return this;
+	}
+	
+	public ByteCodeResult attach(String javaCode){
+		this.byteCode += javaCode;
+		return this;
+	}
+
+	public void addUnresolvedTPH(TypePlaceholder typePlaceholder) {
+		unresolvedTPHs.add(typePlaceholder);
+	}
+	
+	/**
+	 * Liefert alle TPHs, welche in diesem ByteCodeResult nicht zu einem Typ aufgelöst wurden.
+	 * Diese TPHs stehen dadurch im ByteCode als Variablennamen ohne zugeordnetem Typ.
+	 * @return
+	 */
+	public Menge<TypePlaceholder> getUnresolvedTPH(){
+		return unresolvedTPHs;
+	}
+	
+	@Override
+	public String toString(){
+		return getByteCode();
+	}
+	
+	@Override
+	public boolean equals(Object obj){
+		if(!(obj instanceof ByteCodeResult))return false;
+		ByteCodeResult equals = (ByteCodeResult)obj;
+		if(!equals.getByteCode().equals(this.getByteCode()))return false;
+		if(!equals.getUnresolvedTPH().equals(this.getUnresolvedTPH()))return false;
+		return true;
+	}
+	
+}

From a94d7326b14bc4c1d01bbde0204bda945993d666 Mon Sep 17 00:00:00 2001
From: "Fikus, Evelyn (WWI2012D)" <wi12292@lehre.dhbw-stuttgart.de>
Date: Fri, 22 May 2015 13:54:46 +0200
Subject: [PATCH 3/3] Kleiner Formfehler korrigiert

---
 src/de/dhbwstuttgart/syntaxtree/Class.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/de/dhbwstuttgart/syntaxtree/Class.java b/src/de/dhbwstuttgart/syntaxtree/Class.java
index 155337f9..5acd3c00 100755
--- a/src/de/dhbwstuttgart/syntaxtree/Class.java
+++ b/src/de/dhbwstuttgart/syntaxtree/Class.java
@@ -78,7 +78,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
     	ByteArrayOutputStream out = new ByteArrayOutputStream(); 
         
         InstructionList il = new InstructionList();
-	    MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] {  }, "<init>", "bceltesting.leer", il, _cp);
+	    MethodGen method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, new String[] {  }, "<init>", pkgName.get_Name() + "." + name, il, _cp);
 
 	    InstructionHandle ih_0 = il.append(_factory.createLoad(org.apache.bcel.generic.Type.OBJECT, 0)); //creates Constructor
 	    il.append(_factory.createInvoke("java.lang.Object", "<init>", org.apache.bcel.generic.Type.VOID, org.apache.bcel.generic.Type.NO_ARGS, Constants.INVOKESPECIAL));