Aktuelle Klasse wird nicht in Compiler geladen #323

Closed
opened 2024-04-17 20:36:21 +00:00 by i21023 · 0 comments
Collaborator

Bei einem der letzten Commits scheint etwas kaputt gegangen zu sein. Mit der Compilerversion von vor einer Woche, also 10.04 ist funktioniert es noch wie gewünscht.

Gegeben sei nochmal das Beispiel aus Issue #322, bei dem Bar um ein Feld s erweitert wurde.

.
└── src
    └── main
        └── p1
            ├── Bar.jav
            └── Foo.jav
//Bar.jav
package src.main.p1;
import java.lang.String;
import src.main.p1.Foo;

public class Bar {

    String s = "Hello, world!";

    main(){
        Foo foo = new Foo();
        foo.print();
    }

    getS(){
        return s;
    }
}
//Foo.jav
package src.main.p1;

import java.io.PrintStream;
import java.lang.System;
import java.lang.String;

public class Foo {
    print() {
        System.out.println("Hello, world!");
    }
}

Nun rufe ich den Compiler folgendermaßen auf:
$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar -d "out" -cp "." src/main/p1/Bar.jav

folgende Fehlermeldung kommt zurück:
Exception in thread "main" de.dhbwstuttgart.exceptions.TypeinferenceException: Kein Feld s gefunden

Da Bar eine Abhängigkeit zu Foo besitzt, wird beim Aufruf von Bar zuerst Foo compiliert. Wenn danach aber Bar kompiliert wird, wird nicht Bar in TypeInferenceInformation.classes geschreiben, sondern nochmal Foo

grafik
Hinterlegte Klassen in TypeInferenceInformation.classes

Aus diesem Grund findet der Compiler das Feld s natürlich nicht.

Bei einem der letzten Commits scheint etwas kaputt gegangen zu sein. Mit der Compilerversion von vor einer Woche, also 10.04 ist funktioniert es noch wie gewünscht. Gegeben sei nochmal das Beispiel aus Issue #322, bei dem Bar um ein Feld s erweitert wurde. ``` . └── src └── main └── p1 ├── Bar.jav └── Foo.jav ``` ```java //Bar.jav package src.main.p1; import java.lang.String; import src.main.p1.Foo; public class Bar { String s = "Hello, world!"; main(){ Foo foo = new Foo(); foo.print(); } getS(){ return s; } } ``` ```java //Foo.jav package src.main.p1; import java.io.PrintStream; import java.lang.System; import java.lang.String; public class Foo { print() { System.out.println("Hello, world!"); } } ``` Nun rufe ich den Compiler folgendermaßen auf: `$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar -d "out" -cp "." src/main/p1/Bar.jav` folgende Fehlermeldung kommt zurück: `Exception in thread "main" de.dhbwstuttgart.exceptions.TypeinferenceException: Kein Feld s gefunden` Da Bar eine Abhängigkeit zu Foo besitzt, wird beim Aufruf von Bar zuerst Foo compiliert. Wenn danach aber Bar kompiliert wird, wird nicht Bar in TypeInferenceInformation.classes geschreiben, sondern nochmal Foo ![grafik](/attachments/0c2a5670-f26c-4aa1-b16f-323021f2c79b) *Hinterlegte Klassen in `TypeInferenceInformation.classes`* Aus diesem Grund findet der Compiler das Feld s natürlich nicht.
dholle referenced this issue from a commit 2024-04-18 08:20:39 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#323
No description provided.