Skip to content

Commit 341c242

Browse files
Egor18monperrus
authored andcommittedJun 14, 2019
fix: fix autoimports for unknown methods in noclasspath (#3019)
1 parent 162a32b commit 341c242

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed
 

‎src/main/java/spoon/support/compiler/jdt/ReferenceBuilder.java

+1
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ <T> CtExecutableReference<T> getExecutableReference(MessageSend messageSend) {
454454
ref.setType(this.<T>getTypeReference(messageSend.expectedType(), true));
455455
if (messageSend.receiver.resolvedType == null) {
456456
// It is crisis dude! static context, we don't have much more information.
457+
ref.setStatic(true);
457458
if (messageSend.receiver instanceof SingleNameReference) {
458459
ref.setDeclaringType(jdtTreeBuilder.getHelper().createTypeAccessNoClasspath((SingleNameReference) messageSend.receiver).getAccessedType());
459460
} else if (messageSend.receiver instanceof QualifiedNameReference) {

‎src/test/java/spoon/test/imports/ImportTest.java

+24
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import spoon.reflect.code.CtTypeAccess;
3333
import spoon.reflect.cu.CompilationUnit;
3434
import spoon.reflect.declaration.CtClass;
35+
import spoon.reflect.declaration.CtConstructor;
3536
import spoon.reflect.declaration.CtElement;
3637
import spoon.reflect.declaration.CtField;
3738
import spoon.reflect.declaration.CtImport;
@@ -1534,6 +1535,7 @@ public void testBug2369_autoimports() {
15341535
" }" + nl +
15351536
"}", launcher.getFactory().Type().get("spoon.test.imports.testclasses.JavaLongUse").toString());
15361537
}
1538+
15371539
@Test
15381540
public void testImportReferenceIsFullyQualifiedAndNoGeneric() {
15391541
//contract: the reference of CtImport is always fully qualified and contains no actual type arguments
@@ -1556,4 +1558,26 @@ public void testImportReferenceIsFullyQualifiedAndNoGeneric() {
15561558
assertTrue(typeRef.isImplicit());
15571559
assertTrue(typeRef.getPackage().isImplicit());
15581560
}
1561+
1562+
@Test
1563+
public void testMethodChainAutoImports() {
1564+
// contract: A chain of unknown methods in noclasspath mode with enabled auto-imports should not corrupt argument
1565+
// https://github.com/INRIA/spoon/issues/2996
1566+
Launcher launcher = new Launcher();
1567+
launcher.getEnvironment().setNoClasspath(true);
1568+
launcher.getEnvironment().setShouldCompile(false);
1569+
launcher.getEnvironment().setAutoImports(true);
1570+
launcher.addInputResource("./src/test/resources/import-resources/fr/inria/PageButtonNoClassPath.java");
1571+
launcher.buildModel();
1572+
1573+
CtClass<?> clazz = (CtClass<?>) launcher.getFactory().Type().get("fr.inria.PageButtonNoClassPath");
1574+
CtConstructor<?> ctor = clazz.getConstructors().stream().findFirst().get();
1575+
List<CtStatement> statements = ctor.getBody().getStatements();
1576+
1577+
assertEquals("super(context, attributeSet)", statements.get(0).toString());
1578+
assertEquals("mButton = ((Button) (findViewById(R.id.page_button_button)))", statements.get(1).toString());
1579+
assertEquals("mCurrentActiveColor = getColor(R.color.c4_active_button_color)", statements.get(2).toString());
1580+
assertEquals("mCurrentActiveColor = getResources().getColor(R.color.c4_active_button_color)", statements.get(3).toString());
1581+
assertEquals("mCurrentActiveColor = getData().getResources().getColor(R.color.c4_active_button_color)", statements.get(4).toString());
1582+
}
15591583
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package fr.inria;
2+
3+
import android.content.Context;
4+
import android.content.res.ColorStateList;
5+
import android.util.AttributeSet;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.widget.Button;
9+
import android.widget.FrameLayout;
10+
import android.widget.ImageView;
11+
12+
import com.carconnectivity.mlmediaplayer.R;
13+
14+
public class PageButtonNoClassPath extends FrameLayout {
15+
private final Button mButton;
16+
private int mCurrentActiveColor;
17+
18+
public PageButtonNoClassPath(Context context, AttributeSet attributeSet) {
19+
super(context, attributeSet);
20+
mButton = (Button) findViewById(R.id.page_button_button);
21+
mCurrentActiveColor = getColor(R.color.c4_active_button_color);
22+
mCurrentActiveColor = getResources().getColor(R.color.c4_active_button_color);
23+
mCurrentActiveColor = getData().getResources().getColor(R.color.c4_active_button_color);
24+
}
25+
}

0 commit comments

Comments
 (0)
Please sign in to comment.