Fehler wenn Feld gleich wie Klasse heißt #333

Closed
opened 2024-05-13 22:05:45 +00:00 by i21023 · 0 comments
Collaborator

Folgendes Beispiel:

Klasse Foo.jav

import java.lang.String;

public class Foo{
    public static String Bar = "Bar";
}

Klasse Bar.jav

public class Bar{
    public bar(){
        String s = Foo.Bar;
    }
}

Bar ruft also ein Feld in Foo auf, das zufällig gleich wie die Klasse heißt. Das kommt so tatsächlich im Code vom Compiler vor.

Das führt zu einer Exception

$ java -jar JavaTXCompiler.jar Bar.jav
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "de.dhbwstuttgart.syntaxtree.ClassOrInterface.getField(String)" because the return value of "de.dhbwstuttgart.core.JavaTXCompiler.getClass(de.dhbwstuttgart.parser.scope.JavaClassName)" is null
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.generateFieldVarOrClassname(StatementGenerator.java:825)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.generateLocalOrFieldVarOrClassName(StatementGenerator.java:795)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:696)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:644)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.generateLocalVariableAssignments(StatementGenerator.java:569)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:553)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:219)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:210)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convert(SyntaxTreeGenerator.java:554)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convert(SyntaxTreeGenerator.java:311)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convertClass(SyntaxTreeGenerator.java:213)
        at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convert(SyntaxTreeGenerator.java:165)
        at de.dhbwstuttgart.core.JavaTXCompiler.parse(JavaTXCompiler.java:676)
        at de.dhbwstuttgart.core.JavaTXCompiler.<init>(JavaTXCompiler.java:106)
        at de.dhbwstuttgart.core.ConsoleInterface.main(ConsoleInterface.java:40)
Folgendes Beispiel: Klasse Foo.jav ```java import java.lang.String; public class Foo{ public static String Bar = "Bar"; } ``` Klasse Bar.jav ```java public class Bar{ public bar(){ String s = Foo.Bar; } } ``` Bar ruft also ein Feld in Foo auf, das zufällig gleich wie die Klasse heißt. Das kommt so tatsächlich im Code vom Compiler vor. Das führt zu einer Exception ``` $ java -jar JavaTXCompiler.jar Bar.jav Exception in thread "main" java.lang.NullPointerException: Cannot invoke "de.dhbwstuttgart.syntaxtree.ClassOrInterface.getField(String)" because the return value of "de.dhbwstuttgart.core.JavaTXCompiler.getClass(de.dhbwstuttgart.parser.scope.JavaClassName)" is null at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.generateFieldVarOrClassname(StatementGenerator.java:825) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.generateLocalOrFieldVarOrClassName(StatementGenerator.java:795) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:696) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:644) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.generateLocalVariableAssignments(StatementGenerator.java:569) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:553) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:219) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.StatementGenerator.convert(StatementGenerator.java:210) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convert(SyntaxTreeGenerator.java:554) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convert(SyntaxTreeGenerator.java:311) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convertClass(SyntaxTreeGenerator.java:213) at de.dhbwstuttgart.parser.SyntaxTreeGenerator.SyntaxTreeGenerator.convert(SyntaxTreeGenerator.java:165) at de.dhbwstuttgart.core.JavaTXCompiler.parse(JavaTXCompiler.java:676) at de.dhbwstuttgart.core.JavaTXCompiler.<init>(JavaTXCompiler.java:106) at de.dhbwstuttgart.core.ConsoleInterface.main(ConsoleInterface.java:40) ```
dholle referenced this issue from a commit 2024-05-17 08:49:51 +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#333
No description provided.