Skip to content

Commit

Permalink
feat(position): CompoundSourcePosition extends SourcePosition
Browse files Browse the repository at this point in the history
  • Loading branch information
pvojtechovsky committed Jun 26, 2018
1 parent f8a96bd commit 34b6552
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 39 deletions.
@@ -0,0 +1,30 @@
/**
* Copyright (C) 2006-2018 INRIA and contributors
* Spoon - http://spoon.gforge.inria.fr/
*
* This software is governed by the CeCILL-C License under French law and
* abiding by the rules of distribution of free software. You can use, modify
* and/or redistribute the software under the terms of the CeCILL-C license as
* circulated by CEA, CNRS and INRIA at http://www.cecill.info.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C license and that you accept its terms.
*/
package spoon.reflect.cu.position;

import spoon.reflect.cu.SourcePosition;

/**
* This interface represents the position of a program element in a source file.
*/
public interface CompoundSourcePosition extends SourcePosition {

int getNameStart();

int getNameEnd();

}
Expand Up @@ -16,19 +16,13 @@
*/
package spoon.reflect.cu.position;

import spoon.reflect.cu.SourcePosition;

/**
* This interface represents the position of a program element in a source file.
*/
public interface DeclarationSourcePosition extends SourcePosition {
public interface DeclarationSourcePosition extends CompoundSourcePosition {

int getModifierSourceStart();

int getModifierSourceEnd();

int getNameStart();

int getNameEnd();

}
10 changes: 10 additions & 0 deletions src/main/java/spoon/reflect/factory/CoreFactory.java
Expand Up @@ -67,6 +67,7 @@
import spoon.reflect.cu.CompilationUnit;
import spoon.reflect.cu.SourcePosition;
import spoon.reflect.cu.position.BodyHolderSourcePosition;
import spoon.reflect.cu.position.CompoundSourcePosition;
import spoon.reflect.cu.position.DeclarationSourcePosition;
import spoon.reflect.declaration.CtAnnotation;
import spoon.reflect.declaration.CtAnnotationMethod;
Expand Down Expand Up @@ -403,6 +404,15 @@ SourcePosition createSourcePosition(
/** Creates a source position that points to the given compilation unit */
SourcePosition createPartialSourcePosition(CompilationUnit compilationUnit);

/**
* Creates a compound source position.
*/
CompoundSourcePosition createCompoundSourcePosition(
CompilationUnit compilationUnit,
int startSource, int end,
int declarationStart, int declarationEnd,
int[] lineSeparatorPositions);

/**
* Creates a declaration source position.
*/
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/spoon/support/DefaultCoreFactory.java
Expand Up @@ -67,6 +67,7 @@
import spoon.reflect.cu.CompilationUnit;
import spoon.reflect.cu.SourcePosition;
import spoon.reflect.cu.position.BodyHolderSourcePosition;
import spoon.reflect.cu.position.CompoundSourcePosition;
import spoon.reflect.cu.position.DeclarationSourcePosition;
import spoon.reflect.declaration.CtAnnotation;
import spoon.reflect.declaration.CtAnnotationMethod;
Expand Down Expand Up @@ -154,6 +155,7 @@
import spoon.support.reflect.code.CtWhileImpl;
import spoon.support.reflect.cu.CompilationUnitImpl;
import spoon.support.reflect.cu.position.BodyHolderSourcePositionImpl;
import spoon.support.reflect.cu.position.CompoundSourcePositionImpl;
import spoon.support.reflect.cu.position.DeclarationSourcePositionImpl;
import spoon.support.reflect.cu.position.SourcePositionImpl;
import spoon.support.reflect.declaration.CtAnnotationImpl;
Expand Down Expand Up @@ -697,6 +699,11 @@ public SourcePosition createPartialSourcePosition(CompilationUnit compilationUni
return ((CompilationUnitImpl) compilationUnit).getOrCreatePartialSourcePosition();
}

@Override
public CompoundSourcePosition createCompoundSourcePosition(CompilationUnit compilationUnit, int startSource, int end, int declarationStart, int declarationEnd, int[] lineSeparatorPositions) {
return new CompoundSourcePositionImpl(compilationUnit, startSource, end, declarationStart, declarationEnd, lineSeparatorPositions);
}

@Override
public DeclarationSourcePosition createDeclarationSourcePosition(CompilationUnit compilationUnit, int startSource, int end, int modifierStart, int modifierEnd, int declarationStart, int declarationEnd, int[] lineSeparatorPositions) {
return new DeclarationSourcePositionImpl(compilationUnit, startSource, end, modifierStart, modifierEnd, declarationStart, declarationEnd, lineSeparatorPositions);
Expand Down
@@ -0,0 +1,76 @@
/**
* Copyright (C) 2006-2018 INRIA and contributors
* Spoon - http://spoon.gforge.inria.fr/
*
* This software is governed by the CeCILL-C License under French law and
* abiding by the rules of distribution of free software. You can use, modify
* and/or redistribute the software under the terms of the CeCILL-C license as
* circulated by CEA, CNRS and INRIA at http://www.cecill.info.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C license and that you accept its terms.
*/
package spoon.support.reflect.cu.position;

import spoon.reflect.cu.CompilationUnit;
import spoon.reflect.cu.position.CompoundSourcePosition;

import java.io.Serializable;

/**
* This class represents the position of a Java program element in a source
* file.
*/
public class CompoundSourcePositionImpl extends SourcePositionImpl
implements CompoundSourcePosition, Serializable {

private static final long serialVersionUID = 1L;
private int declarationSourceStart;
private int declarationSourceEnd;

public CompoundSourcePositionImpl(CompilationUnit compilationUnit, int sourceStart, int sourceEnd,
int declarationSourceStart, int declarationSourceEnd,
int[] lineSeparatorPositions) {
super(compilationUnit,
sourceStart, sourceEnd,
lineSeparatorPositions);
checkArgsAreAscending(declarationSourceStart, sourceStart, sourceEnd + 1, declarationSourceEnd + 1);
this.declarationSourceStart = declarationSourceStart;
this.declarationSourceEnd = declarationSourceEnd;
}

@Override
public int getSourceEnd() {
return declarationSourceEnd;
}

@Override
public int getSourceStart() {
return declarationSourceStart;
}

@Override
public int getNameStart() {
return super.getSourceStart();
}

@Override
public int getNameEnd() {
return super.getSourceEnd();
}

public int getEndLine() {
return searchLineNumber(declarationSourceEnd);
}

@Override
public String getSourceDetails() {
return super.getSourceDetails()
+ "\nname = " + getFragment(getNameStart(), getNameEnd());
}

}
Expand Up @@ -25,56 +25,32 @@
* This class represents the position of a Java program element in a source
* file.
*/
public class DeclarationSourcePositionImpl extends SourcePositionImpl
public class DeclarationSourcePositionImpl extends CompoundSourcePositionImpl
implements DeclarationSourcePosition, Serializable {

private static final long serialVersionUID = 1L;
private int modifierSourceEnd;
private int modifierSourceStart;
private int declarationSourceStart;
private int declarationSourceEnd;

public DeclarationSourcePositionImpl(CompilationUnit compilationUnit, int sourceStart, int sourceEnd,
int modifierSourceStart, int modifierSourceEnd, int declarationSourceStart, int declarationSourceEnd,
int[] lineSeparatorPositions) {
super(compilationUnit,
sourceStart, sourceEnd,
sourceStart, sourceEnd, declarationSourceStart, declarationSourceEnd,
lineSeparatorPositions);
checkArgsAreAscending(declarationSourceStart, modifierSourceStart, modifierSourceEnd + 1, sourceStart, sourceEnd + 1, declarationSourceEnd + 1);
this.modifierSourceStart = modifierSourceStart;
this.declarationSourceStart = declarationSourceStart;
this.declarationSourceEnd = declarationSourceEnd;
if (this.modifierSourceStart == 0) {
this.modifierSourceStart = declarationSourceStart;
}
this.modifierSourceEnd = modifierSourceEnd;
}

@Override
public int getSourceEnd() {
return declarationSourceEnd;
}

@Override
public int getSourceStart() {
return declarationSourceStart;
}

@Override
public int getModifierSourceStart() {
return modifierSourceStart;
}

@Override
public int getNameStart() {
return super.getSourceStart();
}

@Override
public int getNameEnd() {
return super.getSourceEnd();
}

public void setModifierSourceEnd(int modifierSourceEnd) {
this.modifierSourceEnd = modifierSourceEnd;
}
Expand All @@ -84,15 +60,10 @@ public int getModifierSourceEnd() {
return modifierSourceEnd;
}

public int getEndLine() {
return searchLineNumber(declarationSourceEnd);
}

@Override
public String getSourceDetails() {
return super.getSourceDetails()
+ "\nmodifier = " + getFragment(getModifierSourceStart(), getModifierSourceEnd())
+ "\nname = " + getFragment(getNameStart(), getNameEnd());
+ "\nmodifier = " + getFragment(getModifierSourceStart(), getModifierSourceEnd());
}

}

0 comments on commit 34b6552

Please sign in to comment.