forked from JavaTX/JavaCompilerCore
Stand vom 9.11.2013 angefügt
This commit is contained in:
parent
218684dd24
commit
7ec923c4bb
12
.cvsignore
Executable file
12
.cvsignore
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
bin
|
||||||
|
*.class
|
||||||
|
output*
|
||||||
|
JavaLexer.java
|
||||||
|
JavaParser.java
|
||||||
|
*.~*~
|
||||||
|
*.aux
|
||||||
|
*.dvi
|
||||||
|
*.log
|
||||||
|
y.output
|
||||||
|
Bytecode
|
||||||
|
JavaParserBuilder.launch
|
@ -12,10 +12,10 @@
|
|||||||
<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"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
|
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JavaCompilerCoreCVS"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JavaCompilerCore"/>
|
||||||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="true"/>
|
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/JavaCompilerCoreCVS/tools/AntParserBuilderWindows.xml}"/>
|
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/JavaCompilerCore/tools/AntParserBuilderWindows.xml}"/>
|
||||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="incremental,clean"/>
|
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="incremental,clean"/>
|
||||||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
|
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/JavaCompilerCoreCVS/tools}"/>
|
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/JavaCompilerCore/tools}"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
6
.project
6
.project
@ -7,16 +7,12 @@
|
|||||||
<buildSpec>
|
<buildSpec>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
|
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
|
||||||
<triggers>clean,full,incremental,</triggers>
|
<triggers>clean,incremental,</triggers>
|
||||||
<arguments>
|
<arguments>
|
||||||
<dictionary>
|
<dictionary>
|
||||||
<key>LaunchConfigHandle</key>
|
<key>LaunchConfigHandle</key>
|
||||||
<value><project>/.externalToolBuilders/JavaParserBuilder.launch</value>
|
<value><project>/.externalToolBuilders/JavaParserBuilder.launch</value>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
<dictionary>
|
|
||||||
<key>incclean</key>
|
|
||||||
<value>true</value>
|
|
||||||
</dictionary>
|
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
|
7
bin/mycompiler/test/lambda/GenericParameterTest.jav
Normal file
7
bin/mycompiler/test/lambda/GenericParameterTest.jav
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class GenericVarTest{
|
||||||
|
Vector<? extends Object> test;
|
||||||
|
method(){
|
||||||
|
test = test;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,6 @@ class LambdaTest1{
|
|||||||
var = "test";
|
var = "test";
|
||||||
|
|
||||||
method(String toAppend){
|
method(String toAppend){
|
||||||
return (String text) -> { return text;};
|
return (String text) -> { return toAppend;};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
73
bin/mycompiler/test/lambda/testResults/LambdaTest.log
Normal file
73
bin/mycompiler/test/lambda/testResults/LambdaTest.log
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
Class DEBUG [Typeinference] Erstellte Assumptions: Set {
|
||||||
|
op: TPH C,
|
||||||
|
<init>: NOPARAS --> TestLambda
|
||||||
|
}
|
||||||
|
Block DEBUG [Typeinference] Prozessing statement: null Return (test = mycompiler.mystatement.StringLiteral@3f78d35f)
|
||||||
|
Block DEBUG [Typeinference] Prozessing statement: TPH G Return TPH F(test: TPH D = mycompiler.mystatement.StringLiteral@3f78d35f)
|
||||||
|
Class DEBUG [Typeinference] Erstellte Constraints: String < TPH D
|
||||||
|
TPH D < TPH F
|
||||||
|
TPH F < TPH G
|
||||||
|
Fun1< TPH G, TPH D > < TPH E
|
||||||
|
TPH E < TPH C
|
||||||
|
TPH C < TPH H
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] Karthesisches Produkt der Constraints: [[(String <. TPH D), (TPH D <. TPH F), (TPH F <. TPH G), (Fun1< TPH G, TPH D > <. TPH E), (TPH E <. TPH C), (TPH C <. TPH H)]]
|
||||||
|
Class DEBUG [Typeinference] Unifiziertes Ergebnis: [[(TPH G = String), (TPH H = Fun1< String, String >), (TPH F = String), (TPH C = Fun1< String, String >), (TPH D = String), (TPH E = Fun1< String, String >)], [(TPH G = String), (TPH H = Fun1< String, ? extends String >), (TPH F = String), (TPH C = Fun1< String, String >), (TPH D = String), (TPH E = Fun1< String, String >)], [(TPH G = String), (TPH H = Fun1< String, ? super String >), (TPH F = String), (TPH C = Fun1< String, String >), (TPH D = String), (TPH E = Fun1< String, String >)], [(TPH G = String), (TPH H = Fun1< String, ? extends String >), (TPH F = String), (TPH C = Fun1< String, ? extends String >), (TPH D = String), (TPH E = Fun1< String, String >)], [(TPH G = String), (TPH H = Fun1< String, ? super String >), (TPH F = String), (TPH C = Fun1< String, ? super String >), (TPH D = String), (TPH E = Fun1< String, String >)]]
|
||||||
|
Class DEBUG [Typeinference] Typinformationen:
|
||||||
|
TestLambda: (TPH C op = TPH E :: (TPH D test) ->
|
||||||
|
TPH G :: (Return (TPH D test = "string" : String) : TPH F)
|
||||||
|
) : void
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference]
|
||||||
|
JavaFiles:
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] JavaFile für ResultSet Unified Constraints: [(TPH G = String), (TPH H = Fun1< String, String >), (TPH F = String), (TPH C = Fun1< String, String >), (TPH D = String), (TPH E = Fun1< String, String >)]
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] class TestLambda extends Object
|
||||||
|
{
|
||||||
|
Fun1<String, String> op = (String test) -> {
|
||||||
|
return test = "string";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] JavaFile für ResultSet Unified Constraints: [(TPH G = String), (TPH H = Fun1< String, ? extends String >), (TPH F = String), (TPH C = Fun1< String, String >), (TPH D = String), (TPH E = Fun1< String, String >)]
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] class TestLambda extends Object
|
||||||
|
{
|
||||||
|
Fun1<String, String> op = (String test) -> {
|
||||||
|
return test = "string";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] JavaFile für ResultSet Unified Constraints: [(TPH G = String), (TPH H = Fun1< String, ? super String >), (TPH F = String), (TPH C = Fun1< String, String >), (TPH D = String), (TPH E = Fun1< String, String >)]
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] class TestLambda extends Object
|
||||||
|
{
|
||||||
|
Fun1<String, String> op = (String test) -> {
|
||||||
|
return test = "string";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] JavaFile für ResultSet Unified Constraints: [(TPH G = String), (TPH H = Fun1< String, ? extends String >), (TPH F = String), (TPH C = Fun1< String, ? extends String >), (TPH D = String), (TPH E = Fun1< String, String >)]
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] class TestLambda extends Object
|
||||||
|
{
|
||||||
|
Fun1<String, ? extends String> op = (String test) -> {
|
||||||
|
return test = "string";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] JavaFile für ResultSet Unified Constraints: [(TPH G = String), (TPH H = Fun1< String, ? super String >), (TPH F = String), (TPH C = Fun1< String, ? super String >), (TPH D = String), (TPH E = Fun1< String, String >)]
|
||||||
|
|
||||||
|
Class DEBUG [Typeinference] class TestLambda extends Object
|
||||||
|
{
|
||||||
|
Fun1<String, ? super String> op = (String test) -> {
|
||||||
|
return test = "string";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -54,7 +54,7 @@ import typinferenz.ResultSet;
|
|||||||
import typinferenz.TypeAssumptions;
|
import typinferenz.TypeAssumptions;
|
||||||
import typinferenz.TypinferenzException;
|
import typinferenz.TypinferenzException;
|
||||||
import typinferenz.UndConstraint;
|
import typinferenz.UndConstraint;
|
||||||
|
import typinferenz.FunN;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -744,8 +744,21 @@ public class Class extends AClassOrInterface
|
|||||||
for(Vector<Pair> constraints : xConstraints){
|
for(Vector<Pair> constraints : xConstraints){
|
||||||
//Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen:
|
//Alle durch das Karthesische Produkt entstandenen Möglichkeiten durchgehen:
|
||||||
Vector<Vector<Pair>> result = new Vector<Vector<Pair>>();
|
Vector<Vector<Pair>> result = new Vector<Vector<Pair>>();
|
||||||
|
|
||||||
|
//Alle FunN-Typen werden per clone-methode in RefTypes verwandelt. (Die clone Methode in FunN darf nicht überschrieben werden.
|
||||||
|
for(Pair p : constraints){
|
||||||
|
if(p.TA1 instanceof FunN){
|
||||||
|
p.TA1 = p.TA1.clone();
|
||||||
|
}
|
||||||
|
if(p.TA2 instanceof FunN){
|
||||||
|
p.TA2 = p.TA2.clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Erst die Unifizierung erstellen:
|
//Erst die Unifizierung erstellen:
|
||||||
result.addAll(Unify.unify(constraints, supportData.getFiniteClosure()));
|
Vector<Vector<Pair>> unifyResult = Unify.unify(constraints, supportData.getFiniteClosure());
|
||||||
|
//Dann den Ergebnissen anfügen
|
||||||
|
result.addAll(unifyResult);
|
||||||
|
|
||||||
// Debugoutput:Vector<Vector<Pair>>
|
// Debugoutput:Vector<Vector<Pair>>
|
||||||
typinferenzLog.debug("Unifiziertes Ergebnis: "+result);
|
typinferenzLog.debug("Unifiziertes Ergebnis: "+result);
|
||||||
|
@ -14,7 +14,7 @@ import typinferenz.ResultSet;
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
||||||
* @version $Date: 2013/10/21 12:45:23 $
|
* @version $Date: 2013/09/22 20:12:53 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.class.GenericTypeVar.26505.declaration
|
// ino.class.GenericTypeVar.26505.declaration
|
||||||
|
@ -22,7 +22,7 @@ import mycompiler.mytypereconstruction.replacementlistener.ITypeReplacementListe
|
|||||||
* und
|
* und
|
||||||
* ist in einer zentralen Registry, d.h. einer <code>Hashtable</code> abgelegt.
|
* ist in einer zentralen Registry, d.h. einer <code>Hashtable</code> abgelegt.
|
||||||
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
* @author J<EFBFBD>rg B<EFBFBD>uerle
|
||||||
* @version $Date: 2013/10/21 12:45:22 $
|
* @version $Date: 2013/06/19 12:45:37 $
|
||||||
*/
|
*/
|
||||||
// ino.end
|
// ino.end
|
||||||
// ino.class.TypePlaceholder.26780.declaration
|
// ino.class.TypePlaceholder.26780.declaration
|
||||||
|
@ -105,9 +105,12 @@ public class FunN extends RefType implements ITypeReplacementListener{
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
public void replaceType(CReplaceTypeEvent e) {
|
public void replaceType(CReplaceTypeEvent e) {
|
||||||
if(R.equals(e.getOldType()))R=e.getNewType();
|
if(R.equals(e.getOldType()))this.setR(e.getNewType());
|
||||||
for(Type t : T){
|
for(Type t : T){
|
||||||
if(t.equals(e.getOldType()))T.setElementAt(e.getNewType(),T.indexOf(t));
|
if(t.equals(e.getOldType())){
|
||||||
|
T.setElementAt(e.getNewType(),T.indexOf(t));
|
||||||
|
this.setT(T);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,11 +143,20 @@ public class FunN extends RefType implements ITypeReplacementListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ein Überschreiben der clone-Methode ist notwendig, da sonst beim Unify-Algorithmus die Clone-Methode der Superklasse "RefType" ausgeführt wird.
|
* Die Clone-Methode von RefType darf von FunN NICHT überschrieben werden.
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public RefType clone()
|
public FunN clone()
|
||||||
{
|
{
|
||||||
return new FunN(this.R,this.T);
|
FunN ret = null;
|
||||||
|
Vector<Type> clonepara = new Vector<Type>();
|
||||||
|
for(int i = 0; i< this.T.size(); i++)
|
||||||
|
{
|
||||||
|
clonepara.addElement(((Type)this.T.elementAt(i)).clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = new FunN(this.R.clone(),clonepara);
|
||||||
|
ret.setPrimitiveFlag(this.getPrimitiveFlag());
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
7
test/mycompiler/test/lambda/GenericParameterTest.jav
Normal file
7
test/mycompiler/test/lambda/GenericParameterTest.jav
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class GenericVarTest{
|
||||||
|
Vector<? extends Object> test;
|
||||||
|
method(){
|
||||||
|
test = test;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
21
test/mycompiler/test/lambda/GenericParameterTest.java
Normal file
21
test/mycompiler/test/lambda/GenericParameterTest.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package mycompiler.test.lambda;
|
||||||
|
|
||||||
|
import mycompiler.mytest.LambdaTest;
|
||||||
|
import mycompiler.mytypereconstruction.CTypeReconstructionResult;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class GenericParameterTest {
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
executeTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String exampleJavFile = "GenericParameterTest.jav";
|
||||||
|
|
||||||
|
|
||||||
|
public void executeTest(){
|
||||||
|
LambdaTest tester = new LambdaTest(exampleJavFile);
|
||||||
|
CTypeReconstructionResult result1 = tester.runTestAndGetSingularResultSet();
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,6 @@ class LambdaTest1{
|
|||||||
var = "test";
|
var = "test";
|
||||||
|
|
||||||
method(String toAppend){
|
method(String toAppend){
|
||||||
return (String text) -> { return text;};
|
return (String text) -> { return toAppend;};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,11 @@ public class TestLambda {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void test() {
|
||||||
|
// Die folgenden 3 Lösungen sind alle richtig.
|
||||||
|
//TODO: Möglichkeit mehrere richtiger Lösungen beim Test implementieren.
|
||||||
|
variableTypeAssumptions.put("op", "Fun1<String, ? extends String>");
|
||||||
variableTypeAssumptions.put("op", "Fun1<String, String>");
|
variableTypeAssumptions.put("op", "Fun1<String, String>");
|
||||||
|
variableTypeAssumptions.put("op", "Fun1<String, ? super String>");
|
||||||
executeTest();
|
executeTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,8 +30,8 @@ public class TestLambda {
|
|||||||
|
|
||||||
public void executeTest(){
|
public void executeTest(){
|
||||||
LambdaTest tester = new LambdaTest(exampleJavFile);
|
LambdaTest tester = new LambdaTest(exampleJavFile);
|
||||||
tester.runTestAndCheckResultSet(classname, variableTypeAssumptions);
|
//tester.runTestAndCheckResultSet(classname, variableTypeAssumptions);
|
||||||
|
tester.runTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user