Erste Implementierung des IntermediateType und unvollständige Implementierung von IntermediateRefType.

This commit is contained in:
Etienne Zink 2022-03-18 09:09:33 +01:00
parent c22d12f6b0
commit f457e7e4d0
6 changed files with 133 additions and 6 deletions

View File

@ -0,0 +1,5 @@
package de.dhbwstuttgart.intermediate.convert;
public class ASTToIntermediate {
//ToDo
}

View File

@ -1,4 +1,13 @@
package de.dhbwstuttgart.intermediate.types;
public class IntermediateExtendsWildcard {
import de.dhbwstuttgart.parser.scope.JavaClassName;
/**
* //ToDo Beschreiben
*
* @since Studienarbeit Type Erasure
* @author etiennezink
*/
public final class IntermediateExtendsWildcard {
//ToDo
}

View File

@ -1,4 +1,13 @@
package de.dhbwstuttgart.intermediate.types;
public class IntermediateGenericType {
import de.dhbwstuttgart.parser.scope.JavaClassName;
/**
* //ToDo Beschreiben
*
* @since Studienarbeit Type Erasure
* @author etiennezink
*/
public final class IntermediateGenericType {
//ToDo
}

View File

@ -1,4 +1,68 @@
package de.dhbwstuttgart.intermediate.types;
public class IntermediateRefType {
import de.dhbwstuttgart.parser.scope.JavaClassName;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Represents a Java reference type.
*
* @since Studienarbeit Type Erasure
* @author etiennezink
*/
public final class IntermediateRefType extends IntermediateType{
private final List<IntermediateRefType> typParameters;
public IntermediateRefType(JavaClassName className) {
this(className, new ArrayList<>());
}
public IntermediateRefType(JavaClassName className, List<IntermediateRefType> typParameters){
super(className);
this.typParameters = Collections.unmodifiableList(typParameters);
}
@Override
public String getClassSignature() {
//ToDo
return null;
}
@Override
public String getClassDescriptor() {
//ToDo
return null;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof IntermediateRefType)) return false;
IntermediateRefType intermediateRefType = (IntermediateRefType) o;
if(!getFullyQualifiedName().equals(intermediateRefType.getFullyQualifiedName())) return false;
for(int index = 0; index < typParameters.size(); index++){
if(!typParameters.get(index).equals(intermediateRefType.typParameters.get(index))) return false;
}
return true;
}
@Override
public int hashCode() {
//ToDo korrekte Definition auf Basis von equals
return 0;
}
public int getTypParameterSize(){ return typParameters.size(); }
/**
* @param index
* @return the typ parameter at {@code index} or {@code null}, iff {@code |typ parameters| < index}
*/
public IntermediateType getTypParameter(int index) {
if(getTypParameterSize() < index) return null;
return typParameters.get(index);
}
}

View File

@ -1,4 +1,13 @@
package de.dhbwstuttgart.intermediate.types;
public class IntermediateSuperWildcard {
import de.dhbwstuttgart.parser.scope.JavaClassName;
/**
* //ToDo Beschreiben
*
* @since Studienarbeit Type Erasure
* @author etiennezink
*/
public final class IntermediateSuperWildcard {
//ToDo
}

View File

@ -1,5 +1,36 @@
package de.dhbwstuttgart.intermediate.types;
public interface IntermediateType {
import de.dhbwstuttgart.core.IItemWithOffset;
import de.dhbwstuttgart.parser.scope.JavaClassName;
import org.antlr.v4.runtime.Token;
/**
* //ToDo Beschreiben
*
* @since Studienarbeit Type Erasure
* @author etiennezink
*/
public abstract class IntermediateType {
private final JavaClassName className;
public IntermediateType(JavaClassName className){ this.className = className; }
@Override
public abstract boolean equals(Object o);
@Override
public abstract int hashCode();
public abstract String getClassSignature();
public abstract String getClassDescriptor();
@Override
public String toString() { return getFullyQualifiedName(); }
public String getClassName() {
return className.getClassName();
}
public String getPackageName() { return className.getPackageName(); }
public String getFullyQualifiedName() { return className.toString(); }
}